MIPS是一款RISC体系结构的中央处理器,在嵌入式运用的场合,和ARM相同,MIPS核作为IP授权给各集成电路规划厂商依据自己的特定运用出产专用的SOC(single on chip)处理方案。
为节约本钱,许多嵌入MIPS的SOC完结,省掉了MIPS的J—TAG支撑;或许运用MIPS核的体系,在构成产品运用到实践环境时,才呈现死机等反常状况。不管哪种状况,都使得要处理遇到的死机问题变得十分困难。
1 反常处理机制
任何一个CPU都要供给一个具体的反常和中止处理机制。一个软件体系,如操作体系,便是一个时序逻辑体系,经过时钟,外部事情来驱动整个预先界说好的逻辑行为。本文经过规划东西载入反常内存数据(dump),然后进行反汇编,得到体系产生反常状况,定位反常地点方位及引起反常的调用仓库,反序列出函数调用清单。
2 东西规划与完结
2.1 规划思路及流程
产品软件在工作中,引起死机的原因,一般是不合法指令或指令拜访了不合法地址。而这类不合法拜访,在支撑虚拟地址的CPU体系中,都会引起体系的指令反常,然后进入反常服务程序。该东西依据反常的仓库数据,合作整个程序空间的指令,列出引起死机问题的有用指令(引起反常的指令地址和函数调用回来的地址)的调用序列。然后防止处处置疑代码,参加各种调查代码劳心吃力的抓取死机现象来处理问题这种低效的方法。该东西对其他的硬件原因引起的死机问题,不在剖析之列。流程图如图1。

2.2 规划预备
1)在发布体系程序前,保证体系中反常服务程序,处于活动状况;反常服务程序中,关于数据和指令引起的反常,要输出(dump)引起反常使命其时的仓库数据。
2)发布体系程序时,保存源码和体系对应的反汇编代码备用。
3)在体系运转过程中,坚持对体系串口的接纳安排妥当状况,一旦体系产生反常引起死机,将接纳的数据保存到文件(即所指的serial.log文件)。
2.3 反汇编解析
1)仿制脚本文件disassemble.sh到ygwin\src\gnutools\mipsisa32-elf\bin目录下。
2)翻开Cygwin,在命令行运转disassemble.shOBERON.elf,生成OBERON.elf.lst文件。如图2。

3)运转MStarAnaWexe软件,在反汇编文件栏增加OBERONelf.list文件,在输出记载栏增加serial.log文件,如图3。

4)增加serial.log文件之后体系主动切换到检查仓库信息界面,如图4。
2.4 仓库剖析
1)一般状况下,本东西主动完结成果,在屏幕上顺次显现仓库调用状况,前面的是被调用函数,后边的是调用者。
2)在剖析过程中,可能会需求运用者输入两个参数,这时需求运用这依据输出成果剖析汇编代码,输入正确的值这两个值一个是汇编函数的回来地址地点的对边偏移,一个是本函数的仓库运用状况。回来地址要检查两个相关的汇编代码,“jr ra”即为函数回来指令,与之相关的另一条指令为“swra,xx(sp)”,“lw ra,xx(sp)”,前者是将ra寄存器的值保存到以sp为基址偏移为xx的仓库中,后者从以sp为基址偏移xx的仓库中获得数据载入ra寄存器。因而只需求从其间恣意一个指令都能得到回来地址在仓库中的偏移当一个函数中有两个以上的单向改动sp内容的指令呈现今后,本东西就无法推算出正确的函数占用仓库状况了,此刻需求运用者阅览汇编代码,输入正确的值。一般这类指令为
“addi sp,sp,-xx”,“addiu sp,sp,-xx”,“addiu sp,reg,mm”,只需sp跟在指令后边,那就有可能是改动了仓库基指针。然后依据从函数开端到调用(屏幕上)上一个函数呈现的方位,将其偏移值累加,相应的,“sw ra,xx(sp)”后边呈现的sp改变值也要累加到回来值偏移上去。
3)就图3而言,在仓库指针偏移栏中输入40,在回来地址根据仓库指针的偏移栏中输入32,然后确认,就会主动跳转到如图5。

4)同样在相应的选项中输入对应的指针偏移量之后,确认。得到如图6。
5)仓库剖析完结,死机的状况是因为图5中的5个函数(最终俩个去除)引起。
6)可复制函数之前的地址(如:_Zapper_Signal函数的地址是80041e98)到OBERON.elf.lst文件查找对应的汇编运转代码,如图7。

7)依以上过程检查导致过错的汇编代码或许在工程文件中对应函数参加调试,检查代码中存在那些过错。
3 结束语
正确快速查找呈现的反常并能快速剖析处理软件健壮性和稳定性的关键问题,该东西在满意以上条件的一起,完结如MIPS指令模拟器、MIPS断点调试等功能的扩展,具有比较强的推广性。