ARM映像檔案

2021-06-18 17:40:40 字數 1769 閱讀 4851

2010-03-22 13:53:41

|  分類:

arm|

字型大小訂閱

arm映像檔案

arm中的各種原始檔(包括彙編檔案,c語言程式及c++程式等)經過arm編譯器編譯後生成elf(executable and linking format)格式的目標檔案。這些目標檔案和相應的c/c++執行 時用到的庫經過arm聯結器處理後,生成elf格式的映像檔案(image),這種elf格式的映像檔案是一種可執行檔案,可被寫入嵌入式裝置的rom 中。

bin檔案是真正的可執行檔案,axf檔案是arm的除錯檔案,除了包含bin的內容之外,還附加了其他的除錯資訊,這些除錯資訊加在可執行的二進位制資料的

前面,所以把axf檔案寫到arm的指令執行位址(一般是0x0)將不能執行,因為在此位址前幾十個位元組的資料不是可執行的二進位制資料,而是頭部的除錯資訊;而bin檔案正是去掉了除錯資訊的可以執行的「精華」部分。如果在ads中設定為「release」,則該目錄下的axf裡面的內容和bin裡面的內容是一樣的!(注:生成目標是release,將不包含除錯資訊)。如果在ads中設定為「debugrel」,則該目錄下的axf裡面的內容和bin裡面的內容是不相同的!

arm映像檔案的組成:arm映像檔案是乙個層次性結構的檔案,包括了域(region),輸出段(output section)和輸入段(input section)。乙個映像檔案由乙個或者多個域組成;每個域最多由三個輸出段(ro、rw、ri)組成;每個輸出段又包含乙個或者多個輸入段;各輸入端包含了目標檔案中的**和資料。(從邏輯結構來看,可參考《arm程式分析與設計》,同物理結構相對照)。      

1。域 (region):乙個映象檔案由乙個或多個域組成。反過來說域是組成映象檔案的最大的結構。所謂域,指的就是整個bin映像檔案所處在的區域,它又分為載入域和執行域。載入域就是映像檔案被靜態存放的工作區域,一般來說flash裡的整個bin檔案所在的位址空間就是載入域,當然程式一般都不會放在flash裡執行(程式也可以在nor flash上直接執行),一般都會搬到sdram裡執行工作,它們在被搬到sdram裡工作所處的位址空間就是執行域。乙個域通常對映到乙個物理儲存器上,如rom和ram等。

另一種說法:

ads 在生成載入域——也就是映象檔案(bin 檔案)時,是把 rw 緊接在 ro 後面,這並不是rw 的實際位址,而僅僅是載入時,也就是燒寫到 flash 時的**和資料的臨時位址。而程式真正開始執行起來時——也就是執行時域,一切情況又都發生了變化,該到什麼地方的,就應該去什麼地方,所以rw 應該拷到 0xa00000 處(設定

引數rw_base=0xa00000),以保證連線時的符號值都是正確的。 

2。段(section):乙個域包含乙個或多個輸出段,乙個輸出段包含乙個或多個輸入段。我們輸入的**,一般有**部分和資料部分,這就是所謂的輸入段,每個輸入段都有相應的屬性,可以為唯讀(ro),可讀寫的(rw)以及初始化成0的(zi)。

3。ro,rw,zi:輸入段中包含4類內容:**、已經初始化的資料、未經初始化的儲存區域、內容初始化為0的儲存區域。每個輸入段有相應的屬性,可以為唯讀(ro)、可讀寫(rw)以及初始化為0的(zi)。arm聯結器根據各輸入段的屬性將這些輸入段分組,再組成對應屬性的輸出段。對於載入域中的輸出段,一般來說ro段後面緊跟著rw段,rw段後面緊跟著zi段。在執行域中這些輸出段並不連續,但rw和zi一定是連著的。zi段和rw段中的資料其實可以是rw屬性。

注:(1); c中的指令以及常量被編譯後是ro型別資料。

(2); c中的未被初始化或初始化為0的變數編譯後是zi型別資料。

(3); c中的已被初始化成非0值的變數編譯後市rw型別資料。

arm映像檔案

程式映像檔案的基本概念 2009 02 04 16 30 01 標籤 雜談 分類 arm 一 基本概念 什麼是arm的映像檔案,arm映像檔案其實就是可執行檔案,包括bin或hex兩種格式,可以直接燒到rom裡執行。映像檔案一般由域組成,域最多由三個輸出段組成 ro,rw,zi 組成,輸出段又由輸入...

ARM映像檔案格式

學習ads工具編寫arm程式,整理一些關於檔案格式的說明。arm中的各種原始檔 包括彙編檔案,c語言程式及c 程式等 經過arm編譯器編譯後生成elf格式的目標檔案。這些目標檔案和相應的c c 執行時用到的庫經過arm聯結器處理後,生成elf格式的映像檔案,這種格式的elf格式的映像檔案是一種可執行...

pe檔案of映像檔案頭

typedef struct image file header image file header,pimage file header 結構體的第乙個成員說明cpu的型別。需要了解的話看win32 sdk的巨集定義。結構體的第三個成員使用的是格林尼治時間 gmt 計算的秒數。結構體最後乙個成員說...