關於Bin文件的解析【轉】


由Windows CE的開發工具Platform Build編譯生成的Windows CE操作系統及Bootloader的鏡像文件主要由兩種格式類型——以.bin為文件名后綴的記錄型鏡像文件和以.nb0為后綴的原始型(raw)鏡像文件,前者以記錄(Record)為單位組織鏡像的數據,后者則是鏡像在嵌入式系統中運行時的二進制數據快照。

DownloaderImage函數執行的第一步是調用GetImageType函數獲知鏡像文件的格式類型。每一個Windows CE鏡像文件在文件數據的起始位置都有一個7字節的特征碼(magic number),它與鏡像文件的格式一一對應如下:

“N000FF\X0A”——BL_IMAGE_TYPE_MANIFEST

“X000FF\X0A”——BL_IMAGE_TYPE_MULTIXIP

“B000FF\X0A”——BL_IMAGE_TYPE_BIN

    本文重點研究BL_IMAGE_TYPE_BIN類型的記錄型鏡像文件格式,該類型的鏡像文件均以.bin為文件名后綴,DownloaderImage函數調用DownloadBin函數處理這種類型的鏡像文件。在BL_IMAGE_TYPE_BIN類型的鏡像文件中,緊隨着最初的7字節特征碼之后是該鏡像文件在嵌入式系統中的目的物理存儲起始地址和以字節為單位的長度,各占4字節,這兩個數據的含義分別對應於RegionInfo結構體的dwRegionStart、dwRegionLength兩成員。接下來的便是具體存放操作系統為二進制數據的擁有相同結構的多條記錄(Record),每條記錄由4字節的內存起始地址dwRecAddr、4字節的記錄長度dwRecLen、4字節的校驗碼dwRecChk和dwRecLen個字節的記錄數據組成。DownloaderImage函數依次從下載端口讀出各條記錄並且對它們執行校驗,校驗也是以記錄為單位,待校驗無誤以后將去除頭信息的記錄數據存放到dwRecAddr指定地址的物理存儲位置。如果記錄的目的存儲位置是Flash存儲設備,則通常要先緩存在RAM內存中,待整個鏡像文件全部下載完再一起寫入Flash。

     本文以項目中定制的操作系統NK.bin為例進行分析。使用UltraEdit將其打開如圖1所示。

 

 

 

     圖1 使用UltraEdit打開系統鏡像文件

    

從上圖可以看出,文件頭(head)由7個字節組成,內容是:42 30 30 30 46 46 0A,即“B000FF\x0A”,這是判斷鏡像文件是.bin類型的依據。鏡像數據目的起始地址(ImageStart,00 00 10 80)由4個字節組成,它定義了鏡像文件解析后裝載在內存中的起始地址是0x80100000。鏡像數據長度(ImageLength,D0 03 5D 02)也由4個字節組成,它表示.bin鏡像文件解析后在內存中占用的總的存儲空間大小為(0x025D03D0)。每條記錄(record)由4字節的起始存儲地址(RecordStart)、4字節的數據長度(RecordLength)、4字節的校驗碼 (RecordCheckSum)和RecordLength個字節的記錄數據(RecordData)組成。以第一條記錄為例,分別為0x80100000,0x00000004,0x000001AF和0XEA0018AD。

可以使用%_WINCEROOT%\PUBLIC\COMMON\OAK\BIN\I386目錄下的viewin工具查看NK.bin文件的記錄內容。Viewbin是一個用於查看Windows CE的操作系統鏡像數據信息的小程序,它可以看到的鏡像信息包括:鏡像運行時准確的長度信息、包含在鏡像中的文件和可執行的模塊以及鏡像中所包含的符號信息。使用下面命令查看NK.bin鏡像文件中的記錄內容,如圖2所示。

Viewbin –r nk.bin

 

 

 

  圖2 使用viewbin打開系統鏡像文件

    

上圖清晰的顯示了NK.bin里面的所有記錄條目(截圖只顯示了0-16條)。鏡像數據目的起始地址(ImageStart)為0x80100000,鏡像數據長度(ImageLength)為0x025D03D0。以第一條記錄Record[0]為例,它由4字節的起始存儲地址(0x80100000)、4字節的數據長度(0x00000004)、4字節的校驗碼(0x000001AF)和0x00000004個字節的記錄數據(0XEA0018AD)組成。這和之前使用UltraEdit打開NK.bin的內容是一致的。

     由以上.bin的文件格式可知,.bin文件不是內存程序空間的一個簡單的拷貝。所以它不能直接用串口燒寫進內存或FLASH空間來直接運行,必須通過 PB下載,通過EBOOT按照.bin文件的格式解析出來具體的內容並重新裝載后才能運行。 

 

原文地址:http://www.cnblogs.com/Torres_fans/archive/2010/08/21/1805539.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM