首页 > 其他 > 详细

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

时间:2015-04-21 22:46:58      阅读:359      评论:0      收藏:0      [点我收藏+]

以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原理详细分析)。

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

原文:http://blog.csdn.net/emsoften/article/details/45174709

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!