Android启动图像格式

时间:2013-08-17 03:18:20

标签: android c bootloader

在Android系统上,内核,ramdisk和一些元数据存储在由引导加载程序处理的二进制磁盘映像中。图像是使用mkbootimg实用程序构建的。

检查mkbootimg来源,我发现图片格式的标题定义为

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

没有任何进一步的资格。这个结构的一个实例是在write的图像文件的开头写的。

这是不是在启动映像中嵌入了主机系统典型的字节顺序和对齐方式(x86,我相信)?即使引导加载程序本身从不将标头视为结构,似乎在具有不同字节顺序/对齐(对于Android ARM)的系统上运行mkbootimg现在也会出现问题。

我是否过高估计了结构布局的常见差异?

1 个答案:

答案 0 :(得分:2)

没有。你是对的。

针对ARM进行交叉编译的

mkbootimg将遇到此question中所述的问题。