首页 > 代码库 > u-boot-2014.10移植第11天----深入分析代码(六)

u-boot-2014.10移植第11天----深入分析代码(六)

硬件平台: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天----深入分析代码(六)