-
2009-01-08
Device Emulator 设计的端倪
版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
http://hunbalo.blogbus.com/logs/33572927.html
在Device Emulator上调试u-boot时一直发生一个奇怪的异常,data abort,把发生异常这个函数copy到
到文件的末尾异常就没有了,后来分析了u-boot的异常处理机制,并把发生异常的pc定位到,反汇编看了发生异常的代码,确实不访问存储器的指令,百思不得其解,怎么会发生这样的错误呢?
修改了u-boot的异常处理函数,把发生异常前后的指令码都打出来看,原来是从0x33f81000开始的几条指令与
编译后的指令不对应,再察看u-boot.bin 0x00001000偏移看没什么问题,用md指令把device emulator 0x00001000 的数据dump出来看,发现从0x00001004开始的几条指令被改了
0x00001004: e5801000
0x00001008: e5823000
0x0000100C: e5845000
0x00001010: eafffffe
比较eboot编译出来的二进制文件,这几条指令码一模一样,反汇编出来就是
STR R1, [R0]
STR R3, [R2]
STR R5, [R4]
B .
这正是eboot中start.S中安排的几条指令,
; Power-off the CPU.
str r1, [r0] ; enable SDRAM self-refresh.
str r3, [r2] ; MISCCR setting.
str r5, [r4] ; POWER OFF!!!!!
b .
这就是微软的魔障,不知道为什么要这样设置。
在uboot中修改代码把这一部分空间让出来,data abort就解决了随机文章:
各种手机模拟调试器与 Bluetooth 串口适配器的连接 2009-05-05Device Emulator 中CS8900A MAC 地址的端倪 2009-01-08脱密期完了 2009-01-01两年没有更新博客了,重新开始 2008-04-19教哥哥用电脑 2007-08-27
收藏到:Del.icio.us







