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的文件,继续使用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