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 gebootet werden, kann der Bootloader das Overlay-Image laden, das mit dem Wiederherstellungsimage kompatibel ist. Geräte, die A/B‑Updates (nahtlose Updates) unterstützen, sollten die Wiederherstellung als Boot anstelle einer separaten Wiederherstellungspartition verwenden. Weitere Informationen finden Sie unter A/B‑Updates implementieren.
Die Optionen zum Einbeziehen eines Wiederherstellungs-DTBO/ACPIO als Teil des Boot-/Wiederherstellungsimages unterscheiden sich je nach Android-Release.
| Release | Schema aktualisieren | GKI-Compliance | Boot-Header-Version (Geräte starten) | Boot-Header-Version (Geräte aktualisieren) | Dediziertes Wiederherstellungsimage erforderlich |
|---|---|---|---|---|---|
| 11 | A/B, Virtual A/B |
Ja | 3* | – | Nein |
| A/B, Virtual A/B |
Nein | 2, 3 | 0, 1, 2, 3 | Nein | |
| Kein A/B | Ja | 3 | – | Ja | |
| Kein A/B | Nein | 2, 3 | 0, 1, 2, 3 | Ja | |
| 10 (Q) | A/B | – | 2 | 0, 1, 2 | Nein |
| Kein A/B | – | 2 | 0, 1, 2 | Ja | |
| 9 (P) | A/B | – | 1 | 0, 1 | Nein |
| Kein A/B | – | 1 | 0, 1 | Ja | |
| 8 (O) | A/B | – | – (wird als 0 betrachtet) | – (wird als 0 betrachtet) | Nein |
| Kein A/B | – | – (wird als 0 betrachtet) | – (wird als 0 betrachtet) | Ja |
* Auf A/B‑Geräten mit Android 11 oder höher und dem Generic Kernel Image (GKI) muss die primäre Boot-Header-Version 3 verwendet werden, um mit der Vendor-Boot Partition kompatibel zu sein.
Wichtige Punkte:
Auf A/B‑Geräten muss kein Wiederherstellungsimage angegeben werden, da bei A/B‑Updates zwei Partitionssätze verwendet werden (einschließlich
bootunddtbo), zwischen denen bei Updates gewechselt wird. Dadurch ist kein Wiederherstellungsimage erforderlich. A/B‑Geräte können jedoch weiterhin ein dediziertes Wiederherstellungsimage verwenden.Auf Geräten, die keine A/B‑Geräte sind und mit Android 11 oder höher gestartet werden und die Boot-Header-Version 3 verwenden, muss für das Wiederherstellungsimage explizit die Boot-Header Version 2 angegeben werden. Beispiel:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2Bei Architekturen, die keine Gerätebäume unterstützen, kann das Wiederherstellungsimage anstelle eines DTBO-Images ein ACPIO-Image enthalten.
OTA-Fehler und Wiederherstellungsimages
Um OTA-Fehler (Over-the-Air) auf Geräten zu vermeiden, die keine A/B‑Geräte sind, sollte das Wiederherstellungsimage eigenständig und unabhängig von anderen Images sein. Wenn bei einem OTA-Update ein Problem auftritt, nachdem das Overlay-Image aktualisiert wurde (aber bevor das vollständige Update abgeschlossen ist), versucht das Gerät, im Wiederherstellungsmodus zu booten, um das OTA-Update abzuschließen. Da die Overlay-Partition jedoch bereits aktualisiert wurde, kann es zu einer Inkompatibilität mit dem Wiederherstellungsimage 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 Wiederherstellungs-DTBO/ACPIO-Image angeben, das Informationen aus dem Overlay-Image enthält. Dieses Image wird als separater Abschnitt im Boot-Image-Format angegeben. Dabei muss die Boot-Header-Version 1 oder 2 verwendet werden.
Änderungen am Boot-Image
Damit das Wiederherstellungsimage das Wiederherstellungs-DTBO oder ACPIO auf Geräten enthalten kann, die keine A/B‑Geräte sind und auf denen Android 9 oder höher ausgeführt wird, aktualisieren Sie die Boot-Image-Struktur wie folgt.
| Boot-Image-Abschnitt | 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 |
Weitere Informationen zu den mkbootimg Tool-Argumenten zum Angeben der Boot-Image
Header-Version und der Overlay-Image-Pfade finden Sie unter Boot-Image-Header
Versionsverwaltung.
DTBO implementieren
Auf Geräten, die keine A/B‑Geräte sind und 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 ein: In der Datei BoardConfig.mk des Geräts:
Legen Sie die Konfiguration
BOARD_INCLUDE_RECOVERY_DTBOauftruefest:BOARD_INCLUDE_RECOVERY_DTBO := trueErweitern Sie die Variable
BOARD_MKBOOTIMG_ARGS, um die Boot-Image-Header-Version anzugeben:BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)Prüfen Sie, ob die Variable
BOARD_PREBUILT_DTBOIMAGEauf den Pfad des DTBO-Images festgelegt ist. Das Android-Build-System verwendet die Variable, um das Argumentrecovery_dtbodesmkbootimg-Tools bei der Erstellung des Wiederherstellungsimages 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 DTBO, das durch die Variable BOARD_PREBUILT_DTBOIMAGE angegeben wird, 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 anstelle eines DTBO-Images ein ACPIO-Overlay-Image verwendet werden. Außerdem kann der Abschnitt recovery_acpio (anstelle des Abschnitts recovery_dtbo) des Wiederherstellungsimages ausgefüllt werden. So fügen Sie das recovery_acpio-Image in recovery.img ein: In der Datei BoardConfig.mk des Geräts:
Legen Sie die Konfiguration
BOARD_INCLUDE_RECOVERY_ACPIOauftruefest:BOARD_INCLUDE_RECOVERY_ACPIO := trueErweitern Sie die Variable
BOARD_MKBOOTIMG_ARGS, um die Boot-Image-Header-Version anzugeben. Die Variable muss mindestens 1 sein, um das Wiederherstellungs-ACPIO zu unterstützen.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)Prüfen Sie, ob die Variable
BOARD_RECOVERY_ACPIOauf den Pfad des ACPIO-Images festgelegt ist. Das Android-Build-System verwendet die Variable, um das Argumentrecovery_acpiodesmkbootimg-Tools bei der Erstellung des Wiederherstellungsimages festzulegen.
Wenn die Variablen BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS und BOARD_RECOVERY_ACPIO richtig festgelegt sind, fügt das Android-Build-System das ACPIO, das durch die Variable BOARD_RECOVERY_ACPIO angegeben wird, in recovery.img ein.