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?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nicht. Du hast Recht.
mkbootimg
cross-kompiliert für ARM läuft in Probleme, wie beschrieben, in diesem Frage.