参考http://blog.csdn.net/xieweihua2012/article/details/8474655根据X4412-uboot源码理解整理
board_init_f函数的最后返回到relocate_code,调用该函数的原型是Relocate_code(addr_sp,id,addr),其中三个参数的意义:
addr_sp是地址空间里面堆栈的首地址0xc3cf_bf50
id是存储gd_t类型全局参数的首地址0xc3cf_bf58
addr是uboot的重定位地址,也就是加载地址0XC3E0_0000
这三个参数的值都是在board_init_f函数里面定义好了的(UBOOT之源码分析(X4412)-----板级初始化)。
现在跳到arch/arm/cpu/armv7/start.s中的relocate_code代码标号处。
.globl relocate_code
relocate_code:
mov r4, r0 /*save addr_sp */
mov r5, r1 /*save addr of gd */
mov r6, r2 /*save addr of destination */
这里面r0,r1和r2分别对应上面所讲的三个参数
r0 – addr_sp
r1 – id
r2 – addr
/* Setup the stack*/
stack_setup