首页
社区
课程
招聘
[分享]Android mkbootimg 分析
发表于: 2016-2-28 15:25 4306

[分享]Android mkbootimg 分析

2016-2-28 15:25
4306
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

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 7048
活跃值: (3527)
能力值: ( LV12,RANK:340 )
在线值:
发帖
回帖
粉丝
2
曾经写过一个win下可以直接编辑修改boot.img的图形化工具.
勉强实现到对CPIO文档读写操作部分,现在半途而废了0.0
2016-2-28 17:52
0
雪    币: 34
活跃值: (50)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
3
技术就是要坚持到底~_~
2016-3-1 19:44
0
游客
登录 | 注册 方可回帖
返回
//