u-boot中链接地址和加载地址的相关知识

以zc702开发板的u-boot为例

链接地址(运行地址):链接地址是在程序编译链接阶段就确定好的地址。

       u-boot的链接脚本由CONFIG_SYS_LDSCRIPT宏定义来指定,如在zynq_common.h当中有如下代码:

#define CONFIG_SYS_LDSCRIPT  "arch/arm/cpu/armv7/zynq/u-boot.lds"

       在该链接脚本中指定了u-boot中各部分的链接顺序。同时zynq_common.h中的CONFIG_SYS_TEXT_BASE则指定了u-boot链接的起始地址,其定义如下:

#define CONFIG_SYS_TEXT_BASE   0x04000000
       在生成的u-boot.map中可看到链接后各函数的链接地址,如下所示,可看出链接起始地址确实为0x04000000
 arch/arm/cpu/armv7/start.o(.text*)
 .text          0x04000000      0x3a0 arch/arm/cpu/armv7/start.o
                0x04000000                _start
                0x04000040                _end_vect
                0x04000040                _TEXT_BASE
                0x04000044                _bss_start_ofs
                0x04000048                _bss_end_ofs
                0x0400004c                _end_ofs

加载地址:是指程序实际在内存上存放的地址。

       对于zc702来说,u-boot是被fsbl加载到内存中的,那么fsbl将u-boot加载到哪里呢?实际上fsbl就是将u-boot加载到了它的链接地址上。fsbl通过读取BOOT.bin(由fsbl和u-boot生成)的分区信息来获取u-boot的链接起始地址,然后就将这个链接起始地址作为u-boot的加载地址。


       对于u-boot来说,链接地址和加载地址可以一样也可以不一样。如在zc702开发板的新版u-boot中(如2014.4),在u-boot重定位前这两个地址是一样的,重定位后链接地址和加载地址就不一样了,但此时u-boot仍然可以正常运行(详细原理见uboot的relocation原理详细分析)。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值