一个关于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?不理解。求解 这些地址是汇编代码里面的label的地址,具体的值是存储在这个地址的值(和c里面的指针差不多)
页:
[1]