3

在 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,我相信)典型的字节顺序和对齐方式吗?即使引导加载程序本身从不将标头视为结构,但mkbootimg在具有不同字节顺序/对齐方式(针对 Android ARM)的系统上运行似乎现在会出现问题。

我是否高估了结构布局的共同差异?

4

1 回答 1

2

不,你是对的。

mkbootimg为 ARM 交叉编译将遇到此问题中所述的问题

于 2013-08-17T09:55:35.723 回答