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

时间: 2024-10-12 23:42:36

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

关于Java中何时使用static和工具类相关知识

一.使用static修饰变量:当对象中出现共享数据时,该数据被静态修饰,对象中的特有数据要定义成非静态存放于堆内存中. 二.使用static修饰静态函数:当该函数内部没有访问到非静态数据(对象特有数据)时,可以定义为静态的. 三.工具类是为了封装功能(对象时为了封装数据),工具类中没有属性数据,只有实现各种功能的方法,这些方法都是静态的.为了防止其他类中创建工具类的对象(工具类对象毫无意义),所以可以对工具类的构造方法私有化.工具类中不需要对外开放的方法(这些方法功能工具类中其他方法调用)也要私

linux内核镜像的加载地址和入口地址

copy from :https://blog.csdn.net/whahu1989/article/details/85255538  https://wenku.baidu.com/view/2670021c195f312b3069a532.html linux内核启动时几个关键地址  1.名词解释ZTEXTADDR  解压代码运行的开始地址.没有物理地址和虚拟地址之分,因为此时MMU处于关闭状态.这个地址不一定时RAM的地址,可以是支持读写寻址的flash等存储中介. ZRELADDR 

使用mailto在网页中链接Email地址

使用mailto在网页中链接Email地址 <a>标签还有一个作用是可以链接Email地址,使用mailto能让访问者便捷向网站管理者发送电子邮件.我们还可以利用mailto做许多其它事情.下面一一进行讲解,请看详细图示: 注意:如果mailto后面同时有多个参数的话,第一个参数必须以“?”开头,后面的参数每一个都以“&”分隔. 下面是一个完整的实例: 在浏览器中显示的结果: 发送

swift禁用webView对H5中数字,链接,日期,地址,电话号码做解析

showWebView.dataDetectorTypes = .None //swift禁用webView对H5中数字,链接,日期,地址,电话号码做解析 其UIDataDetectorTypes属性: static var PhoneNumber: UIDataDetectorTypes { get } // Phone number detection static var Link: UIDataDetectorTypes { get } // URL detection static v

源码跟读,Spring是如何解析和加载xml中配置的beans

Spring版本基于: 跟踪代码源码基于: https://github.com/deng-cc/KeepLearning commit id:c009ce47bd19e1faf9e07f12086cd440b7799a63 1.配置启动Spring所需的监听器 web.xml中配置监听器 <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-cla

uboot 链接地址与运行地址的区别

对于ARM架构的CPU,上电后PC寄存器是指向0地址处的,从这个地址开始运行程序,那么运行了启动代码后会把程序搬移到内存中去运行,这样就是产生程序会在运行时有个两地址,而由源码编译为可执行文件时只会指定一个链接地址,指定的这个地址通常是在内存中运行时的运行地址,那么刚上电启动时的程序运行地址怎么办呐?这里要先介绍汇编语言中的位置无关码. 使用C/C++或者其他高级语言编程,最后会被编译器工具转换为汇编代码,最后再翻译成机器码存储在内存.硬盘或者其他存储器上.机器码的构造不同的CPU有不同的规则,

C#中使用正则表达式提取超链接地址的集中方法(转)

一般在做爬虫或者CMS的时候经常需要提取 href链接或者是src地址.此时可以使用正则表达式轻松完成. Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>"); MatchCollection mc = reg.Ma

以菱形链接(diamond link)为例,探讨Linux下连接器和加载器对Shared libarary兼容性的处理

1. 什么是菱形链接(diamond link) 菱形链接(diamond link)(参考文献 1)能十分清楚的描述出我们要讨论的问题. 如上图所示,我们的程序将要使用某厂家的共享库libvendor1.so,同时也要使用另外一个厂家的共享库libvendor2.so. libvendor1.so和libvendor2.so都将使用某知名开源共享库libopensource.so.xxx(xxx表示版本). 但是这两个厂家提供给我们的都是自己编译维护的libopensource.so.xxx.

C#中使用正则表达式提取超链接地址的集中方法

一般在做爬虫或者CMS的时候经常需要提取 href链接或者是src地址.此时可以使用正则表达式轻松完成. Regex reg = new Regex(@"(?is)<a[^>]*?href=(['""]?)(?<url>[^'""\s>]+)\1[^>]*>(?<text>(?:(?!</?a\b).)*)</a>"); MatchCollection mc = reg.Ma