Bei Geräten, die keine A/B-Geräte sind, sollte das Wiederherstellungs-Image Informationen aus einem Device Tree Blob (DTB) oder einem Advanced Configuration and Power Interface (ACPI)-Overlay-Image enthalten. Wenn solche Geräte in den Wiederherstellungsmodus starten, kann der Bootloader das Overlay-Image laden, das mit dem Wiederherstellungs-Image kompatibel ist. Geräte, die nahtlose A/B-Updates unterstützen, sollten die Wiederherstellung als Boot-Partition verwenden, anstatt eine separate Wiederherstellungspartition zu verwenden. Weitere Informationen finden Sie unter A/B-Updates implementieren.
Die Optionen zum Einbeziehen eines DTBO/ACPIO für die Wiederherstellung als Teil des Boot-/Wiederherstellungs-Images unterscheiden sich je nach Android-Release.
Release | Schema aktualisieren | GKI-Compliance | Boot-Header-Version (Startgeräte) | Boot-Header-Version (Geräte mit Upgrade) | Spezielles Wiederherstellungs-Image erforderlich |
---|---|---|---|---|---|
11 | A/B, Virtual A/B |
Ja | 3* | – | Nein |
A/B, Virtual 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 (Q) | A/B | – | 2 | 0, 1, 2 | Nein |
Nicht A/B | – | 2 | 0, 1, 2 | Ja | |
9 (P) | A/B | – | 1 | 0, 1 | Nein |
Nicht A/B | – | 1 | 0, 1 | Ja | |
8 (O) | A/B | – | – (wird als 0 betrachtet) | – (wird als 0 betrachtet) | Nein |
Nicht A/B | – | – (wird als 0 betrachtet) | – (wird als 0 betrachtet) | Ja |
* A/B-Geräte mit Android 11 oder höher und dem Generic Kernel Image (GKI) müssen die primäre Boot-Header-Version 3 verwenden, um mit der Boot-Partition des Anbieters kompatibel zu sein.
Wichtige Punkte:
Für A/B-Geräte muss kein Wiederherstellungs-Image angegeben werden, da A/B-Updates zwei Partitionen (einschließlich
boot
unddtbo
) verwenden und während der Updates zwischen ihnen wechseln. Ein Wiederherstellungs-Image ist daher nicht erforderlich. A/B-Geräte können weiterhin ein spezielles Wiederherstellungsimage verwenden.Für Geräte, die keine A/B-Geräte sind, die mit Android 11 oder höher eingeführt werden und die Version 3 des Boot-Headers verwenden, muss für das Wiederherstellungs-Image separat eine Version 2 des Boot-Headers angegeben werden. Beispiel:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Bei Architekturen, die keine Gerätebäume unterstützen, kann das Wiederherstellungsimage ein ACPIO-Image anstelle eines DTBO-Images enthalten.
OTA-Fehler und Wiederherstellungs-Images
Um OTA-Fehler (Over-the-Air) auf Geräten zu vermeiden, die keine A/B-Geräte sind, sollte das Wiederherstellungsimage autark und unabhängig von anderen Images sein. Wenn während eines OTA-Updates ein Problem auftritt, nachdem das Overlay-Image aktualisiert wurde, aber bevor das vollständige Update abgeschlossen wurde, versucht das Gerät, im Wiederherstellungsmodus zu starten, um das OTA-Update abzuschließen. Da die Overlay-Partition jedoch bereits aktualisiert wurde, kann es zu einer Abweichung mit dem Wiederherstellungs-Image kommen, das noch nicht aktualisiert wurde.
Damit die Wiederherstellung bei einem Update nicht von der DTBO/ACPIO-Partition abhängt, können Geräte, die keine A/B-Geräte sind und Android 9 oder höher ausführen, ein DTBO/ACPIO-Wiederherstellungs-Image mit Informationen aus dem Overlay-Image als separaten Abschnitt im Boot-Image-Format angeben. Dabei muss die Boot-Header-Version 1 oder 2 verwendet werden.
Änderungen am Boot-Image
Damit das Wiederherstellungsimage das DTBO oder ACPIO der Wiederherstellung auf Geräten ohne A/B-Partition mit Android 9 oder höher enthalten kann, aktualisieren Sie die Boot-Image-Struktur so:
Abschnitt „Boot-Image“ | Seitenzahl |
---|---|
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 Phase (n Seiten) | n = (second_size + page_size – 1) ÷ page_size |
Wiederherstellungs-DTBO oder ACPIO (o Seiten) | o = (recovery_[dtbo|acpio]_size + page_size –
1) / page_size |
Weitere Informationen zu den mkbootimg
-Tool-Argumenten zum Angeben der Version des Boot-Image-Headers und der Pfade zu Overlay-Images finden Sie unter Versionsverwaltung für Boot-Image-Header.
DTBO implementieren
Bei Geräten ohne A/B-Partition, auf denen Android 9 oder höher ausgeführt wird, kann der Abschnitt recovery_dtbo
des Wiederherstellungsimages ausgefüllt werden. So fügen Sie das recovery_dtbo
-Image in recovery.img
auf dem Gerät BoardConfig.mk
ein:
Legen Sie die Konfiguration
BOARD_INCLUDE_RECOVERY_DTBO
auftrue
fest:BOARD_INCLUDE_RECOVERY_DTBO := true
Erweitern Sie die Variable
BOARD_MKBOOTIMG_ARGS
, um die Version der Boot-Image-Kopfzeile anzugeben: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 dasrecovery_dtbo
-Argument desmkbootimg
-Tools beim Erstellen des Wiederherstellungs-Images festzulegen.
Wenn die Variablen BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
und BOARD_PREBUILT_DTBOIMAGE
richtig festgelegt sind, enthält das Android-Build-System das DTBO, das 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-Image (anstelle eines DTBO-Images) verwenden und den Abschnitt recovery_acpio
(anstelle des Abschnitts recovery_dtbo
) des Wiederherstellungsimages ausfüllen. So fügen Sie das recovery_acpio
-Bild in recovery.img
auf dem Gerät BoardConfig.mk
ein:
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 von ACPIO zu unterstützen.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.