Android boot image format

Auf Android-Systemen der kernel, die ramdisk und einige Metadaten gespeichert werden in eine binäre disk-image, die gehandhabt werden durch den bootloader. Bilder werden erstellt, mit der mkbootimg - Dienstprogramm.

Prüfung der mkbootimg Quelle, ich sehen, dass das Bild format hat eine Kopfzeile definiert als

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

ohne weitere Qualifikationen. Eine Instanz von diesem struct geschrieben wird beim start der image-Datei mit write.

Nicht das einbetten der endianness und Ausrichtung typisch für das host-system (x86 -, glaube ich) in das boot-image? Auch wenn der bootloader selbst nie behandelt den header als struct, es scheint, dass die Ausführung mkbootimg auf einem system mit unterschiedlicher endianness/Ausrichtung (vis Android-ARM) wäre jetzt problematisch.

Bin ich überschätzt, wie sich die gemeinsamen Unterschiede in der struct-Layouts sind?

InformationsquelleAutor yew | 2013-08-17
Schreibe einen Kommentar