您好,  [请登录] [QQ登录]  [支付宝登录[免费注册]

商品分类

分享到: 百度搜藏 搜狐微博 新浪微博 腾讯微博 QQ收藏 人人网 Facebook Twitter

ARM底子知识九

发布日期:2011-05-06

*****************************************************
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时,要是输入的目标文件中只有一个平凡入口点,该入口点被连接器当成映像文件的初始入口点。