start.o中的代码装载地址和运行地址都为0x00000000,但是在start.o中会有一个u-boot自拷贝及重定位过程,start.o执行到最后时,整个u-boot已经被复制到了内存的TEXT_BASE(0x33f80000)位置,开始执行下面的跳转语句:
ldr pc, _start_armboot /*将标号_start_armboot的值传给pc,实际上是将start_armboot函数的首地址传给pc但是此时的start_armboot应该是在内存中,因为start_armboot一定是在4kB之后,而nandflash4kB之后的代码是无法直接访问的,必须先读入内存。而这时候u-boot的代码已经被拷贝并重定位到内存中,所以此处加在到pc的地址应当是内存中的地址,即33f800之后的某一地址*/
_start_armboot: .word start_armboot
| 评论 |
|
|