历史上的今天
返回首页

历史上的今天

今天是:2025年01月28日(星期二)

2021年01月28日 | ARM基础知识教程六

2021-01-28 来源:eefocus

简介:ARM基础知识- ARM映像文件



1.ELF格式文件的结构


1.1映像文件组成部分


**一个映像文件有一个或多个域组成

**每个域包含一个或多个输出段

**每个输出段包含一个或多个输入段

**各输入段中包含了目标文件中的代码和数据


输入段中包含了四类内容:代码、已经初始化的数据、未经初始化的存储区域、内容初始化成0的存储区域。每个输入段有相应的属性,可以为只读的(RO)、可读写的(RW)以及初始化成0的(ZI)。ARM连接器根据个输入段的属性将这些输入段分组,再组成不同的输出段及域。

一个输出段中包含了一系列的具有相同的RO、RW和ZI属性的输入段。输出段的属性与其中包含的输入段的属性相同。在一个输出段的内部,各输入段是按照一定的规则排序的,这将在1.3节油详细地介绍。

一个域中包含1-3个输出段,其中个输出段的属性各不相同。各输出段的排列顺序是由其属性决定的。其中RO属性的输出段排在最前面,其次是RW属性的输出段,最后是ZI属性的输出段。一个域通常映射到一个物理存储器上,如ROM或RAM。



1.2ARM映像文件各组成部分的地址影射



ARM映像文件各组成部分在存储系统中的地址有两种:一种是映像文件位于存储器中时(也就是该映像文件运行之前)的地址,称之为加载地址;一种是映像文件运行时的地址,称之为运行时地址。之所以有这两种地址,是因为映像文件在运行时,其中的有些域是可以移动的新的存储区域。比如,已经初始化的RW属性的数据所在的段运行之前可能保存系统的ROM中,在运行时,他被移动至RAM中。

通常,一个映像文件包含若干个域,各域又包含若干的输出段。ARM连接器需要知道如下的信息,已决定如何生成相应的映像文件。

**分组信息决定如何将个输入段组织成相应的输出段和域。

**定位信息决定个域在存储空间地址中的起始地址。

根据映像文件中地址映射的复杂程度,有两种方法来告诉arm连接器这些相关信息。对于映像文件中地址映射关系比较简单的情况,可以使用命令行选项;对于映像文件中地址映射关系比较复杂的情况,可以使用一个配置文件。




2.arm映像文件的入口点



2.1arm映像文件的入口点有两种类型:一种是映像文件运行时的入口点,称为初始入口点(initial entry point),另一种是普通入口点(entry point).

初始入口点是映像文件运行时的入口点,每个映像文件只有一个唯一的初始入口点,它保存在ELF头文件中。如果映像文件是被操作系统加载的,操作系统是通过跳转到该初始入口点处来加载该映像文件。

普通的入口点是在汇编中用ENTRY伪操作定义。他通常用于标志该段代码是通过异常中断处理程序进入的。这样连接器删除无用的段时不会将该段代码删除。一个映像文件中可以定义多个普通入口点。

应该注意的是,初始入口点可以使普通入口点,但也可以不是普通入口点。



2.2定义初始入口点



初始入口点必须满足下面两个条件:

**初始入口点必须位于映像文件的运行时域内。

**饱含初始入口点的运行时域不能被覆盖,他的加载地址和运行地址必须是相同的。

可以使用连接选项-entry address来指定映像文件的初始入口点。这时,address指定了映像文件的初始入口点的地址值。

对于地址0x0处为rom的嵌入式应用系统,可以使用-entry 0x0来指定映像文件的初始入口点。这样当系统复位后,自动跳转到该入口开始执行。

如果映像文件是被一个加载器加载的,该映像文件该映像文件必须包含一个初始化入口点。这种映像文件通常还包含了其他普通入口点,这些普通入口点一般为异常中断处理程序的入口地址。

当用户没有指定-entry address时,连接器根据下面的规则决定映像文件的初始入口点。

**如果输入的目标文件中只有一个普通入口点,该普通入口点被连接器当成映像文件的初始入口点。

**如果输入的目标文件中没有一个普通入口点,或者其中的普通入口点多于一个,则连接器生成的映像文件中不包含初始入口点,并产生警告信息。



2.3普通入口点的用法



普通入口点是在汇编中用ENTRY 伪操作定义。在嵌入式应用中,各异常中断的处理程序入口使用普通入口点标示。这样连接器在删除无用段时不会将该段代码删除。

一个映像文件中可以定义多个普通入口点。没有指定连接选项-entry addres时,如果输入的目标文件中只有一个普通入口点,该入口点被连接器当成映像文件的初始入口点。





