ARM映像文件格式
来源:互联网 发布:淘宝代购是真的吗 编辑:程序博客网 时间:2024/05/02 07:23
学习ADS工具编写ARM程序,整理一些关于文件格式的说明。
ARM中的各种源文件(包括汇编文件,C语言程序及C++程序等)经过ARM编译器编译后生成ELF格式的目标文件。这些目标文件和相应的C/C++运行时用到的库经过ARM连接器处理后,生成ELF格式的映像文件,这种格式的ELF格式的映像文件是一种可执行文件,可被写入嵌入式设备的ROM中。
利用ADS编译可调试目标时,会生成两种格式的可执行文件:bin文件和axf文件。bin文件是真正的可执行文件,axf是ARM的调试文件,它除了包含bin的内容外,还附加其他的可调试信息,这些调试信息加在可执行的二进制数据的前面,所以把axf文件写到ARM的指令执行地址(一般是0x00)将不能运行。如果在ADS中设置为"Release",则在该目录下的axf里面的内容和bin里面的内容是一样的。
另外,ARM程序运行时包含RO,RW,ZI三部分内容,其中ZI(未初始化变量)是不会包含在映像文件的,因为其中数据都为零,程序运行前会将这部分数据初始化为零。
ARM映像文件是一个层次性结构的文件,包括了域(region),输出段(output section)和输入段(input section)。一个映像文件由一个或者多个域组成,每个域最多由三个输出段(RO,RW,IZ)组成,每个输出段又包含一个或者多个输入段,各个输入段包含了目标文件中的代码和数据。
域(region):一个映像文件由一个或多个域组成。是组成映象文件的最大结构。所谓域指的就是整个bin映像文件所在的区域,又分为加载域和运行域。加载域就是映像文件被静态存放的工作区域,一般来说flash里的整个bin文件所处在的地址空间就是加载域,当然程序一般不会放在flash里执行(程序也可以在nor flash里直接运行),一般会搬到sdram里运行工作,他们被搬到sdram里工作所处的地址空间就是运行域。一个域通常映射到一个物理存储器上,如ROM和RAM等。
段(section):一个域中包含一个或多个输出段,一个输出段包含一个或多个输入段。我们输入的代码,一般有代码和数据部分,这就是所谓的输入段,每个输入段有相应的属性,可以为只读(ro),可读写(rw)以及初始化为0的(zi)。
RO RW ZI:输入段包含四类内容:代码,初始化数据,未经初始化的存储区域,初始化的存储区域。每个输入段都有相应的属性,ARM连接器根据各输入段的属性将这些输入段分组,再组成对应属性的输出段。对于加载域中的输出段,一般来说ro段后面紧跟着rw段,rw段后面紧跟着zi段。在运行域中这些输出段并不连续,但rw和zi一定是连着的。
C中的指令以及常量被编译后RO类型数据
C中的未被初始化或者初始化为0的变量为ZI类型数据
C中的已被初始化成非0值的变量编译后是RW类型数据
加载时地址:映象文件位于存储器时的地址
运行时地址:映象文件运行时的地址
- ARM映像文件格式
- arm文件格式
- arm映像文件
- ARM映像文件
- ARM映像文件
- ARM映像文件
- ARM映像文件
- ARM映像文件
- ARM映像文件的结构
- ARM基础知识 -- ELF映像文件
- ARM基础知识 -- ELF映像文件
- ARM映像文件与SCATTER
- ARM系统基本文件格式
- ARM系统基本文件格式
- ARM系统基本文件格式
- ADS1.2下ARM映像文件
- ARM基础知识教程(六): ARM映像文件
- Windows CE6.0操作系统映像文件格式的研究
- PyCon 2011 - Hidden Treasures of the Python Standard Library - 自定义交互模式表达式计数器
- 昆虫的眼睛(单眼与复眼)
- 服务
- Oracle 11g 10g 无法启动Em的解决办法。
- VS2008技术整理
- ARM映像文件格式
- 酷壳陈皓:如何学好C++语言
- 使用Java发送GET、POST请求
- 附录C :C++/C试题的答案与评分标准
- SQL 语句记录
- php代码规范草案(phpchina)
- Linux下vi编辑器常用命令(转自http://net.zdnet.com.cn/network_security_zone/2008/0519/869835.shtml)
- mysql中,写limit得记得排序……
- 不做电子商务,五年后你会后悔!——马云