所有的S-Record文件都是以类型为S0的记录作为首条记录,这条记录在数据字段中给出文件的信息,包括路径、版本号等,这些信息是供阅读的, 将不被存放到存储器中。S-Record文件的中间记录可能是类型为S1、S2或S3的记录,其地址字段分别对应2、3、4 byte地址,因而主要区别在于寻址空间的不同。S-Record文件以S7、S8或S9类型的记录作为末条记录,除了地址字段长度不同外,它们都给出了 程序执行的起始地址,并都不含数据字段。详细的信息可以阅读[参考1]
3、bin文件格式
bin文件就是直接的二进制文件,内部没有地址标记。一般用编程器烧写时,从00开始,而如果下载运行,则下载到编译时的地址即可。
4、HEX文件格式
Intel HEX文件是记录文本行的ASCII文本文件,在Intel HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量。Intel HEX文件经常被用于将程序或数据传输 存储到ROM、EPROM。大多数编程器和模拟器使用Intel HEX文件。
一个Intel HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式, :LLaaaatt[dd...]cc 每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述: :冒号:它是每一条Intel HEX记录的开始。 LL是这条记录的长度域,他表示数据(dd)的字节数目。 aaaa是地址域:他表示数据的起始地址。 如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM/FLASH中的偏移地址,对于不支持扩展段地址和扩展线性地址的,如89C51,这就是 此条记录的起始地址。 tt这个域表示这条HEX记录的类型,他有可能是下面这几种类型: 00:数据记录 01:文件结束记录 02:扩展段地址记录 04:扩展线性地址记录 dd是数据域:表示一个字节的数据。一个记录可能有多个数据字节,字节数目可以查看LL域的说明。 cc是效验和域:表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对(不包括本效验字和冒号)所表示的十六进制数字都加起来,然后模除256得 到的余数,最后求出余数的补码即是本效验字节cc。
Intel HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束,(回车为0x0d换行为0x0a)。
扩展线性地址记录(HEX386) : 扩展线性地址记录也可称为32位地址记录和HEX386记录,这个纪录包含高16(16-31位)位数据地址,这种扩展的线性记录总是有两个字节数据。当 一个扩展线性地址记录被读到后,扩展线性地址记录的数据区域将被保存并应用到后面从Intel HEX文件中读出的记录,这个扩展线性记录一直有效, 直到读到下一个扩展线性记录。 文件结束记录(EOF) : 一个Intel HEX文件必须有一个文件结束记录,这个记录的类型域必须是01,一个EOF记录总是这样: :00000001FF,其中:00是记录中数据字节的数目,0000这个地址对于EOF记录来说无任何意义,01记录类型是01(文件结束记录标 示),FF是效验和。计算如下01h + NOT(00h + 00h + 00h + 01h)。
5、 可执行文件格式的差别:
a) HEX文件是包括地址信息的,而BIN文件格式只包括了数据本身,在烧写或下载HEX文件的时候,一般都不需要用户指定地址,因为HEX文件内部的信息已经包括了地址。而烧写BIN文件的时候,用户是一定需要指定地址信息的。
b) BIN文件格式 对二进制文件而言,其实没有”格式”。文件只是包括了纯粹的二进制数据。
c) HEX文件格式 HEX文件都是由记录(RECORD)组成的。在HEX文件里面,每一行代表一个记录。记录类型包括:记录数据域,文件结束域,扩展线性地址的记录,扩展 段地址的记录。在上面的后2种记录,都是用来提供地址信息的。每次碰到这2个记录的时候,都可以根据记录计算出一个“基”地址。对于后面的数据记录,计算 地址的时候,都是以这些“基”地址为基础的。
d) AXF是Arm特有的文件格式,它除了包含bin文件外,还额外包括了许多其他调试信息。在下载到目标板的时候,烧入ROM还是bin文件,额外的调试信息会被去掉
一般来说,可以由elf文件转化为其它两种文件,hex也可以直接转换为bin文件,但是bin要转 化为hex文件必须要给定一个基地址。而hex和bin不能转化为elf文件,因为elf的信息量要大。另外还有一种ads的调试文件axf,它可以用以 下命令fromelf -nodebug xx.axf -bin xx.bin转化为bin文件。
a.out执行文件格式
Linux内核0.12版仅支持a.out(Assembly out)执行文件和目标文件的格式,虽然这种格式目前已经渐渐不用,而使用功能更为齐全的ELF(Executable and Link Format)格式,但是由于其简单性,作为入门的学习材料比较适用。下面全面介绍一下a.out格式。
.out执行文件由7部分(7节)组成。它们依次为:
(1)执行头部分(exec header)。该部分中含有一些参数(exec结构),内核使用这些参数把执行文件加载到内存中并执行,而链接程序(ld)使用这些参数将一些模块文件组合成一个可执行文件。这是目标文件唯一必要的组成部分。
(2)代码段部分(text segment)。含有程序执行时被加载到内存中的指令代码和相关数据。可以以只读形式被加载。
(3)数据段部分(data segment)。这部分含有已经初始化过的数据,总是被加载到可读写的内存中。
(4)代码重定位部分(text relocations)。这部分含有供链接程序使用的记录数据。在组合目标模块文件时用于定位代码段中的指针或地址。
(5)数据重定位部分(data relocations)。类似于代码重定位部分的作用,但是用于数据段中指针的重定位。
(6)符号表部分(symbol table)。这部分同样含有供链接程序使用的记录数据,用于在二进制目标模块文件之间对命名的变量和函数(符号)进行交叉引用。
(7)字符串表部分(string table)。该部分含有与符号名对应的字符串。
联系客服