查看: 2491|回复: 0

嵌入式各种文件扫盲BIN,hex.....

[复制链接]
发表于 2018-5-15 15:05:05 | 显示全部楼层 |阅读模式
关键词: 嵌入式、arm、linux
文件格式
(1)BIN文件:binary文件,即二进制文件。

(2)HEX文件:hex的全称是Intel HEX,此类文件通常用于传输将被存于ROM或者EPROM中的程序和数据。是由一行行符合Intel HEX文件格式的文本所构成的ASCII文本文件。大多数EPROM编程器或模拟器使用Intel HEX文件。 HEX文件记录由对应机器语言码和/或常量数据的十六进制编码数字组成。

(3)ELF文件: 是Linux的主要可执行文件格式。 ELF文件除了机器码外,还包含其它额外的信息,如段的加载地址,运行地址,重定位表,符号表等。

(4)bin文件和elf文件重点摘要:
执行raw binary很简单,只需要将程序加载到其起始地址,就可以执行; 执行ELF程序则需要一个ELF Loader。 现在知道了吧,uboot和Linux kernel启动的时候是没有ELF Loader的,所以烧在flash上的文件只能是raw binary格式的,即镜像文件image。

a)通过gcc编译出来的是elf文件
b)通过objcpy可以把elf文件转换为bin文件

(5)LDS文件:它定义了整个程序编译之后的连接过程,决定了一个可执行程序的各个段的存储位置。指定连接文件的存储地址、运行地址,存储地址和运行地址可以相同也可以不同。转自:https://wenku.baidu.com/view/9a8beb125f0e7cd18425369a.html

(6)map文件:map文件是程序的全局符号、源文件和代码行号信息的唯一的文本表示方法,是整个程序工程信息的静态文本,通常由linker生成。 map文件保存整个工程的静态文本信息,里面有所有函数的入口地址。
通过查看map文件,我们可以找到代码段(.text),全局未初始化区(.bss),数据段(.data)。

map文件的作用是,我们可以根据程序产生错误地址在map文件中找到相应的函数、变量地址。

(7)symbol文件:目标文件的值、类型、名字,例如: 00000024 T cleanup_before_linux

00000024是以16进制显示的其值,T为类型表示此函数位于代码区,而cleanup_before_linux是其名字。可以看出,上面显示的cleanup_before_linux这个symbol的值实际上是该函数在text section中的偏移。但是,每个符号的值的具体含义依其类型而异(类型见原文)。当然,对于每个符号的值,其类型、其值以及它们所属的section是密切相关的。

(8)Code:代表执行的代码,程序中所有的函数都位于此处。

RO-data: 代表只读数据,程序中所定义的全局常量数据和字符串都位于此处。

RW-data:代表已初始化的读写数据,程序中定义并且初始化的全局变量和静态变量位于此处。

ZI-data:代表未初始化的读写数据,程序中定义了但没有初始化的全局变量和静态变量位于此处。

一、下载到FLASH中的数据大小是:(Code + RO Data + RW Data)这个数据关系到占用了多少单片机的FLASH,关系到是否可以再添加程序。比如你的单片机FLASH是8K,编译程序后,发现程序已经7K了,但是工程还需要写很多程序,那就可以考虑换个FLASH大点的单片机了。

二、程序运行是要在RAM中运行的大小是:(RW Data + ZI Data) 单片机的两个重要参数,一个是上面的FLASH大小,一个是RAM大小。看了第一条,就知道这条的重要性。

刚入门的,看程序的大小,会看HEX文件在WINDOWS中的占用大小来确定占用FLASH的大小,是不对的。

这个HEX文件在电脑上的大小是4.46KB,但是它只会占用单片机FLSAH的1.57KB,如下图所示:

(提示:在你生成的工程中的Listings文件夹里面,有一个.map后缀的文件,拉到最后面,就有算好的大小)

以下课程可免费试听C语言电子PCBSTM32、Linux、FPGA、Python、安卓等。
想学习的你和我联系预约就可以免费听课了。宋工Q35--24-65--90-88   Tel/WX:173--17--95--19--08


您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关于我们  -  服务条款  -  使用指南  -  站点地图  -  友情链接  -  联系我们
电子工程网 © 版权所有   京ICP备16069177号 | 京公网安备11010502021702
快速回复 返回顶部 返回列表