ARM基础知识教程六

发布者:等放假的zr0最新更新时间:2021-01-28 来源: eefocus关键字:ARM  基础知识 手机看文章 扫描二维码
随时随地手机看文章

简介: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生成相关的诊断信息。


关键字:ARM  基础知识 引用地址:ARM基础知识教程六

上一篇:ARM基础知识教程五
下一篇:ARM开发的硬件选择

推荐阅读最新更新时间:2024-11-08 13:32

交叉编译工具链的命名规则
命名规则 交叉编译工具链的命名规则为:arch 根据对操作系统的支持与否,ARM GCC可分为支持和不支持操作系统,如 arm-none-eabi:这个是没有操作系统的,自然不可能支持那些跟操作系统关系密切的函数,比如fork(2)。他使用的是newlib这个专用于嵌入式系统的C库。 arm-none-linux-eabi:用于Linux的,使用Glibc 实例 1、arm-none-eabi-gcc (ARM architecture,no vendor,not target an operating system,complies with the ARM EABI) 用于编译 ARM 架构的裸机系统(包括 A
[单片机]
交叉编译工具链的命名规则
基于ARM的嵌入式多参数监护仪设计与实现
1 引 言 多参数监护仪广泛应用于ICU、CCU、病房、手术室等。目前我国也有自主知识产权的产品,如迈瑞、金科威、金脑人等,但与GE、飞利浦世界先进产品比较,在监测和计算、可靠性、实时性、稳定性、信号变异的处理分析、远程传输等方面都较落后 。嵌入式系统把计算机直接嵌入到应用系统之中,它融合了通信技术和半导体微电子技术,是信息技术IT的最终产品 。因此将嵌入式系统,网络等技术应用于医用监护仪领域,能使多参数监护仪顺应现代医用监护仪市场缩小体积,提高数据处理能力,远程医疗等方面的要求。 本文介绍一种基于ARM的实时监护系统,它将32位RISC结构的ARM内核处理器与实时多任务嵌入式系统相结合,并通过嵌入式TCP/IP协议栈
[单片机]
基于<font color='red'>ARM</font>的嵌入式多参数监护仪设计与实现
ARM:5年后拿下2成服务器市场
ARM在伺服器市场成功拉拢晶片、硬体系统、软体应用等夥伴,建立起伺服器生态,目前估计已有5到10%市占,期望到2020年可抢下2成伺服器市场。 ARM积极抢进资料中心,与AMD、HP等业者合作建立伺服器生态,计划在2020年抢下2成伺服器市场。 在行动装置市场获得高市占的ARM这几年一直试图积极扩大市场,希望延伸到汽车、智慧家庭、企业资料中心,特别是资料中心市场,先后推出锁定资料中心应用的32位元、64位元架构,获得HP、AMD、高通、Broadcom等业者的支持。 ARM 企业行销与投资人关系副总裁Ian Thornton表示,ARM已建立起伺服器生态,AMD推出ARM架构伺服器专用
[单片机]
模拟电路基础知识系列之一:半导体二极管
半导体基础知识部分 1.半导体---导电能力介于导体和绝缘体之间的物质(如硅Si、锗Ge)。 2.特性---光敏、热敏和掺杂特性。 3.本征半导体----纯净的具有单晶体结构的半导体。 4. 两种载流子 ----带有正、负电荷的可移动的空穴和电子统称为载流子。 5.杂质半导体----在本征半导体中掺入微量杂质形成的半导体。体现的是半导体的掺杂特性。 P型半导体: 在本征半导体中掺入微量的三价元素(多子是空穴,少子是电子)。 N型半导体: 在本征半导体中掺入微量的五价元素(多子是电子,少子是空穴)。 6. 杂质半导体的特性 载流子的浓度---多子浓度决定于杂质浓度,少子浓度与温度有关。 体电阻---通常把杂质半导体自身的电阻称为
[模拟电子]
模拟电路<font color='red'>基础知识</font>系列之一:半导体二极管
ZigBee技术在ARM数控系统组网中的应用
0 引言   当前嵌入型数控系统接收由CAD/CAM软件生成的G加工代码通过串口或以太网口传送。但使用串口传送通常需在数控系统旁再配备1台主机,而利用以太网口传送又会增加嵌入式处理器的运算压力。在目前常用的无线通信中,ZigBee具有低功耗,成本低,时延短,网络容量大,安全可靠,无需注册公共频段2.4G等优点,尤其是其低功耗的优势突出,适合数控系统的代码传输。故基于ARM技术和ZigBee技术实现嵌入型数控系统的无线组网,由ARM网关负责网络管理和数据分发,并提供Intemet接口,可远程登陆传输代码和进行控制。 1 系统网络的组建结构   网络结构拓扑采用星形结构,如图1。结构中心是基于ARM处理器设计的系统网关,接收来
[单片机]
ZigBee技术在<font color='red'>ARM</font>数控系统组网中的应用
锁定物联网市场 ARM再推低功耗处理器
继去年推出mbed OS 3.0设计平台、ARMv8-M指令集架构,以及对应低耗电嵌入式装置设计的Cortex-A35处理器之后,ARM再次宣布推出以ARMv8-A指令集架构为基础的Cortex-A32处理器,并且以32位元架构设计,主要锁定在更广泛的嵌入式或物联网应用产品。 相较采用64位元架构设计的Cortex-A35,此次推出的Cortex-A32显然将贴近原本以32位元架构设计应用服务,同时也缩减开发者投入嵌入式或物联网应用难度,本身也同样对应去年宣布推出的ARMv8-M指令集架构,同时产品定位也将延续过去推出的Cortex-A5、Cortex-A7处理器,相比之下将额外增加25%效能或30%效能,相比Cortex-
[物联网]
ARM下载错误
在用JLINK下载arm芯片时,提示如下错误: 找不到ARM芯片 电压为0 在这种情况下一般来说应该是JLINK与板子之间的连接时,电源电压有问题,大多是未连接或者虚汗等。
[单片机]
<font color='red'>ARM</font>下载错误
ARM CEO:ARM被英伟达收购要好于独立上市
7月5日消息,据国外媒体报道,近日,芯片设计公司ARM首席执行官(CEO)西蒙•西格斯(Simon Segars)表示,该公司被英伟达收购要好于独立上市。    西格斯表示:“与英伟达合并将给我们带来所需的规模、资源和灵活性,从而使未来的机会最大化。”    2020年9月份,软银集团和英伟达宣布,双方已达成确定性协议。根据协议,软银将把ARM出售给英伟达,交易价值为400亿美元。    对于这笔交易,ARM联合创始人赫尔曼•豪瑟(Hermann Hauser)在去年9月中旬表示,这是一场灾难,将摧毁ARM的商业模式,应该予以阻止。    此外,这笔交易还遭到包括英特尔、高通等多家芯片供应商以及特斯拉在内的硅谷多家科技巨头的反对。
[半导体设计/制造]
小广播
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved