引用 6 楼 lucseven 的回复:
引用 2 楼 dairyman000 的回复:
跳转发生在
ldr pc, _start_armboot
start_armboot 的值为TEXT_BASE加上start_armboot的实际偏移值。
完成代码拷贝后,start.S做了一些诸如开启MMU,设置堆栈,清除bss的工作后,就开始执行C语言函数start_armboot. 也正是在这里,完成了向SDRAM的跳转。
谢谢,回复
_start_armboot 里的值是_start,编译的时候_start代表值不是0x0000?如果编译的时候 _start =0x0000,那么运行ldr pc, _start_armboot时岂不是跳到0x0了?
希望高手指正
我之前说的不对_start_armboot 里的值是void start_armboot()函数的地址,根据uboot的lds文件看,所有的代码都放在0x000开始的区域。程序怎么回调转到3ff80000左右的地址处运行呢?