主要观点总结
文章介绍了嵌入式软件中的常用文件格式,包括elf、bin、img、asm、map、nm文件的概念、生成方法和功能用途。掌握这些文件对提升开发和调试效率有帮助。
关键观点总结
关键观点1: 常用文件格式介绍
文章详细介绍了嵌入式软件中的六种常用文件,包括它们的概念、生成方法和功能用途。这些文件在开发和调试过程中都有重要作用。
关键观点2: 文件的生成方法
文章给出了各种文件的生成方法示例,如elf文件通过gcc链接器链接目标文件生成,map文件通过链接器脚本配置生成等。
关键观点3: 文件在调试中的应用
文章强调了这些文件在调试过程中的重要作用,如通过elf文件加载到IDE环境进行调试,通过map文件定位程序执行错误,通过nm文件获取目标文件中的符号信息等。
正文
一、
引言
嵌入式软件中有一些常用的文件格式,比如gcc编译环境下的elf、bin、img、asm、map、nm文件,掌握这些文件的概念、生成方法和功能用途,对提升开发和调试效率大有裨益。
elf是the Executable and Linkable Format的简称。elf文件是可以运行在目标板的可执行文件,包含目标代码和调试信息。
elf文件由gcc链接器$(CROSS_COMPILE)ld根据链接器脚本文件的配置将工程中所有目标文件进行链接后生成。
$(CROSS_COMPILE)ld $(OBJS) -o xx.elf
在进行ARM架构调试时,可以在DS-5 IDE环境通过loadfile命令加载elf文件,开展调试工作。
map文件是由gcc链接器$(CROSS_COMPILE)ld生成的表明程序和地址映射关系的文件。
$(CROSS_COMPILE)ld $(OBJS) -Map xx.map
map文件列出了不同程序段的地址范围和size,据此可以调整链接器脚本文件的程序段排布配置;map文件也列出了所有函数、程序段的地址范围,在程序调试时,若出现程序执行错误,可以根据报错的PC地址,在map文件找到相应的代码,从而完成出错代码定位,提高调试效率。
nm文件列出了目标文件中的符号信息,是一个符号表文件,包括符号名称、符号类型和符号地址。
$(CROSS_COMPILE)ld xx.elf | sort > xx.nm
bin文件是二进制的机器码文件。将bin文件下载到TEXT_BASE地址,CPU就可以直接从TEXT_BASE地址开始执行相应的程序。
bin文件可由elf文件通过objcopy工具生成,生成方法示例:
$(CROSS_COMPILE)objcopy -O binary xx.elf xx.bin
img文件在bin文件的基础上增加了64字节的image_header。
以u-boot的Legacy format image header为例,image_header定义如下。
以u-boot.img为例,可以存储在非易失存储介质内,上级LOADER首先通过读取u-boot.img的image_header,获取Data
Load
Address地址,然后将u-boot.img搬运到RAM,最后从Entry Point Address开始运行程序。
bin文件可由elf文件通过objdump工具生成,生成方法示例:
$(CROSS_COMPILE)objdump -S xx.elf > xx.asm
通过asm文件,可以获取c代码、伪指令与汇编指令代码的对应关系以及汇编指令代码对应的地址,便于调试分析和指令集学习。