• 2009-01-08

    Device Emulator 设计的端倪

    Tag:

    版权声明:转载时请以超链接形式标明文章原始出处和作者信息及本声明
    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就解决了 


    历史上的今天:


    收藏到:Del.icio.us