Я пытаюсь понять перемещение u-boot из внутреннего ПЗУ в SRAM. В приведенном ниже коде показано, что u-boot копируется из ПЗУ в SRAM, а затем компьютер переходит к _start_armboot. Однако я не могу понять, где в коде происходит операция переназначения памяти.
Выдержка из u-boot-2010.09\arch\arm\cpu\arm920t\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 stack_setup
ldr r2, _armboot_start
ldr r3, _bss_start
sub r2, r3, r2 /* r2 <- size of armboot */
add r2, r0, r2 /* r2 <- source end address */
copy_loop:
ldmia r0!, {r3-r10} /* copy from source address [r0] */
stmia r1!, {r3-r10} /* copy to target address [r1] */
cmp r0, r2 /* until source end addreee [r2] */
ble copy_loop
#endif /* CONFIG_SKIP_RELOCATE_UBOOT */
/* Set up the stack */
stack_setup:
ldr r0, _TEXT_BASE /* upper 128 KiB: relocated uboot */
sub r0, r0, #CONFIG_SYS_MALLOC_LEN /* malloc area */
sub r0, r0, #CONFIG_SYS_GBL_DATA_SIZE /* bdinfo */
#ifdef CONFIG_USE_IRQ
sub r0, r0, #(CONFIG_STACKSIZE_IRQ+CONFIG_STACKSIZE_FIQ)
#endif
sub sp, r0, #12 /* leave 3 words for abort-stack */
bic sp, sp, #7 /* 8-byte alignment for ABI compliance */
clear_bss:
ldr r0, _bss_start /* find start of bss segment */
ldr r1, _bss_end /* stop here */
mov r2, #0x00000000 /* clear */
clbss_l:str r2, [r0] /* clear loop... */
add r0, r0, #4
cmp r0, r1
ble clbss_l
ldr pc, _start_armboot
В техническом описании AT91RM9200 указано, что внутреннее ПЗУ доступно по адресу 0x0000_0000 после сброса, а SRAM доступно только по адресу 0x0020_0000. После переназначения SRAM также доступна по адресу 0x0000_0000, а внутреннее ПЗУ доступно по адресу 0x0010_0000.
Может ли кто-нибудь помочь мне понять операцию переназначения в u-boot и показать мне код, соответствующий этому?
Спасибо