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