关于uboot下data abort的问题

在uboot下,经常会出现一些非常让人揪心的问题。解决这些问题的关键就是方法与方向,把握好这两点,一切问题都可以迎刃而解。同时也要自信。如下:

有时我们会遇到如下的出错信息,这时CPU会reboot,

data abort

    MAYBE you should read doc/README.arm-unaligned-accesses

pc : [<1ff60148>]          lr : [<1ff6019c>]
sp : 1fb0a508  ip : 00000000     fp : 00000000
r10: 00000001  r9 : 1fb0af38     r8 : 1fb0c738
r7 : 00000011  r6 : 00000000     r5 : 00000011  r4 : 1fb0a53c
r3 : 00000000  r2 : 00000000     r1 : 6d6f6320  r0 : 00000000
Flags: nZCv  IRQs off  FIQs off  Mode SVC_32
Resetting CPU ...

resetting ...

 

U-Boot 2014.01-00001-gdd83b27 (Jun 27 2014 - 13:39:06)


 

那遇到这样的出错怎么办呢?

其实在出错时,uboot已经告诉我们如何去找出问题所在,如上面的问题,我们可以通过查看doc/README.arm-unaligned-accesses来找到出错的位置。

它告诉我们,可以通过dbinfo获取当前的relocate offset值,再通过odjdump -S来把u-boot进行反汇编,最后我们在反汇编中找到pc-relocate offset的位置,就可以定位到出错的位置。对于上面的问题,已经告诉我们出错的pc是0x1ff60148,现在就是要知通当前的offset值,这个可以通过dbinfo来猎取,如下:

uboot> bdinfo 
arch_number = 0x7FD76F2E
boot_params = 0xDFF1CFFF
DRAM bank   = 0x00000000
-> start    = 0x00000000
-> size     = 0x20000000
eth0name    = Gem.e000b000
ethaddr     = 00:0a:35:00:01:22
current eth = Gem.e000b000
ip_addr     = 192.168.80.10
baudrate    = 115200 bps
TLB addr    = 0x1FFF0000
relocaddr   = 0x1FF2B000
reloc off   = 0x1BF2B000
irq_sp      = 0x1FB0AF38
sp start    = 0x1FB0AF28
ARM frequency = 666 MHz
DSP frequency = 0 MHz
DDR frequency = 533 MHz

上面我们可以看到当前的offset就是0x1bf2b000,好了,现在通过与上面的pc相减,得到0x4035148,好了,现在就是在反汇编中找到这个pc的位置,就可以精确定义到出错问题。一般这种问题与指针有关。HTH

 

你可能感兴趣的:(ARM,u-boot)