链接地址和运行地址

        链接地址:链接时指定的地址(指定方式:Makefile中用-Text,或者链接脚本)

        运行地址:程序实际运行时地址(指定方式:由实际运行时被加载到内存的哪个位置决定的)

        链接地址和运行地址:可能相同也可能不同。

        位置无关代码和位置有关代码:位置无关代码要好一些,适应强,放在哪里都可以运行;位置有关代码就必须。

        运行在链接时指定的地址上,适应性差。(位置无关码有限制,不能完成所有功能,有时候不得不使用位置有关代码)

s5pv210的启动过程:三星推荐和uboot的实现是不同的

        三星推荐的启动方式:bootloader必须大于16KB并小于96KB,假定bootloader为80KB,启动过程是这个样子:先开机上电后BL0运行,BL0会加载外部启动设备中的bootloader的前16KB(BL1)到SRAM中去运行,BL1运行时会加载BL2(bootloader中80-16=64KB)到SRAM中(从SRAM的16KB处开始用)去运行;BL2运行时会初始化DDR并且将OS搬运到DDR去执行OS,启动完成。

         uboot实际使用方式:uboot大小随意,假定为200KB。启动过程:先开机上电后BL0运行,BL0加载外部启动设备中的uboot的前16KB(BL1)到SRAM中去运行,BL1运行时会初始化DDR,然后整个uboot搬运到DDR中,然后一句长跳转(从SRAM跳转到DDR)指令从SRAM中直接跳转到DDR中继续执行uboot直到uboot完全启动,uboot启动后在uboot命令中去启动OS。

为什么需要重定位:

       链接地址和运行地址有时候必须不同,而且还不能全部使用位置无关码,这时候只能重定位。

猜你喜欢

转载自blog.csdn.net/weixin_40405692/article/details/81271110
今日推荐