Android 系統啟動分析(一)

Boot.img 分析

Boot.img 組成

Boot.img = uImage + ramdisk.img

Boot.img 制作

工具源碼位置: system/core/mkbootimg/
工具源碼文件:

  • bootimg.h
  • makebootimg.c

Boot.img 的內存布局

+-----------------+ 
| boot header     | 1 page
+-----------------+
| kernel          | n pages  
+-----------------+
| ramdisk         | m pages  
+-----------------+
| second stage    | o pages
+-----------------+

Boot.img 頭結構

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 */
};

ramdisk.img 分析

使用file命令查看ramdisk.img的類型

# file ramdisk.img
ramdisk.img: gzip compressed data, from Unix 

ramdisk.img是gzip類型的壓縮文件,修改文件名ramdisk.img為ramdisk.img.gz

# gzip -d ramdisk.img.gz

解壓后,獲得一個ramdisk.img的文件,繼續(xù)使用file查看這個文件類型

# file ramdisk.img
ramdisk.img: ASCII cpio archive (SVR4 with no CRC)

ramdisk 是cpio類型的文件

# cpio -i -F ramdisk.img

解壓后獲得的就是root目錄下文件

out/target/product/your_product_name/root
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容