3输入段的排序规则


连接器根据输入段的属性来组织这些输入段,具有相同属性的输入段被放到域中一段连续的空间中,组成一个输出段。在一个输出段中,各输入段的起始地址与


输出段的起始地址和该输出段中个输入段的排列顺序有关。

通常情况下,一个输出段中个输入段的排列顺序由下面几个因素决定的。用户可以通过连接选项-first和-last来改变这些规则。

**输入段的属性。

**输入段的名称

**各输入段在连接命令行的输入段列表中的排列顺序

按照输入段的属性,其排列顺序如下所示:

**只读的代码段

**只读的数据段

**可读写的代码段

**其他已经初始化的数据段

**未出世化的数据

对于具有相同属性的输入段,按照其名称来排序。这是输入段名称是区分大小写的,按照其ASCII码顺序进行排序。

对于具有相同属性和名城的输入段,按照其在输入段列表中的顺序进行排序。也就是说,几十个输入段的属性和名称保持不变,如果其在编译时,各输入段在输


入段列表中的排列顺序不同,生成的映像文件也将不同。

可以通过连接选项-first和-last来改变这些规则。如果连接时使用了配置文件,可以在配置文件中通过伪属性FIRST和LAST达到相同的效果。

连接选项-first和-last不能改变根据输入段进行排序的规则,它只能改变根据输入段名称和其在输入列表中的顺序的排序规则。也就是说,如果使用-first指定


一个输入段,只有该输入段所在的输出段位于运行时域的开始位置时,该输入段才能位于整个运行时域的开始位置。

各个输入段排好顺序后,在确定各个输入段的起始地址之前,何以通过填充补丁是个输入段满足地址对齐的要求。


***********************************************************


ARM连接器介绍


***********************************************************


ARM连接器armlink将编译得到的ELF格式文件以及相关的C/C++运行时库连接生成相应的结果文件。armlink可以完成下面的操作:

**连接编译后得到的目标文件相应的c/c++运行时库,生成可执行的影像文件。

**将一些目标文件进行连接,生成一个新的目标文件,供将来进一步连接时使用,这成为部分连接。

**指定代码和数据在内存中的位置。

**生成被连接文件的调试信息和相互间的引用信息。

Armlink在进行部分连接和完全生成可执行文件时作进行的操作是不同的。下面分别介绍:

(1)解析输入的目标文件之间的符号引用关系。

(2)根据输入目标文件对c/c++函数的调用关系,从c/c++运行时库中提取相应模块。

(3)将各个输入段排序,组成相应的输出段。

(4)删除重复的调试信息。

(5)根据用户指定的分组和定位信息,建立映像文件的地址映射关系。

(6)重定位需要重定位的值。

(7)生成可执行的映像文件。

armlink在进行部分连接生成新的目标文件时执行下面的操作。

(1)删除重复的调试信息

(2)最小化符号表的大小

(3)保留那些未被解析的符号

(4)生成新的目标文件

下面根据各armlink的命令行选项的功能分类列举了armlink的命令行选项,各选项的具体用法将在后面有详细地介绍。

**提供关于armlink的帮助信息

**指定输出文件的名称和类型:*-output;*-partial;*-elf

**使用选项文件,其中可以包含一些连接选项。

**制定可执行映像文件的内存映射关系。*-rwpi;*-ropi;*-rw_base;*-ro_base;*-spit;*-scatter

**控制可执行映射文件的内容。*-first;*-last

**生成与映像文件的相关信息

**控制armlink生成相关的诊断信息。


推荐阅读

史海拾趣

磁联达(CND-tek)公司的发展小趣事

为了提高产品质量和客户满意度,磁联达(CND-tek)公司引入了一套严格的质量管理体系。公司从原材料采购、生产过程到成品检验等各个环节都进行了严格把关,确保每一件产品都符合高标准的质量要求。此外,公司还建立了完善的售后服务体系,为客户提供及时、专业的技术支持和解决方案。这些举措使得磁联达(CND-tek)的产品质量得到了客户的高度认可。

Delock公司的发展小趣事

在快速发展的同时,Delock公司始终将产品质量放在首位。公司建立了严格的质量控制体系,从原材料采购到生产流程,再到产品出厂,每一个环节都经过严格的检验。这种对品质的坚持让Delock公司的产品赢得了用户的信赖和好评。同时,公司还积极参与各类国际认证和评测,不断提升产品的品质水平。这些努力让Delock公司逐渐在电子行业中树立起了品质卓越的品牌形象。

Excelight Communications Inc公司的发展小趣事

