Auf Nicht-A/B-Geräten sollte das Wiederherstellungs-Image Informationen aus einem Device Tree Blob (DTB) oder einem Advanced Configuration and Power Interface (ACPI)-Overlay-Image enthalten. Wenn solche während der Wiederherstellung gestartet wird, kann der Bootloader das Overlay-Image laden, das ist mit dem Wiederherstellungsabbild kompatibel. Geräte mit A/B-Unterstützung (nahtlos) Updates die Wiederherstellung als Boot anstelle eines separate Wiederherstellungspartition (weitere Details finden Sie unter A/B implementieren) Updates).
Die Optionen zum Einbinden eines DTBO/ACPIO für die Wiederherstellung als Teil des Boot- bzw. Wiederherstellungsvorgangs Image unterscheiden sich je nach Android-Release.
Release | Schema aktualisieren | GKI-Compliance | Header-Version starten (startende Geräte) | Boot-Header-Version (Geräte mit Upgrade) | Spezielles Wiederherstellungs-Image erforderlich |
---|---|---|---|---|---|
11 | A/B, Virtuelles A/B |
Ja | 3* | – | Nein |
A/B, Virtuelles A/B |
Nein | 2, 3 | 0, 1, 2, 3 | Nein | |
Nicht A/B | Ja | 3 | – | Ja | |
Nicht A/B | Nein | 2, 3 | 0, 1, 2, 3 | Ja | |
10 (F) | A/B-Tests | – | 2 | 0, 1, 2 | Nein |
Nicht A/B | – | 2 | 0, 1, 2 | Ja | |
9 (P) | A/B-Tests | – | 1 | 0, 1 | Nein |
Nicht A/B | – | 1 | 0, 1 | Ja | |
8 (O) | A/B-Tests | – | – (erfasst 0) | – (erfasst 0) | Nein |
Nicht A/B | – | – (erfasst 0) | – (erfasst 0) | Ja |
* A/B-Geräte mit Android 11 oder höher und unter Verwendung des generischen Kernel-Images (GKI) muss ein Primäre Boot-Header-Version von 3 werden Kompatibel mit Boot-Browsern Partition.
Wichtige Punkte:
Für A/B-Geräte muss kein Wiederherstellungsimage angegeben werden, da für A/B-Updates zwei Gruppen verwendet werden. von Partitionen (einschließlich
boot
unddtbo
) und wechseln während Dadurch ist kein Wiederherstellungsimage mehr erforderlich. A/B-Geräte können weiterhin ein spezielles Wiederherstellungsimage verwenden.Für Nicht-A/B-Geräte, die mit Android 11 oder höher auf den Markt gebracht werden und die Boot-Header-Version 3 verwenden, muss für das Wiederherstellungs-Image separat eine Boot-Header-Version 2 angegeben werden. Beispiel:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Bei Architekturen, die keine Gerätestrukturen unterstützen, kann das Wiederherstellungsimage Ein ACPIO-Bild anstelle eines DTBO-Bilds.
Informationen zu OTA-Fehlern und Wiederherstellungs-Images
Um OTA-Ausfälle (Over The Air) auf Nicht-A/B-Geräten zu vermeiden, sollte unabhängig von anderen Bildern sein. Während eines OTA-Updates Bei Problemen nach der Aktualisierung des Overlay-Bilds (aber vor der Abschluss des vollständigen Updates), versucht das Gerät, in den Wiederherstellungsmodus zu starten, um das OTA-Update abzuschließen. Da die Overlay-Partition jedoch bereits aktualisiert wurde, könnte eine Diskrepanz mit dem Wiederherstellungsabbild (das nicht noch aktualisiert).
Um zu verhindern, dass die Wiederherstellung von der DTBO/ACPIO-Partition während eines Update, Nicht-A/B-Geräte mit Android 9 oder höher kann ein DTBO/ACPIO-Wiederherstellungs-Image angeben, das Informationen aus dem Overlay enthält Image als separater Abschnitt im Boot-Image-Format (muss einen Boot-Header verwenden) Version 1 oder 2).
Änderungen des Boot-Images
Um zuzulassen, dass das Wiederherstellungs-Image den DTBO oder ACPIO ohne A/B enthält mit Android 9 oder höher verwenden, aktualisieren Sie wie im Folgenden dargestellt.
Bereich für Boot-Image | Anzahl der Seiten |
---|---|
Boot-Header (1 Seite) | 1 |
Kernel (l-Seiten) | l = (kernel_size + page_size –
1) / page_size |
Ramdisk (M-Seiten) | m = (ramdisk_size + page_size -
1) / page_size |
Bootloader der zweiten Stufe (n Seiten) | n = (second_size + page_size -
1) / page_size |
Wiederherstellung DTBO oder ACPIO (o-Seiten) | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
Weitere Informationen zu den Argumenten des mkbootimg
-Tools zum Angeben des Boot-Images
Header-Version und Overlay-Image-Pfade, siehe Boot-Image-Header
Versionsverwaltung.
DTBO implementieren
Nicht-A/B-Geräte mit Version 9 oder höher können
Abschnitt recovery_dtbo
des Wiederherstellungsabbilds. recovery_dtbo
einfügen
Bild in recovery.img
auf dem Gerät BoardConfig.mk
:
Legen Sie die Konfiguration
BOARD_INCLUDE_RECOVERY_DTBO
auftrue
fest:BOARD_INCLUDE_RECOVERY_DTBO := true
Erweitern Sie die Variable
BOARD_MKBOOTIMG_ARGS
, um den Boot-Image-Header anzugeben. Version:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Die Variable
BOARD_PREBUILT_DTBOIMAGE
muss auf den Pfad des DTBO-Images festgelegt sein. Das Android-Build-System verwendet die Variable, um die Argumentrecovery_dtbo
desmkbootimg
-Tools beim Erstellen von Wiederherstellungsabbild.
Wenn die Variablen BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
und BOARD_PREBUILT_DTBOIMAGE
richtig festgelegt sind, enthält das Android-Build-System die DTBO, die durch die Variable BOARD_PREBUILT_DTBOIMAGE
in recovery.img
angegeben ist.
ACPIO implementieren
Nicht-A/B-Geräte mit Android 9 oder höher können
ein ACPIO-Overlay-Bild (anstelle eines DTBO-Bildes) und kann das
Abschnitt recovery_acpio
(anstelle des Abschnitts recovery_dtbo
) des
Wiederherstellungsabbild. So fügen Sie das Bild recovery_acpio
in recovery.img
ein:
Gerät BoardConfig.mk
:
Legen Sie die Konfiguration
BOARD_INCLUDE_RECOVERY_ACPIO
auftrue
fest:BOARD_INCLUDE_RECOVERY_ACPIO := true
Erweitern Sie die Variable
BOARD_MKBOOTIMG_ARGS
, um die Version der Boot-Image-Kopfzeile anzugeben. Die Variable muss größer oder gleich 1 sein, um die Wiederherstellung zu unterstützen ACPIO.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Die Variable
BOARD_RECOVERY_ACPIO
muss auf den Pfad des ACPIO-Images festgelegt sein. Das Android-Build-System verwendet die Variable, um dasrecovery_acpio
-Argument desmkbootimg
-Tools beim Erstellen des Wiederherstellungs-Images festzulegen.
Wenn die Variablen BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
und BOARD_RECOVERY_ACPIO
richtig festgelegt sind, enthält das Android-Build-System die ACPIO, die in recovery.img
durch die Variable BOARD_RECOVERY_ACPIO
angegeben ist.