各種燒寫文件格式簡介

一、ELF
Executable and linking format(ELF)文件是x86 Linux系統下的一種常用目標文件(object file)格式,有三種主要類型:
(1)適於連接的可重定位文件(relocatable file),可與其它目標文件一起創建可執行文件和共享目標文件。
(2)適於執行的可執行文件(executable file),用於提供程序的進程映像,加載到內存執行。
(3)共享目標文件(shared object file),連接器可將它與其它可重定位文件和共享目標文件連接成其它的目標文件,動態連接器又可將它與可執行文件和其它共享目標文件結合起來創建一個進程映像。
ELF文件格式比較複雜。
二、HEX
什麼是Intel HEX格式?
Intel HEX文件是記錄文本行的ASCII文本文件,在Intel HEX文件中,每一行是一個HEX記錄,由十六進制數組成的機器碼或者數據常量,Intel HEX文件經常被用於將程序或數據傳輸 存儲到ROM、EPROM,大多數編程器和模擬器使用Intel HEX文件。
記錄格式
一個Intel HEX文件可以包含任意多的十六進制記錄,每條記錄有五個域,下面是一個記錄的格式。
: llaaaatt[dd。。。]cc
每一組字母是獨立的一域,每一個字母是一個十六進制數字,每一域至少由兩個十六進制數字組成,下面是字節的描述。
: 冒號 是每一條Intel HEX記錄的開始
ll 是這條記錄的長度域,他表示數據(dd)的字節數目。
aaaa 是地址域,他表示數據的起始地址
<如果是數據記錄,這表示將要燒錄的這條記錄中的數據在EPROM中的偏移地址, 對於不支持擴展段地址和擴展線性地址的,如89C51,這就是此條記錄的起始地址>
tt 這個域表示這條HEX記錄的類型,他有可能是下面這幾種類型
00 —-數據記錄
01 —-文件結束記錄
02 —-擴展段地址記錄
04 —-擴展線性地址記錄
dd 是數據域,表示一個字節的數據,一個記錄可能有多個數據字節,字節數目可以
查看ll域的說明
cc 是效驗和域,表示記錄的效驗和,計算方法是將本條記錄冒號開始的所有字母對 <不包括本效驗字和冒號> 所表示的十六進制數字 <一對字母表示一個十六進制數,這樣的一個十六進制數爲一個字節> 都加起來然後模除256得到的餘數最後求出餘數的補碼即是本效驗字節cc。
<例如:
: 0300000002005E9D
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 >
數據記錄
Intel HEX文件由若干個數據記錄組成,一個數據記錄以一個回車和一個換行結束<回車爲0×0d換行爲0×0a>
比如下面的一條數據記錄
: 10246200464C5549442050524F46494C4500464C33
10 是此行記錄數據的字節數目
2462 是數據在內存<將要燒寫的eprom地址>中的起始地址
00 是記錄類型00(是一個數據記錄)
464C 到 464C 是數據
33 是此行記錄的效驗和
三、BIN
BIN文件就是直接的二進制文件,內部沒有地址標記。一般用編程器燒寫時從00開始,而如果下載運行,則下載到編譯時的地址即可。
總結:可以由ELF文件轉化爲其它兩種文件,HEX也可以直接轉換爲BIN文件,但是 BIN要轉化爲HEX文件必須要給定一個基地址。而HEX和BIN不能轉化爲elf文件,因爲ELF的信息量要大。另外還有一種ads的調試文件axf,它可以轉化爲BIN文件,用以下命令 fromelf -nodebug xx。axf -bin xx。bin即可。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章