专栏名称: 嵌入式微处理器
关注这个时代最火的嵌入式微处理器,你想知道的都在这里。
目录
相关文章推荐
环球人物  ·  萌翻亚洲的她,能否打破“长残魔咒”? ·  22 小时前  
新北方  ·  都“八九”了,为啥还是这么冷? ·  昨天  
新北方  ·  36岁女子直播一夜后猝死,留下一儿一女 ·  2 天前  
新北方  ·  骇人!手机深夜竟自动下单 ·  2 天前  
51好读  ›  专栏  ›  嵌入式微处理器

一文了解嵌入式软件中的常用文件格式

嵌入式微处理器  · 公众号  ·  · 2024-08-05 12:00

主要观点总结

文章介绍了嵌入式软件中的常用文件格式,包括elf、bin、img、asm、map、nm文件的概念、生成方法和功能用途。掌握这些文件对提升开发和调试效率有帮助。

关键观点总结

关键观点1: 常用文件格式介绍

文章详细介绍了嵌入式软件中的六种常用文件,包括它们的概念、生成方法和功能用途。这些文件在开发和调试过程中都有重要作用。

关键观点2: 文件的生成方法

文章给出了各种文件的生成方法示例,如elf文件通过gcc链接器链接目标文件生成,map文件通过链接器脚本配置生成等。

关键观点3: 文件在调试中的应用

文章强调了这些文件在调试过程中的重要作用,如通过elf文件加载到IDE环境进行调试,通过map文件定位程序执行错误,通过nm文件获取目标文件中的符号信息等。


正文

一、 引言

嵌入式软件中有一些常用的文件格式,比如gcc编译环境下的elf、bin、img、asm、map、nm文件,掌握这些文件的概念、生成方法和功能用途,对提升开发和调试效率大有裨益。
二、常用文件格式介绍
1、 elf文件

elf是the Executable and Linkable Format的简称。elf文件是可以运行在目标板的可执行文件,包含目标代码和调试信息。

elf文件由gcc链接器$(CROSS_COMPILE)ld根据链接器脚本文件的配置将工程中所有目标文件进行链接后生成。
elf文件的生成方法示例:
$(CROSS_COMPILE)ld  $(OBJS)  -o  xx.elf
在进行ARM架构调试时,可以在DS-5 IDE环境通过loadfile命令加载elf文件,开展调试工作。
2、 map文件
map文件是由gcc链接器$(CROSS_COMPILE)ld生成的表明程序和地址映射关系的文件。
map文件的生成方法示例:
$(CROSS_COMPILE)ld  $(OBJS)  -Map  xx.map
map文件列出了不同程序段的地址范围和size,据此可以调整链接器脚本文件的程序段排布配置;map文件也列出了所有函数、程序段的地址范围,在程序调试时,若出现程序执行错误,可以根据报错的PC地址,在map文件找到相应的代码,从而完成出错代码定位,提高调试效率。
3、 nm文件
nm文件列出了目标文件中的符号信息,是一个符号表文件,包括符号名称、符号类型和符号地址。
nm文件可由elf文件生成,生成方法示例:
$(CROSS_COMPILE)ld  xx.elf  |  sort  >  xx.nm
4、 bin文件
bin文件是二进制的机器码文件。将bin文件下载到TEXT_BASE地址,CPU就可以直接从TEXT_BASE地址开始执行相应的程序。
bin文件可由elf文件通过objcopy工具生成,生成方法示例:
$(CROSS_COMPILE)objcopy  -O  binary  xx.elf  xx.bin
5、 img文件
img文件在bin文件的基础上增加了64字节的image_header。
以u-boot的Legacy format image header为例,image_header定义如下。
img文件可以使用mkimage工具生成。
以u-boot.img为例,可以存储在非易失存储介质内,上级LOADER首先通过读取u-boot.img的image_header,获取Data Load Address地址,然后将u-boot.img搬运到RAM,最后从Entry Point Address开始运行程序。
6、 asm文件
asm文件是反汇编文件。
bin文件可由elf文件通过objdump工具生成,生成方法示例:
$(CROSS_COMPILE)objdump -S  xx.elf  >  xx.asm
通过asm文件,可以获取c代码、伪指令与汇编指令代码的对应关系以及汇编指令代码对应的地址,便于调试分析和指令集学习。

END

来源:嵌入式系统研发






请到「今天看啥」查看全文