关于运行地址和加载地址的几个很多初学者模糊不清的问题我在这里总结一下

(1)连接脚本中指定的(或者是在arm-linux-ld命令行中用参数Ttext指定的)运行地址,在运行程序不是位置无关码的时候将直接影响最后生成的 二进制运行代码是什么(即最后生成的二进制代码随这个指定的运行地址不同而不同)。而加载地址是否能影响生成代码见下面(2)(3)结论。

(2)如果连接脚本中指定了加载地址,并且脚本中还定义了等于加载地址(或与加载地址相关的)的一些符号(地址变量),而源程序中又引用了 这些符号来编程(通常引用这些与这些加载地址相关的符号是为了将代码从NAND/NOR上搬运到指定的运行地址上),那么可以说加载地址同样也影响 最后生成的二进制运行代码是什么。

(3)如果连接脚本中指定了加载地址,并且脚本中还定义了等于加载地址(或与加载地址相关的)的一些符号(地址变量),而源程序中根本没有 引用这些符号来编程,那么可以说加载地址根本不影响最后生成的二进制运行代码是什么。但是这个加载地址的信息将残留在连接后生成的文件中:在装了操作系统的台式机中,由操作系统将这个连接生成的ELF文件调入进入内存运行,而究竟调入内存什么位置就要根据此ELF文件中的加载地址信息;如果是嵌入式系统中的应用的话,我们首先用arm-linux-bjcopy将此ELF格式转换成纯净的二进制BIN 格式,然后再将BIN文件烧入NAND FLASH或者NOR FLASH中。在此BIN文件中仍然要反映出这个加载地址的信息,往往需要填充空白的0使得被指定了加载地址的段确实是定位到指定的那个加载地址上。(请参考我的另一个帖子 http://www.100ask.net/showtopic-1644.aspx

(4)_TEXT_BASE=0x33f80000是运行地址而不是加载地址。对于位置无关代码它可以在内存中任何地址正常运行。

(5)u-boot.lds中肯定已经指定了加载地址在0。ARM都是从0地址开始运行,如果UBOOT不加载到0地址开始运行就失去了bootloader的功能和意义了。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值