关于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

关于uboot下data abort的问题,布布扣,bubuko.com

时间: 2024-08-22 22:22:08

关于uboot下data abort的问题的相关文章

Uboot下的Nor Flash的驱动以及使用

Uboot 下 CFI Nor Flash 的使用 韩大卫@吉林师范大学 2015.1.23 Flash : Micron Technology. 32MB. Uboot: 2_3_0 CPU平台: Cavium Inc 交叉编译器: mips64-octeon-linux-gnu-gcc (Cavium Inc. Version: 2_3_0 build 128) 4.3.3 nor flash 的使用特点是 :  读操作可以按地址读, 写之前必须进行擦除, 一旦擦除必须擦除整个扇区. 新型的

uboot下tftp传输文件

uboot下通过tftp工具传输文件,tftp与ftp是完全不同的工具或协议. 1) 下载并安装程序 sudo apt-get install tftp-hpa tftpd-hpa tftp-hpa是客户端程序,tftpd-hpa是服务器端程序. 2) 建立tftp服务器目录 建立一个tftp客户端访问服务器的目录,如下: 先进入到ubuntu系统的根目录,然后再建立一个目录,并修改目录属性: cd / sudo mkdir tftpboot sudo chmod 777 tftpboot 若在

uboot下netconsole的原理及使用方法

最近发现uboot下一个很有意思也很实用的功能:netconsole,uboot下的netconsole类似于kernel下的telnet等网络终端功能,将网络作为输入输出的终端,这样就便于我们在PC端通过网络登录设备uboot中运行命令(更准确的说是通过网络向uboot发送命令和接收uboot的反馈信息,netconsole没有登录检查). kernel下也有netconsole机制,不过由于内核下的console只有write功能(因为内核启动是没有交互的,只有输出信息),因此kernel下

uboot下的网络终端/控制台

许多linux设备可能没有外置串口,这是就需要一个网络终端来在uboot下操作设备,如升级镜像等. uboot下的网络终端为netconsole,代码drivers/net/netconsole.c. netconsole的使用方法如下: 1 在uboot的配置头文件中加入netconsole支持,#define CONFIG_NETCONSOLE,重编uboot 2 启动uboot后首先设备netconsole的服务器ip,set ncip serverip.然后修改uboot下的默认输入输出

uboot下使用U盘启动内核RT5350成功

今天尝试了下使用16G 的u盘,将其做了两个分区,一个是存放zimage,一个存放rootfs:在uboot中加载一分区的zimage并启动成功! RT5350 # fatload usb 0:1 0x80c00000 root_uImage reading root_uImage VFAT Support enabled FAT16, fat_sect: 1, fatlength: 251 Rootdir begins at cluster: 0, sector: 503, offset: 3

u-boot下延时程序失效的bug调试

最近在工作中的一个项目中,大概是将两块板卡相连(一块STM32跑裸机程序,另一块AM335x跑Linux系统),但是发现在u-boot有时无法启动成功,需要通过一个GPIO的状态来判断,具体来说就是本来上电后端口默认高阻抗,先利用程序先拉低大概100ms,然后在使用程序拉高100ms,然后STM32程序检测这段电平跳变,从而确定系统正确启动,否则会进行软件复位使AM335X的单板能够正常启动,程序本身并不难,但是调试时遇到了一个奇怪的bug,简单记录下. 平台:am335x,u-boot v20

DDMS下data文件夹打不开

为了查看安卓设备上某个应用的SQLite数据库内容,打开了DDMS,能看到data文件夹,但是打不开. 可是mnt文件夹却是可以打开的,然后仔细查看两个文件夹的不同: data   drwxrsw–x mnt    drwxrwxr-x mnt    drwxr-xr-x 好像少了read权限. 权限,data的other user权限里没有r,不可读. 解决方法: 进入sdk platform-tool >adb shell $ su # chmod 755 /data 补充一点,怎样进入ad

uboot下include\autoconfig.mk分析

CONFIG_CMD_FAT=yCONFIG_HARD_I2C=yCONFIG_IMX_OTP=yCONFIG_CMD_ITEST=yCONFIG_ETH_PRIME=yCONFIG_CMD_BDI=yCONFIG_MX6Q=yCONFIG_SYS_GBL_DATA_SIZE=128CONFIG_SYS_LOAD_ADDR="CONFIG_LOADADDR"CONFIG_DISPLAY_BOARDINFO=yCONFIG_STACKSIZE="(128 * 1024)&quo

uboot下的命令使用示例

1.usb 可以使用此命令读取u盘里的内容,此命令加上相关参数可以有以下功能: 1.1usb start 在使用u盘之前必须启动此命令以初始化好fat文件系统环境,笔者的输出如下: jello # usb start(Re)start USB...USB:   Starting the controllerscanning bus for devices... 5 USB Device(s) found       scanning bus for storage devices... usb_