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

你可能感兴趣的:(Android 系统启动分析(一))