關於uboot下data abort的問題

2021-09-30 12:14:58 字數 1716 閱讀 2604

在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

uboot模式下怎麼備份uboot和uImage

uboot中如果支援spi qspi flash,那麼可以使用sf的erase,read,write命令操作spi flash sf read用來讀取flash資料到記憶體 sf write寫記憶體資料到flash sf erase 擦除指定位置,指定長度的flash內容,擦除後內容全1 以備份ub...

uboot模式下怎麼備份uboot和uImage

uboot中如果支援spi qspi flash,那麼可以使用sf的erase,read,write命令操作spi flash sf read用來讀取flash資料到記憶體 sf write寫記憶體資料到flash sf erase 擦除指定位置,指定長度的flash內容,擦除後內容全1 以備份ub...

uboot模式下怎麼備份uboot和uImage

uboot中如果支援spi qspi flash,那麼可以使用sf的erase,read,write命令操作spi flash sf read用來讀取flash資料到記憶體 sf write寫記憶體資料到flash sf erase 擦除指定位置,指定長度的flash內容,擦除後內容全1 以備份ub...