嵌入式目標文件類型解析

燒寫文件格式介紹

      axf和elf都是編譯器生成的可執行文件,區別是axf文件是調試文件,可由ads或mdk生成;而gcc編譯出來的是elf文件。

兩者雖然很像,但還是有差別的。這是文件格式的差別,不涉及調試格式。

   bin是直接的內存映象的表示。axf/elf是帶格式的映象 。axf/elf文件裏面包含了符號表,彙編等。bin文件是將elf文件中的代碼段,數據段,還有一些自定義的段抽取出來做成的一個內存的鏡像。由於elf文件的信息比較全,所以可以用來以單步跟蹤的方式運行。

在ads下,axf文件可以直接用axd進行調試運行。

   Linux OS下,elf通常就是可執行文件,通常gcc -o test test.c,生成的test文件就是elf格式的,在Linux Shell下輸入./test就可以執行。bin文件是經過壓縮的可執行文件,去掉elf格式的東西,僅僅保留最純的彙編。在系統沒有加載操作系統的時候可以執行。 在Embedded中,上電開始運行,沒有OS系統,如果將elf格式的文件燒寫進去,包含一些elf格式的東西,arm運行碰到這些指令,就會導致失敗,如果用bin文件,程序就可以一步一步運行。

elf文件轉化爲hex文件和bin文件,hex文件也可以直接轉換爲bin文件,但是bin要轉化爲hex文件必須要給定一個基地址。而hex和bin不能轉化爲elf文件,因爲elf的信息量要大。axf它可以轉化爲bin文件,用以下命令 fromelf -nodebugxx.axf -bin xx.bin即可。

 

1.bin格式

  bin文件就是直接的二進制文件,內部沒有地址標記。一般用編程器燒寫時從00開始,而如果下載運行,則下載到編譯時的地址即可

 

2.elf格式

Executable and linking format(ELF)文件是x86 Linux系統下的一種常用目標文件(object file)格式,gcc編譯出來的是ELF文件。

有三種主要類型:

(1)適於連接的可重定位文件(relocatable file),可與其它目標文件一起創建可執行文件和共享目標文件。

(2)適於執行的可執行文件(executable file),用於提供程序的進程映像,加載的內存執行。

(3)共享目標文件(shared object file),連接器可將它與其它可重定位文件和共享目標文件連接成其它的目標文件,動態連接器又可將它與可執行文件和其它共享目標文件結合起來創建一個進程映像。

到此,就是一個簡單的hello world程序通過gcc –o hello hello.c編譯得到的文件的ELF頭部格式。

 

3.hex格式

     Intel HEX文件是記錄文本行的ASCII文本文件,在Intel HEX文件中,每一行是一個HEX記錄,由十六進制數組成的機器碼或者數據常量。Intel HEX文件經常被用於將程序或數據傳輸存儲到ROM、EPROM,大多數編程器和模擬器使用Intel HEX文件。

   HEX格式文件以行爲單位,每行由“:”(0x3a)開始,以回車鍵結束(0x0d,0x0a)。行內的數據都是由兩個字符表示一個16進制字節,比如”01”就表示數0x01;”0a”,就表示0x0a。對於16位的地址,則高位在前低位在後,比如地址0x010a,在HEX格式文件中就表示爲字符串”010a”。下面爲HEX文件中的一行:

:10000000FF0462FF051EFF0A93FF0572FF0A93FFBC

 “:”表示一行的開始。

 “:”後的第1,2個字符“10”表示本行包含的數據的長度,這裏就是0x10即16個。

第3,4,5,6個字符“0000”表示數據存儲的起始地址,這裏表示從0x0000地址開始存儲16個數據,其中高位地址在前,低位地址在後。

第7,8個字符“00”表示數據的類型。該類型總共有以下幾種:

00 ----數據記錄      
01 ----文件結束記錄
02 ----擴展段地址記錄
04 ----擴展線性地址記錄

   這裏就是0x00即爲普通數據記錄。之後的32個字符就是本行包含的數據,每兩個字符表示一個字節數據,總共有16個字節數據跟行首的記錄的長度相一致。最後兩個字符表示校驗碼。每個HEX格式的最後一行都是固定爲:00000001FF

 

4.axf格式

   *.axf格式的調試文件,AXF是ARM芯片使用的文件格式,它包含bin代碼外,還包括了調試信息。無論是用RVDS,還是MDK,都能夠產生該文件。

 

參考文獻:

hex格式介紹及轉bin格式的源程序:http://www.cppblog.com/Lee7/archive/2007/12/21/39231.html

ELF格式學習筆記(一):http://blog.chinaunix.net/space.php?uid=546544&do=blog&id=2095856

各種燒寫文件格式簡介:http://tvb2058.spaces.eepw.com.cn/articles/article/item/11165

axf elf 和bin 區別  

http://yhyqf.blog.163.com/blog/static/32105293201121010199363/

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章