关于uboot下data abort的问题
2024-08-30 21:44:18
在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
最新文章
- java程序设计之循环链表
- 构造 &; 析构 &; 匿名对象&zwj;
- Groovy 转换JSON和生产JSON
- MongoDB修改器总结
- OLA音频变速算法的仿真与剖析
- jQuery eislideshow 图片轮播
- G-nav-03
- mysqli 操作数据库
- 关于 mvc 中 连字符 - 和下划线 _转换的问题。
- CSS基础深入之细说盒子模型
- 单实例运行tz
- grep线上环境精典案例后续
- Linux编程遇到的问题汇集(持续更新中)
- jQ伪类选择器
- Android应用市场的帮助类
- php 二维数组根据值进行排序
- mybatis XML中 遍历map写法
- 微信小程序动态数据跑马灯组件编写
- 收藏一篇 Python 文本框操作命令
- 上传文件夹+php