最近花了一个月的时间终于把PXA270的板子Bootloader 部分整出来了,颇费周折;其中的很长一段时间,一直被ARM可执行程序的执行机理迷惑:搞不懂ARM的映象文件组成、代码重定位、地址重映射remap等,网上查了N多资料看了N多技术帖子总算整清楚。如今写出来整理一下思路,也为其它初始进入ARM系统设计的兄弟们提供点资料借鉴,少走些弯路是好。
ARM学习过程中,初学者最难突破的应当是ARM映象文件形态和ARM启动代码分析了,本文将以我的Bootloader源码为例,力求作个透彻分析。
如下给出我的开发环境:
² Cpu:INTEL PXA270 (ARM V5TE)
² Board:INTEL MAINSTONE 2
² Memory:64MByte SDRAM,32MByte NorFlash(Inte E28F128),32MByte NandFlash
² Cross-complier:cross_3.3.2
一、关于映象文件和load region和execute region:
1. ARM映象文件组成
我们在ADS中编译源代码文件后的生成文件有两个:.axf和.bin文件。.bin文件是二进制格式执行文件,它才是真正可下载到FLASH中运行的;.axf文件是ADS的调试文件,利用UltraEdit查看其二进制代码,可以发现.axf其实是在.bin文件基础上增加文件头标识、文件尾表示(U-boot中的mkimage工具在映象文件中加入64kbyte的文件头,以供U-Boot识别)、再插入ADS的调试符号。打开ADS的调试器,可对.axf文件调试。
2. ARM映象文件加载域(load region)、运行域(execute region)