硬件平台:tq2440
开发环境:Ubuntu-3.11
u-boot版本:2014.10
本文允许转载,请注明出处:http://blog.csdn.net/fulinus
“从relocate_code回到_main中,接下来是main最后一段代码”也就是arch/arm/lib/crt0.S文件中:
b relocate_code
here:
//从这里开始u-boot已经在重定位的地方运行了
/* Set up final (full) environment */
bl c_runtime_cpu_setup /* we still call old routine here */ 但是这里还需要调用一下重定位之前的代码。??为什么呢?难道这个函数值没有被修改吗?估计是,rel.dyn段中放着的应该是C函数中用到的一些变量,而汇编中用到的地址没有改变吧?(有待进一步研究),我们进入c_runtime_cpu_setup函数中去。明天继续。
ldr r0, =__bss_start /* this is auto-relocated! */
ldr r1, =__bss_end /* this is auto-relocated! */
mov r2, #0x00000000 /* prepare zero to clear BSS */
clbss_l:cmp r0, r1 /* while not at end of BSS */
strlo r2, [r0] /* clear 32-bit BSS word */
addlo r0, r0, #4 /* move to next */
blo clbss_l
bl coloured_LED_init
bl red_led_on
/* call board_init_r(gd_t *id, ulong dest_addr) */
mov r0, r9 /* gd_t */
ldr r1, [r9, #GD_RELOCADDR] /* dest_addr */
/* call board_init_r */
ldr pc, =board_init_r /* this is auto-relocated! */
/* we should not return here. */
#endif
ENDPROC(_main)
u-boot-2014.10移植第11天----深入分析代码(六)
原文地址:http://blog.csdn.net/fulinus/article/details/40792065