2013-08-17 66 views
3

在Android系統上,內核,ramdisk和一些元數據存儲在由引導加載程序處理的二進制磁盤映像中。圖像使用mkbootimg實用程序構建。Android引導映像格式

審視mkbootimg源,我看到圖像格式具有定義爲

struct boot_img_hdr { 
     unsigned char magic[BOOT_MAGIC_SIZE]; 

     unsigned kernel_size; /* size in bytes */ 
     unsigned kernel_addr; /* physical load addr */ 

     unsigned ramdisk_size; /* size in bytes */ 
     unsigned ramdisk_addr; /* physical load addr */ 

     unsigned second_size; /* size in bytes */ 
     unsigned second_addr; /* physical load addr */ 

     unsigned tags_addr; /* physical addr for kernel tags */ 
     unsigned page_size; /* flash page size we assume */ 
     unsigned unused[2]; /* future expansion: should be 0 */ 

     unsigned char name[BOOT_NAME_SIZE]; /* asciiz product name */ 

     unsigned char cmdline[BOOT_ARGS_SIZE]; 

     unsigned id[8]; /* timestamp/checksum/sha1/etc */ 
}; 

不經任何進一步的資格的報頭。這個結構的一個實例在write的圖像文件的開頭寫入。

這不是嵌入主機系統(x86,我相信)在引導映像典型的字節序和隊列嗎?即使引導程序本身從不將頭部視爲結構,但似乎在具有不同字節順序/對齊(對Android ARM)的系統上運行mkbootimg現在會出現問題。

我是否高估了結構佈局中常見的差異?

回答

2

不,你說得對。

mkbootimg針對ARM的交叉編譯將遇到如question中所述的問題。

+0

有趣。感謝您的參考。 – yew