jssd 发表于 2010-12-25 11:31:45

一个关于u-boot的问题

在start.S中
#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   clear_bss

    ldr        r2, _armboot_start
    ldr        r3, _bss_start
    sub        r2, r3, r2                /* r2 <- size of armboot            */
#if 1
    blCopyCode2Ram        /* r0: source, r1: dest, r2: size */
#else
    add        r2, r0, r2                /* r2 <- source end address         */

copy_loop:
    ldmia        r0!, {r3-r10}                /* copy from source address     */
    stmia        r1!, {r3-r10}                /* copy to   target address     */
    cmp        r0, r2                        /* until source end addreee     */
    ble        copy_loop
#endif
#endif        /* CONFIG_SKIP_RELOCATE_UBOOT */

编译之后的u-boot.map
.text         0x33d80000    0x22c40
cpu/arm920t/start.o(.text)
.text          0x33d80000      0x480 cpu/arm920t/start.o
                0x33d80058                IRQ_STACK_START
                0x33d80320                Launch
                0x33d80048                _bss_start
                0x33d8004c                _bss_end
                0x33d80044                _armboot_start
                0x33d80000                _start
                0x33d80054                FREE_RAM_SIZE
                0x33d80050                FREE_RAM_END
                0x33d8005c                FIQ_STACK_START

请问,从上面得出,在blCopyCode2Ram        /* r0: source, r1: dest, r2: size */之前,r2是不是等于4呢?如果等于4,难道说代码长度就是4?不理解。求解

flagyan 发表于 2011-2-1 13:32:07

这些地址是汇编代码里面的label的地址,具体的值是存储在这个地址的值(和c里面的指针差不多)
页: [1]
查看完整版本: 一个关于u-boot的问题