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
現在會出現問題。
我是否高估了結構佈局中常見的差異?
有趣。感謝您的參考。 – yew