Mit Android 9 wurde im Boot-Image ein Versionsfeld eingeführt. -Header, wodurch Aktualisierungen des Headers möglich sind, während die Abwärtskompatibilität aufrechterhalten wird. Der Bootloader muss das Feld für die Header-Version prüfen und den Header parsen entsprechend anpassen. Geräte, die eingeführt werden mit:
- Android 13 kann die Bootheader-Version 3 oder 4 verwenden. Für
Geräte, die das Generic Kernel Image unterstützen
(Google KI)
Architektur ist Version 4 das primäre Boot-Image und der
os_version
im Boot-Header muss null sein. Der Geräte-Bootloader wird erwartet, Rufen Sie die Versionsinformationen aus dem Verifizierten Bootmodus von Android (AVB) ab . - Unter Android 12 kann die Bootheader-Version 3 oder 4 verwendet werden. Für Geräte, die das Generic Kernel Image unterstützen (Google KI) Architektur ist Version 4 das primäre Boot-Image.
- Unter Android 11 kann die Boot-Header-Version 3 verwendet werden. Für Geräte, die Generic Kernel Image unterstützen (Google KI) Architektur verwenden, muss diese Version für das primäre Boot-Image verwendet werden.
- Android 10 muss die Boot-Header-Version 2 verwenden.
- Android 9 muss die Boot-Header-Version 1 verwenden.
- Unter Android 8 und niedriger wird davon ausgegangen, dass ein Boot-Image-Header der Version 0 verwendet wird.
Für alle Geräte mit Android 9 oder höher
Die Vendor Test Suite (VTS) prüft das Format des
boot/recovery
-Image, damit im Boot-Image-Header das korrekte
Version. So rufen Sie AOSP-Details zu allen unterstützten Boot- und Anbieterstarts auf
Bildüberschriften, siehe
system/tools/mkbootimg/include/bootimg/bootimg.h
Versionsverwaltung für Boot-Image-Header implementieren
Das mkbootimg
-Tool akzeptiert die folgenden Argumente.
Argumentation | Beschreibung |
---|---|
header_version |
Legt die Boot-Image-Headerversion fest. Ein Boot-Image mit einer Header-Version:
<ph type="x-smartling-placeholder">
|
recovery_dtbo |
Wird für Architekturen verwendet, die DTB verwenden. Gibt den Pfad zur Wiederherstellung an
DTBO-Bild. Optional für A/B-Geräte, die kein Wiederherstellungsabbild benötigen.
Nicht-A/B-Geräte mit header_version :
<ph type="x-smartling-placeholder">
|
recovery_acpio |
Wird für Architekturen verwendet, die ACPI anstelle von DTB verwenden. Gibt den Pfad an
mit dem ACPIO-Image
zur Wiederherstellung. Optional für A/B-Geräte, die kein
Wiederherstellungsabbild. Nicht-A/B-Geräte mit header_version :
<ph type="x-smartling-placeholder">
|
dtb |
Pfad zum DTB-Image, das in den Boot-/Wiederherstellungs-Images enthalten ist. |
dtb_offset |
Wenn es dem Argument base hinzugefügt wird, wird die physische Last angegeben.
und die Adresse für die endgültige Gerätestruktur. Wenn beispielsweise base
Argument ist 0x10000000 und das Argument dtb_offset
ist 0x01000000 , die dtb_addr_field im Boot-Image
wird als 0x11000000 ausgefüllt. |
Das Gerät „BoardConfig.mk
“ verwendet zum Hinzufügen die Konfiguration „BOARD_MKBOOTIMG_ARGS
“
header version
mit den anderen board-spezifischen Argumenten von mkbootimg
. Für
Beispiel:
BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Das Android-Build-System verwendet die Variable BoardConfig
BOARD_PREBUILT_DTBOIMAGE
, um das Argument recovery_dtbo
des
mkbootimg
-Tool beim Erstellen des Wiederherstellungsabbilds. Weitere Informationen zum
Änderungen am Android Open Source Project (AOSP) – sieh dir die verknüpften Änderungslisten an
für Boot-Image-Header
Versionsverwaltung.
Boot-Image-Header, Version 4
Android 12 stellt ein boot_signature
im Boot-Image bereit
Header-Version 4, mit der die Integrität des Kernels und der
ramdisk. Die Prüfung erfolgt in
VtsSecurityAvbTest
und ist für Geräte mit der GKI-Architektur erforderlich. Die
boot_signature
ist nicht am gerätespezifischen verifizierten Bootvorgang beteiligt
und wird nur in VTS verwendet. Siehe GKI boot.img Board
Konfiguration
und Verifizierter GKI-Bootmodus
Einstellungen
.
Boot-Image des Anbieters Überschrift Version 4 unterstützt Ramdisk-Fragmente mehrerer Anbieter.
Version 4 der Boot-Image-Headerversion verwendet das folgende Format.
struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t ramdisk_size; /* size in bytes */
uint32_t os_version;
uint32_t header_size; /* size of boot image header in bytes */
uint32_t reserved[4];
uint32_t header_version; /* offset remains constant for version check */
#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];
uint32_t signature_size; /* size in bytes */
};
Boot-Image-Header, Version 3
Android 11 aktualisiert den Boot-Image-Header auf Version 3. Dadurch werden folgende Daten entfernt:
Bootloader der zweiten Phase: Die Felder
second_size
undsecond_addr
sind länger im Boot-Image-Header. Geräte mit einem Bootloader der zweiten Phase muss dieser Bootloader in seiner eigenen Partition gespeichert werden.Wiederherstellungsabbild. Die Anforderung zum Angeben eines Wiederherstellungs-Images wurde eingestellt und die
recovery_dtbo_size
,recovery_dtbo_offset
, Die Felderrecovery_acpio_size
undrecovery_acpio_offset
werden nicht mehr in dem Boot-Image-Header.A/B-Geräte nutzen ein Aktualisierungs- und Wiederherstellungsschema, das es überflüssig macht, ein DTBO- oder ACPIO-Image für die Wiederherstellung angeben.
Nicht-A/B-Geräte, auf denen ein Wiederherstellungsimage angegeben werden soll (entweder DTBO oder ACPIO) sollte Boot-Image-Header-Version 1 oder 2 verwenden.
Device Tree Blob (DTB): Die DTB wird im Anbieter-Boot gespeichert. Partition sodass die Felder
dtb_size
unddtb_addr
nicht mehr im Boot-Image angezeigt werden. Header (sind aber im Boot-Image-Header des Anbieters vorhanden).
Geräte können Version 3 des Boot-Image-Headers verwenden, um ein allgemeines Kernel-Image einzuhalten.
(GKI)-Architektur verwendet,
Dabei werden der Kernkernel vereinheitlicht und die für das Projekt erforderlichen
in die Partition vendor_boot
starten (d. h., das Boot-Image enthält nur GKI)
Komponenten). Geräte, die:
GKI verwenden (erfordert den Kernel Android 4.19 oder Android 5.4), aber nicht Bei A/B-Updates kann ein Wiederherstellungsimage angegeben werden, indem ein Boot-Image der Version 3 für den Boot-Image und Boot-Image Version 2 für das Wiederherstellungs-Image.
Verwenden Sie weder GKI noch A/B-Updates, um ein Wiederherstellungsimage anzugeben, indem Sie Folgendes verwenden: Boot-Image-Version 1 oder 2 sowohl für Boot- als auch für Wiederherstellungs-Images.
Version 3 der Boot-Image-Headerversion verwendet das folgende Format.
struct boot_img_hdr
{
#define BOOT_MAGIC_SIZE 8
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t ramdisk_size; /* size in bytes */
uint32_t os_version;
uint32_t header_size; /* size of boot image header in bytes */
uint32_t reserved[4];
uint32_t header_version; /* offset remains constant for version check */
#define BOOT_ARGS_SIZE 512
#define BOOT_EXTRA_ARGS_SIZE 1024
uint8_t cmdline[BOOT_ARGS_SIZE + BOOT_EXTRA_ARGS_SIZE];
};
Boot-Image-Header, Version 2
Android 10 aktualisiert den Boot-Image-Header auf Version 2, Dadurch wird ein Abschnitt für die Wiederherstellungs-DTB hinzugefügt. Bild (Bildgröße) und physische Ladeadresse).
Version 2 der Boot-Image-Headerversion verwendet das folgende Format.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t header_version;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
uint32_t recovery_[dtbo|acpio]_size; /* size of recovery image */
uint64_t recovery_[dtbo|acpio]_offset; /* offset in boot image */
uint32_t header_size; /* size of boot image header in bytes */
uint32_t dtb_size; /* size of dtb image */
uint64_t dtb_addr; /* physical load address */
};
Boot-Image-Header, Version 1
Android 9 wandelt das Feld unused
des Bootvorgangs um
Bild-Header in ein Header-Versionsfeld. Geräte, die mit Android auf den Markt gebracht werden
9 muss den Boot-Image-Header mit dem Header verwenden
Version auf 1 oder höher festgelegt (wird von VTS überprüft).
Version 1 der Boot-Image-Headerversion verwendet das folgende Format.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t header_version;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
uint32_t recovery_[dtbo|acpio]_size; /* size of recovery image */
uint64_t recovery_[dtbo|acpio]_offset; /* offset in boot image */
uint32_t header_size; /* size of boot image header in bytes */
};
Nicht-A/B-Geräte können ein DTB/ACPI-Overlay-Bild für Wiederherstellung Fehler bei OTA-Updates (Over The Air) Bei A/B-Geräten tritt dieses Problem nicht auf, müssen kein Overlay-Bild angegeben werden.) Sie können entweder ein DTBO-Image oder ein ACPIO-Image, aber nicht beides (da sie von unterschiedlichen Architekturen verwendet werden). So konfigurieren Sie den Boot-Image-Header korrekt, wenn Sie Folgendes verwenden:
Ein DTBO-Image zur Wiederherstellung, das
recovery_dtbo_size
undrecovery_dtbo_offset
-Feldern (ohne die Felderrecovery_acpio_size
undrecovery_acpio_offset
-Felder.Ein ACPIO-Image für die Wiederherstellung, einschließlich
recovery_acpio_size
undrecovery_acpio_offset
-Feldern (ohne die Felderrecovery_dtbo_size
undrecovery_dtbo_offset
-Felder.
Das Feld header_size
enthält die Größe des Boot-Image-Headers. Wenn der Startvorgang
Version des Image-Headers auf 1 festgelegt ist, enthält das Feld id
den SHA-1-Digest für
im Abschnitt recovery_[dtbo|acpio]
des Boot-Images
kernel
, ramdisk
und second sections
. Weitere Informationen zum
Die Felder recovery_[dtbo|acpio]_size
und recovery_[dtbo|acpio]_offset
, siehe
Wiederherstellungs-Images.
Alter Boot-Image-Header, Version 0
Geräte, die vor Android 9 auf den Markt gebracht wurden, auf denen die alte Boot-Image-Header behandelt werden, als würde es eine Boot-Image-Header-Version 0 verwenden.
struct boot_img_hdr
{
uint8_t magic[BOOT_MAGIC_SIZE];
uint32_t kernel_size; /* size in bytes */
uint32_t kernel_addr; /* physical load addr */
uint32_t ramdisk_size; /* size in bytes */
uint32_t ramdisk_addr; /* physical load addr */
uint32_t second_size; /* size in bytes */
uint32_t second_addr; /* physical load addr */
uint32_t tags_addr; /* physical addr for kernel tags */
uint32_t page_size; /* flash page size we assume */
uint32_t unused;
uint32_t os_version;
uint8_t name[BOOT_NAME_SIZE]; /* asciiz product name */
uint8_t cmdline[BOOT_ARGS_SIZE];
uint32_t id[8]; /* timestamp / checksum / sha1 / etc */
uint8_t extra_cmdline[BOOT_EXTRA_ARGS_SIZE];
};