Auf Geräten, die keine A/B‑Geräte sind, sollte das Wiederherstellungsimage Informationen aus einem Gerätebaum-Blob (Device Tree Blob, DTB) oder einem ACPI-Overlay-Image (Advanced Configuration and Power Interface) enthalten. Wenn solche Geräte im Wiederherstellungsmodus gestartet werden, kann der Bootloader das Overlay-Image laden, das mit dem Wiederherstellungs-Image kompatibel ist. Geräte, die A/B-Updates (nahtlos) unterstützen, sollten die Wiederherstellung als Boot verwenden und keine separate Wiederherstellungspartition (weitere Informationen finden Sie unter A/B-Updates implementieren).
Die Optionen zum Einbinden eines Wiederherstellungs-DTBO/ACPIO als Teil des Boot-/Wiederherstellungs-Images unterscheiden sich je nach Android-Release.
| Release | Schema aktualisieren | GKI-Compliance | Boot-Header-Version (Geräte zum Start) | Boot-Header-Version (Geräte-Upgrade) | Spezifisches Wiederherstellungsimage 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 (E) | 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, die das Generic Kernel Image (GKI) verwenden, müssen eine primäre Boot-Header-Version 3 verwenden, um mit der Vendor-Boot-Partition kompatibel zu sein.
Wichtige Punkte:
- Bei A/B‑Geräten muss kein Wiederherstellungsimage angegeben werden, da bei A/B‑Updates zwei Partitionssätze (einschließlich - bootund- dtbo) verwendet werden und während der Updates zwischen ihnen gewechselt wird. Dadurch ist kein Wiederherstellungsimage erforderlich. A/B-Geräte können weiterhin ein separates Wiederherstellungsimage verwenden.
- Für Geräte, die keine A/B‑Geräte sind und mit Android 11 oder höher auf den Markt kommen und die Boot-Header-Version 3 verwenden, muss für das Wiederherstellungsimage explizit eine Boot-Header-Version 2 angegeben werden. Beispiel: - BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
- Bei Architekturen, die keine Gerätebäume unterstützen, kann das Wiederherstellungsimage anstelle eines DTBO-Images ein ACPIO-Image 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 in sich geschlossen 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 ist), 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 vom Wiederherstellungs-Image kommen, das noch nicht aktualisiert wurde.
Damit die Wiederherstellung während eines Updates nicht von der DTBO-/ACPIO-Partition abhängt, können Geräte, die keine A/B-Geräte sind und auf denen Android 9 oder höher ausgeführt wird, ein separates DTBO-/ACPIO-Wiederherstellungsimage mit Informationen aus dem Overlay-Image als separaten Abschnitt im Boot-Image-Format angeben (es muss eine Boot-Header-Version 1 oder 2 verwendet werden).
Änderungen am Boot-Image
Damit das Wiederherstellungsimage das Wiederherstellungs-DTBO oder ‑ACPIO auf Nicht-A/B-Geräten mit Android 9 oder höher enthalten kann, aktualisieren Sie die Struktur des Boot-Images wie folgt.
| Abschnitt „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 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 | 
Details zu den mkbootimg-Tool-Argumenten zum Angeben der Boot-Image-Header-Version und der Overlay-Image-Pfade finden Sie unter Versionsverwaltung für Boot-Image-Header.
Gerätebaum-Overlays implementieren
Auf Geräten, die keine A/B‑Geräte sind und auf denen Android 9 oder höher ausgeführt wird, kann der recovery_dtbo-Abschnitt des Wiederherstellungsimages ausgefüllt werden. So fügen Sie das recovery_dtbo-Bild in recovery.img auf dem Gerät BoardConfig.mk ein:
- Setzen Sie die Konfiguration - BOARD_INCLUDE_RECOVERY_DTBOauf- true:- 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)
- Achten Sie darauf, dass die Variable - BOARD_PREBUILT_DTBOIMAGEauf den Pfad des DTBO-Images festgelegt ist. Das Android-Build-System verwendet die Variable, um das- recovery_dtbo-Argument des- mkbootimg-Tools beim Erstellen des Wiederherstellungs-Images festzulegen.
Wenn die Variablen BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS und BOARD_PREBUILT_DTBOIMAGE richtig festgelegt sind, fügt das Android-Build-System das durch die Variable BOARD_PREBUILT_DTBOIMAGE angegebene DTBO in recovery.img ein.
ACPIO implementieren
Auf Geräten, die keine A/B‑Geräte sind und auf denen Android 9 oder höher ausgeführt wird, kann ein ACPIO‑Overlay-Image (anstelle eines DTBO‑Images) verwendet und der recovery_acpio-Abschnitt (anstelle des recovery_dtbo-Abschnitts) des Wiederherstellungsimages ausgefüllt werden. So fügen Sie das recovery_acpio-Bild in recovery.img auf dem Gerät BoardConfig.mk ein:
- Setzen Sie die Konfiguration - BOARD_INCLUDE_RECOVERY_ACPIOauf- true:- 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 ACPIO-Wiederherstellung zu unterstützen.- BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
- Achten Sie darauf, dass die Variable - BOARD_RECOVERY_ACPIOauf den Pfad des ACPIO-Images festgelegt ist. Das Android-Build-System verwendet die Variable, um das- recovery_acpio-Argument des- mkbootimg-Tools beim Erstellen des Wiederherstellungs-Images festzulegen.
Wenn die Variablen BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS und BOARD_RECOVERY_ACPIO richtig festgelegt sind, fügt das Android-Build-System die durch die Variable BOARD_RECOVERY_ACPIO angegebene ACPIO in recovery.img ein.
