我是靠谱客的博主 活力泥猴桃,最近开发中收集的这篇文章主要介绍32linux单片机,基于MIPS32平台的Linux操作系统移植,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

reserved instruction exception,然后根据例外的种类跳转到相应的例外处理程序入口处。借助于编写对应的例外处理程序,可以为未被实际指令集实现但又属于标准指令集的指令(以1wl、1wr、swl、swr为例)提供逻辑等效的替换方法。在Linux内核源(以2.4.26版本为例)代码的目录树下进入.\arch\mips\kernal目录,打开traps.c文件,并添加simulate_lxRI函数,代码如下:

95bd777911b0ac1e5dffd0d3e8a9230c.png

其中:_OP_为宏操作,可取出32位机器码中的操作码以判断操作类型;Ox22对应于1wl指令、0x26对应于1wr指令,0x2A对应于swl指令,而0x2E则对应于swr指令。程序将根据不同的操作码进入不同的替代程序。va和byte变量则计算出4条非对齐指令的偏移量。

完成代码后将此函数添加到同一文件的do_ri函数中去,此函数即负责处理Linux操作系统的保留指令例外。添加的代码为:

47a030276b14566192783a660d3e5fea.png

即当simulate——lxRI正确处理完非对齐存取指令并返回1后,系统将通过compute_returrn_epc函数把epc寄存器的值放回pc寄存器并返回;否则,继续处理do_ri中其他的例外处理程序。

这一方法工作量小,容易保证修改后的等效性,对大多数熟悉C语肓的程序员来说都是易于掌握的。在软硬件协同开发的系统设计前期具有很大的实际使用价值。系统设计师可快速建立原型机跑通操作系统,以验证软硬件的正确性。但由于其采用的是例外处理的方式,若频繁发生例外则将影响系统性能,所以对memcpy(此函数代码在Linux源代码的arch\mips\lib目录下的memcpy.s文件中)这样使用频繁的汇编程序应手工修改其代码。再加上编译器一般不会生成4条非对齐指令(仅当C程序中的结构体有非字对齐等少数情况下会出现),所以此修改方法可保证能大致接近原性能。

c2c9ed493cd281aa86d8a6f5178c4c01.gif [1] [2] [3] 610626052e95c7fbe3d254abc769d9ad.gif

本网站转载的所有的文章、图片、音频视频文件等资料的版权归版权所有人所有,本站采用的非本站原创文章及图片等内容无法一一联系确认版权者。如果本网所选内容的文章作者及编辑认为其作品不宜公开自由传播,或不应无偿使用,请及时通过电子邮件或电话通知我们,以迅速采取适当措施,避免给双方造成不必要的经济损失。

最后

以上就是活力泥猴桃为你收集整理的32linux单片机,基于MIPS32平台的Linux操作系统移植的全部内容,希望文章能够帮你解决32linux单片机,基于MIPS32平台的Linux操作系统移植所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(123)

评论列表共有 0 条评论

立即
投稿
返回
顶部