ARM Bootloader:“start_armboot”的值

时间:2014-01-30 15:26:32

标签: arm bootloader

在S3C24X0(ARM920T)的U-boot中,我们使用以下说明跳转到C部分:

ldr pc, _start_armboot  
_start_armboot: .word start_armboot  

但我怎么知道start_armboot的值呢?我找不到我们定义start_armboot的地址值的时间和地点。它也不存在于.lds文件中。或者因为

_start_armboot: .word start_armboot

我们将start_armboot直接放在当前位置后的内存中?那么我们怎么能把这个指令/地址与“void start_armboot(void)”的C函数联系起来呢?

1 个答案:

答案 0 :(得分:2)

_start_armboot: .word start_armboot只是意味着将符号start_armboot的地址放在该位置。

链接器负责在链接时使用正确的地址填充它。

在内部,start_armboot只是在编译成目标文件时填充了一些虚拟值(通常为零)的存根。之后,当所有目标文件聚集在一起时,链接器开始将各个部分放在一起。一旦布置了所有部分,它将返回目标文件并填充存根,因为链接器现在已知符号位置。