why uboot copying itself to RAM


As per my knowledge, MLO(SPL) does basic operation like clock configuration, initialization of external eMMC, ext RAM and copy the u-boot image from eMMC to RAM(DDR3) and jumps to RAM locate where it has copied the u-boot.
But the u-boot startup code seems to mislead me.

Here is the code of u-boot start.S:

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 */

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 /

why is u-boot’s start.S copying itself to ext RAM(DDR3)?


Did you look where the reset vector points?

This is a standard procedure for u-boot, why don’t you go ask them…


Google is working now


If you want to avoid it, I believe you could run SPL from internal memory and compile in your kernel boot mechanism.

Understood why we need this.

If we are using XIP memory then this is need else, SPL will be doing this operation.

Thanks a lot Jason.