各种烧写文件格式简介

[复制链接]
 楼主| lqg1121 发表于 2007-9-21 22:26 | 显示全部楼层 |阅读模式
一、ELF<br />Executable&nbsp;and&nbsp;linking&nbsp;format(ELF)文件是x86Linux系统下的一种常用目标文件(object&nbsp;file)格式,有三种主要类型:<br />(1)适于连接的可重定位文件(relocatable&nbsp;file),可与其它目标文件一起创建可执行文件和共享目标文件。&nbsp;<br />(2)适于执行的可执行文件(executable&nbsp;file),用于提供程序的进程映像,加载的内存执行。&nbsp;<br />(3)共享目标文件(shared&nbsp;object&nbsp;file),连接器可将它与其它可重定位文件和共享目标文件连接成其它的目标文件,动态连接器又可将它与可执行文件和其它共享目标文件结合起来创建一个进程映像。&nbsp;<br />ELF文件格式比较复杂。<br />二、HEX<br />什么是Intel&nbsp;HEX格式?&nbsp;<br />Intel&nbsp;HEX文件是记录文本行的ASCII文本文件,在Intel&nbsp;HEX文件中,每一行是一个HEX记录,由十六进制数组成的机器码或者数据常量,Intel&nbsp;HEX文件经常被用于将程序或数据传输&nbsp;<br />存储到ROM、EPROM,大多数编程器和模拟器使用Intel&nbsp;HEX文件。&nbsp;<br />记录格式&nbsp;<br />一个Intel&nbsp;HEX文件可以包含任意多的十六进制记录,每条记录有五个域,下面是一个记录的格式。&nbsp;<br />:&nbsp;llaaaatt[dd。。。]cc&nbsp;<br />每一组字母是独立的一域,每一个字母是一个十六进制数字,每一域至少由两个十六进制数字组成,下面是字节的描述。&nbsp;<br />:&nbsp;冒号&nbsp;是每一条Intel&nbsp;HEX记录的开始&nbsp;<br />ll&nbsp;是这条记录的长度域,他表示数据(dd)的字节数目。&nbsp;<br />aaaa&nbsp;是地址域,他表示数据的起始地址&nbsp;<br />&lt如果是数据记录,这表示将要烧录的这条记录中的数据在EPROM中的偏移地址,&nbsp;对于不支持扩展段地址和扩展线性地址的,如89C51,这就是此条记录的起始地址&gt&nbsp;<br />tt&nbsp;这个域表示这条HEX记录的类型,他有可能是下面这几种类型&nbsp;<br />00&nbsp;—-数据记录&nbsp;<br />01&nbsp;—-文件结束记录&nbsp;<br />02&nbsp;—-扩展段地址记录&nbsp;<br />04&nbsp;—-扩展线性地址记录&nbsp;<br />dd&nbsp;是数据域,表示一个字节的数据,一个记录可能有多个数据字节,字节数目可以&nbsp;<br />查看ll域的说明<br />cc&nbsp;是效验和域,表示记录的效验和,计算方法是将本条记录冒号开始的所有字母对&nbsp;&lt不包括本效验字和冒号&gt&nbsp;所表示的十六进制数字&nbsp;&lt一对字母表示一个十六进制数,这样的一个十六进制数为一个字节&gt&nbsp;都加起来然后模除256得到的余数最后求出余数的补码即是本效验字节cc。&nbsp;<br />&lt例如:&nbsp;&gt<br />:&nbsp;0300000002005E9D&nbsp;<br />cc=0×01+NOT((0×03+0×00+0×00+0×00+0×02+0×00+0×5E)%0×100)=0×01+0×9C=0×9D&nbsp;&gt&nbsp;<br />数据记录&nbsp;<br />Intel&nbsp;HEX文件由若干个数据记录组成,一个数据记录以一个回车和一个换行结束&lt回车为0×0d换行为0×0a&gt&nbsp;<br />比如下面的一条数据记录&nbsp;<br />:&nbsp;10246200464C5549442050524F46494C4500464C33&nbsp;<br />10&nbsp;是此行记录数据的字节数目&nbsp;<br />2462&nbsp;是数据在内存&lt将要烧写的eprom地址&gt中的起始地址&nbsp;<br />00&nbsp;是记录类型00(是一个数据记录)&nbsp;<br />464C&nbsp;到&nbsp;464C&nbsp;是数据&nbsp;<br />33&nbsp;是此行记录的效验和&nbsp;<br />三、BIN<br />BIN文件就是直接的二进制文件,内部没有地址标记。一般用编程器烧写时从00开始,而如果下载运行,则下载到编译时的地址即可。<br />总结:可以由ELF文件转化为其它两种文件,HEX也可以直接转换为BIN文件,但是BIN要转化为HEX文件必须要给定一个基地址。而HEX和BIN不能转化为elf文件,因为ELF的信息量要大。另外还有一种ads的调试文件axf,它可以转化为BIN文件,用以下命令&nbsp;fromelf&nbsp;-nodebug&nbsp;xx。axf&nbsp;-bin&nbsp;xx。bin即可。&nbsp;<br />
您需要登录后才可以回帖 登录 | 注册

本版积分规则

35

主题

42

帖子

1

粉丝
快速回复 在线客服 返回列表 返回顶部