记载一些简略的ARM的映像文件的内容组成及原理。
1.ARM映像文件(axf和bin文件)的组成。
ARM是32位处理器,地址位宽也是32位,因而其存储器的映射规模能够到达4GB空间。基本上关于ARM处理器,上电或复位时都会从0x00000000出开端履行指令,因而有必要确保映像文件的开端方位放置在0x00000000处,不管是选用NAND或NOR flash,这一点都无法改动。正确放置之后,处理器会获取到正确的指令然后次序履行。
ARM的映像文件(即可履行文件)。生成的ARM映像文件有分为axf和bin两种。bin文件时真实的可履行文件,而axf文件是ARM特有的调试文件,除了包括了bin文件的内容外还包括了许多其他的调试信息。在axf的文件头和文件尾部都包括了能够用在ADW或AXF的load image的调试中。
2.ARM的映像文件的加载域和运转域的不同
加载域映像文件。尽量简略地说,即那些可履行文件例如bin文件,一般由域组成。而域由最多的三个输出段组成即(RO、RW、ZI),RO是只读的代码段,RW是可读写的数据段和ZI未初始化的数据段。剖析bin映像文件的具体内容,也能够印证上面的内容,基本上在bin的前半部分是RO的内容然后半部分是RW的内容,ZI由所认为初始化数据,因而不需求保存在bin文件中。即bin文件时RO+RW的内容的调集。而这三个输出段又是能够由多个输入段组成的,由于在汇编文件中,能够设置多个段称号,只需求在链接的时分链接到相应的方位即可,因而多个输入段能够对应到一个输出段上。上面所说的bin文件都是指的是加载域的状况,由于这都是可履行文件被初始放置在flash中时各个部分的散布状况,便是加载到体系时的状况,所以叫加载域。但体系此刻是并不能运转的。
加载域的映像文件有必要顺畅地过渡到运转时域,这时体系才干够正确地被履行。由于有个很明显的一点,程序一般都固化在flash中。而flash是只读的,上面也提到可读写的RW数据段的内容是跟在RO段后边(即bin文件中),被放置在了flash上,RW段要求可读写,flash明显不满意要求,因而加载域有必要过渡到运转时域。最直观的了解便是,咱们有必要把RW段的内容搬运到可读写的SDRAM或SRAM上去,因而就引发了运转域的问题。
怎么转化,怎么确保前面RO段的程序的内容能够正确地寻址到被搬运了的RW段的内容。由于大部分汇编程序的搬运指令都是肯定寻址的,比较少的伪指令能供给相对寻址,肯定寻址的功率明显比较高。因而咱们有必要在代码中就有必要知道将来运转时RW段被放置在了什么一个当地。在程序链接之后,一切的代码中的地址都将固定。处理这样的问题也并不杂乱,需求链接器确保RO段的运转时开端地址和RW段的运转时开端地址,这便是为什么咱们要在ADS设置衔接选项ro_base和rw_base的意图了。一切的RO段的地址都是依据ro_base指定的内容,而一切代码段的内容也是依据rw_base上的,这样程序在链接后就现已确认了一切的相对地址,剩余的事便是将相应的段的内容从加载域的方位搬移到运转时域的方位。
这样的代码搬移的作业假如是在调试状况的话,一般调试器就会帮咱们做好一切作业了,而假如是在非调试状况,就需求咱们自己仿制代码段的搬移作业,风趣的是,不少ARM都支撑从NAND flash中发动,而NAND flash自身便是不能直接履行的,需求将代码搬移到SDRAM中,因而这儿的运转时域和加载域的区别被屏蔽掉了。一般咱们做代码搬移这样的作业的时分,选用的跳转地址都要用相对跳转指令。这样的优点是,不管用户将程序加载到什么地址,代码搬移指令都能正确地将程序从加载域转化到运转时域,然后确保程序顺畅履行。
1.ELF格式文件的结构 1.1 映像文件组成部分 1.2 ARM映像文件各组成部分的地址暗射 2.arm映像文件的进口点 2.1 arm映像文件的进口点有两种类型:一种是映像文件运转时的进口点,称为初始进口点(initial entry point),另一种是一般进口点(entry point). 2.2界说初始进口点 2.3一般进口点的用法 3 输入段的排序规矩 ARM衔接器介绍 |