为了进一步扩大市场份额,Excelight开始积极拓展国际市场。公司参加各类国际展会和论坛,与全球各地的客户和合作伙伴建立联系。同时,Excelight还加强了与国际知名企业的合作,共同开发新产品和新技术。

在市场拓展的过程中,Excelight始终坚持“质量第一、客户至上”的原则。公司不断提升产品质量和服务水平,赢得了客户的信任和口碑。如今,Excelight的产品已经远销欧美、亚非拉等多个国家和地区。

CHINFA公司的发展小趣事

在电子产品市场,品质是企业生存和发展的关键。CHINFA公司始终坚持品质至上的生产理念,从原材料采购到生产流程控制,再到产品检验和售后服务,都严格把关。公司引进了先进的生产设备和技术,建立了完善的质量管理体系,确保每一件产品都符合高标准的质量要求。这种对品质的执着追求,使CHINFA公司的产品在市场上赢得了良好的口碑。

Auctor Corp公司的发展小趣事

在产品质量和技术水平得到市场认可后,Auctor Corp公司开始积极拓展市场。公司通过与国内外知名企业建立合作关系,成功将产品打入多个国家和地区的市场。同时,公司还注重品牌塑造,通过参加国际电子展会、举办产品发布会等方式,提升品牌知名度和影响力。这些举措使得Auctor Corp在电子行业中的地位逐渐提升。

Empro Technology Corp公司的发展小趣事

为了保持技术领先地位,Empro Technology Corp不断加大研发投入,在多个技术领域取得了重大突破。公司申请了一系列专利,涵盖了芯片设计、制造工艺、应用技术等多个方面。这些专利的积累不仅保护了公司的技术成果,也为公司的长期发展奠定了坚实的基础。

问答坊 | AI 解惑

蓝牙的技术内容

蓝牙技术产品是采用低能耗无线电通信技术来实现语音、数据和视频传输的,其传输速率最高为每秒1Mb/s,以时分方式进行全双工通信,通信距离为10米左右,配置功率放大器可以使通信距离进一步增加。 蓝牙产品采用的是跳频技术,能够抗信号衰落;采用 ...…

查看全部问答>

需要推荐软件测试书?

  我是做网站设计的,对程序有一定的了解,自学软件测试快一个月了,常常是下班后自己在网上找资料看看,但是现在感觉头很大,知识很混乱,不知道怎么系统的去学习,哪位高手可以帮我出点主意吗,有什么好的参考资料吗?谢谢啦…

查看全部问答>

Make Image中文出错 

我使用的是wince 4.2 要建立的一个中文名字的快捷方式  在_FLATRELEASEDIR目录里已建好\"测试.lnk\" 在project.bib修改如下: FILES ;  Name            Path       ...…

查看全部问答>

夜深了,出个解决方案,让stm32f的CRC32主流化:

//CopyRight:www.mcuisp.com//版权: 单片机在线编程网详细代码请到www.mcuisp.com下载…

查看全部问答>

月薪20K+的电源工程师应具备什么?(转载)

薪水和收入,是和大家的生活、工作密切相关的永恒的话题。对于我们绝大部分打工者,我们基本没有其他的经济来源,我们纯粹就是工薪阶层。那么,如何提高我们的薪水?这个话题大家一定会喜欢吧?   为什么这里把月薪定义在20K,因为我觉得,20K是比 ...…

查看全部问答>

【MSP430共享】空调压缩机数据无线采集系统的研究术

针对空调压缩机有线数据采集系统存在的不足, 结合空调压缩机的结构特征,从传感器节点的低成本低功耗角度发, 利用单片机 MS P 4 3 0和n R F 9 0 5芯片在电池供电的低功耗应用中具有的优势, 提出了一种无线数据采集系统的方案。 该方 案利用n R F ...…

查看全部问答>

各位大牛都来看看可怜的成都菜鸟境遇

本人现在成都,因为参加各种竞赛没有去去学校安排的实习地方,现在事情已经完了,接下来就是找工作的事,可是一看网上的要求都是工作经验和啥子精通的,说实话我们大学本科毕业的最多就是了解或者熟悉,精通这个词对于我们来说太恐怖了,在学 ...…

查看全部问答>

zigbee无线发送模块的设计如何来学习长城2480啊?

    我是最近才接触zigbee的,要完成一个zigbee无线发送模块的设计课题,给出的参考设计方案是cc2480和MCU实现,我最近下了一些关于cc2480的管脚图和管脚说明,但是发现还是不容易看懂啊 ,不知道这个课题该从什么方面着手,请高人 ...…

查看全部问答>

求MSP430F425开发板上LCD-048 的资料。

小弟要画PCB板。。 没LCD-048 的封装数据…

查看全部问答>