中级会员
- 积分
- 389
- 金钱
- 389
- 注册时间
- 2019-4-25
- 在线时间
- 99 小时
|
5金钱
根据手册当选择SD卡启动时,bootRom会把SD卡的前 4K 数据读入到芯片内部 RAM 运行,然后在 arch\arm\lib\crt0.S 中的 relocate_code 函数会把整个uboot.imx搬运到外部的DDR中。我在分析uboot的 board_init_f 函数时,使用反汇编工具
- arm-buildroot-linux-gnueabihf-objdump -S u-boot > dumpview.txt
复制代码
查看反汇编代码,发现有的代码不是在4K的范围内,这样运行为什么不会出错呢?不应该是在 relocate_code 执行之前只能运行前4K的部分吗?
例如 display_options 函数位于 0x87842a70位置,text段的起始位置为0x87800000,这两个差大于了4K(0x1000)的范围了。
display_options 函数中优调用了 printf 函数,printf 函数的地址在 0x87845468 位置,也超出了 4K 的范围了。
|
|