|
调试阶段的代码是直接在RAM中运行的,而最后需要把这些代码固化到Flash中,因此U-Boot需要自己从Flash转移到
RAM中运行,这也是重定向的目的所在。通过adr指令得到当前代码的地址信息:如果U-boot是从RAM开始运行,则从adr,r0,_start得到的地址信息r0=_start=_TEXT_BASE=TEXT_BASE=0x33F80000; 如果U-boot从Flash开始运行,即从处理器对应的地址运行,
则r0=0x0000,这时将会执行copy_loop标识的那段代码了。
_TEXT_BASE 定义在board/smdk2410/config.mk中
#ifndef CONFIG_SKIP_RELOCATE_UBOOT
relocate: /* relocate U-Boot to RAM */
adr r0, _start /* r0 <- current position of code */
ldr r1, _TEXT_BASE /* test if we run from flash or RAM */
cmp r0, r1 /* don't reloc during debug */
beq stack_setup
这个通过adr指令得到当前代码的地址信息:如果U-boot是从RAM开始运行,则从adr,r0,_start得到的地址信息r0=_start=_TEXT_BASE=TEXT_BASE=0x33F80000; 如果U-boot从Flash开始运行,即从处理器对应的地址运行,则r0=0x0000是为什么啊,,请高手分析指点 |
|