新手解决bug 一步一坑-_-! 一切从最基础的开始 加油
报错内容如下:
536 bytes read in 6 ms (86.9 KiB/s)
** File not found /boot/dtb/sunxi/sun50i-h6-orangepi3.dtb **
data abort
pc : [<7edf1270>] lr : [<7ed96fbc>]
sp : 79cb85a4 ip : 00000065 fp : 7ed977dc
r10: 00000003 r9 : 79cffe60 r8 : 00000000
r7 : 7ade66c0 r6 : 00000000 r5 : 43000000 r4 : 7ee50514
r3 : 00000000 r2 : f7932b91 r1 : b4932b91 r0 : 43000000
Flags: nzCv IRQs on FIQs off Mode SVC_32
Resetting CPU ...
resetting ...
在网上查找资料发现有解决办法记一次uboot 中出现的 data abort 错误
该文章中讲 先将生成的uboot 文件 使用命令反汇编生成 .s 文件 然后找到出错的地方就可以定位到出错的函数 出错的语句 进而解决问题
但我在使用 命令 objdump -S u-boot > u-boot.s 反汇编的时候 报错
u-boot: file format elf32-little
objdump: can't disassemble for architecture UNKNOWN!
这个报错是架构不正确 因此换了交叉编译反汇编 aarch64-linux-gnu-objdump -S u-boot > u-boot.s 成功生成 u-boot.s文件。
但是 我这个出错的位置 很奇怪 查看了 u-boot.s 文件 通篇都是 4 开头的地址 但我报错的位置 是 7edf1270 就很奇怪 因此 定位不出 出错的函数 和 出错的语句 陷入僵局 继续查找资料!!!
上面这篇参考博客中写 这些错误是由于非对齐访问出现的 因此在uboot 源码 start.s 中开启非对齐访问可以解决该问题
如下:
/*
* disable MMU stuff and caches
*/
mrc p15, 0, r0, c1, c0, 0
bic r0, r0, #0x00002000 @ clear bits 13 (--V-)
bic r0, r0, #0x00000007 @ clear bits 2:0 (-CAM)
orr r0, r0, #0x00000000 @ set bit 1 (--A-) Align change Original value is #0x00000002
orr r0, r0, #0x00000800 @ set bit 11 (Z---) BTB