从这个链接脚本可以看出,uboot将整个程序进行了如下的布置
.text :
.rodata :
.data :
.got :
.u_boot_cmd :
.mmudata :
.bss :
代码段被首先链接,在代码段内第一个就是start.s 因为这就是uboot启动的第一条代码的地方,看一下map文件
Memory Configuration
Name Origin Length Attributes
*default* 0x00000000 0xffffffff
Linker script and memory map
0x00000000 . = 0x0
0x00000000 . = ALIGN (0x4)
.text 0x57e00000 0x27b8c
cpu/arm1176/start.o(.text)
.text 0x57e00000 0x440 cpu/arm1176/start.o
0x57e00040 _end_vect
0x57e0004c _bss_start
0x57e00050 _bss_end
0x57e00048 _armboot_start
0x57e00114 copy_from_nand
0x57e00000 _start
从map文件中,可以看到0x57e00000=_start 被放到了一条的位置(0x57e00000就是链接脚本指定的连接地址)
接着打开cpu/arm1176/start.S
.globl _start
_start: b reset
#ifndef CONFIG_NAND_SPL
ldr pc, _undefined_instruction
ldr pc, _software_interrupt
ldr pc, _prefetch_abort
ldr pc, _data_abort
ldr pc, _not_used
ldr pc, _irq
ldr pc, _fiq
第一条语句 b reset就被放到了_start的位置,这样uboot启动之后,就会开始执行这条语句,uboot的移植也会从这开始分析了
完。
Thanks a lot!