Auf Nicht-A/B-Geräten sollte das Wiederherstellungsimage Informationen aus einem Gerätebaum-Blob (DTB) oder einem ACPI-Overlay-Image (Advanced Configuration and Power Interface) enthalten. Wenn solche Geräte in die Wiederherstellung starten, kann der Bootloader dann das Overlay-Image laden, das mit dem Wiederherstellungs-Image kompatibel ist. Geräte, die A/B-Updates (nahtlose Aktualisierungen) unterstützen, sollten die Wiederherstellung als Start anstelle einer separaten Wiederherstellungspartition verwenden (Einzelheiten finden Sie unter Implementieren von A/B-Updates ).
Die Optionen zum Einbinden eines Wiederherstellungs-DTBO/ACPIO als Teil des Start-/Wiederherstellungsabbilds unterscheiden sich je nach Android-Version.
Freigeben | Update-Schema | GKI-Konformität | Boot-Header-Version (Startgeräte) | Boot-Header-Version (Upgrade von Geräten) | Dediziertes Wiederherstellungsimage erforderlich |
---|---|---|---|---|---|
11 | A/B, Virtuelles A/B | Ja | 3 * | N / A | NEIN |
A/B, Virtuelles A/B | NEIN | 2, 3 | 0, 1, 2, 3 | NEIN | |
Nicht-A/B | Ja | 3 | N / A | Ja | |
Nicht-A/B | NEIN | 2, 3 | 0, 1, 2, 3 | Ja | |
10 (Q) | A/B | N / A | 2 | 0, 1, 2 | NEIN |
Nicht-A/B | N / A | 2 | 0, 1, 2 | Ja | |
9 (P) | A/B | N / A | 1 | 0, 1 | NEIN |
Nicht-A/B | N / A | 1 | 0, 1 | Ja | |
8 (O) | A/B | N / A | N/A (wird als 0 betrachtet) | N/A (wird als 0 betrachtet) | NEIN |
Nicht-A/B | N / A | N/A (wird als 0 betrachtet) | N/A (wird als 0 betrachtet) | Ja |
* A/B-Geräte, auf denen Android 11 oder höher ausgeführt wird und das Generic Kernel Image (GKI) verwenden, müssen eine primäre Boot-Header-Version von 3 verwenden, um mit der Boot-Partition des Anbieters kompatibel zu sein.
Kernpunkte:
A/B-Geräte müssen kein Wiederherstellungsimage angeben, da A/B-Updates zwei Partitionssätze (einschließlich
boot
unddtbo
) verwenden und während Updates zwischen diesen wechseln, sodass kein Wiederherstellungsimage erforderlich ist. Auf Wunsch können A/B-Geräte weiterhin ein dediziertes Wiederherstellungsimage verwenden.Nicht-A/B-Geräte, die mit Android 11 oder höher gestartet werden und eine Boot-Header-Version 3 verwenden, müssen explizit separat eine Boot-Header-Version 2 für das Wiederherstellungsimage angeben. Zum 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.
Über OTA-Fehler und Wiederherstellungsimages
Um Over-the-Air-Ausfälle (OTA) auf Nicht-A/B-Geräten zu verhindern, 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 (jedoch vor Abschluss des vollständigen Updates), 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 Nichtübereinstimmung mit dem Wiederherstellungsimage (das noch nicht aktualisiert wurde) kommen.
Um zu verhindern, dass die Wiederherstellung während eines Updates von der DTBO/ACPIO-Partition abhängt, können Nicht-A/B-Geräte mit Android 9 oder höher ein Wiederherstellungs-DTBO/ACPIO-Image angeben, das Informationen aus dem Overlay-Image als separaten Abschnitt im Boot-Image-Format enthält ( muss eine Boot-Header-Version von 1 oder 2 verwenden).
Boot-Image-Änderungen
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 Boot-Image-Struktur wie folgt.
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 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 |
Einzelheiten zu den mkbootimg
Tool-Argumenten zum Angeben der Boot-Image-Header-Version und der Overlay-Image-Pfade finden Sie unter Boot-Image-Header-Versionierung .
Implementierung von DTBO
Nicht-A/B-Geräte mit Version 9 oder höher können den Abschnitt recovery_dtbo
des Wiederherstellungsimages füllen. So fügen Sie das Bild recovery_dtbo
in recovery.img
im Gerät BoardConfig.mk
ein:
Setzen Sie die Konfiguration
BOARD_INCLUDE_RECOVERY_DTBO
auftrue
:BOARD_INCLUDE_RECOVERY_DTBO := true
Erweitern 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)
Stellen Sie sicher, dass die Variable
BOARD_PREBUILT_DTBOIMAGE
auf den Pfad des DTBO-Images festgelegt ist. Das Android-Build-System verwendet die Variable, um das Argumentrecovery_dtbo
“ des Toolsmkbootimg
“ während der Erstellung des Wiederherstellungsimages festzulegen.
Wenn die Variablen BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
und BOARD_PREBUILT_DTBOIMAGE
richtig eingestellt sind, schließt das Android-Build-System das DTBO ein, das durch die Variable BOARD_PREBUILT_DTBOIMAGE
in recovery.img
angegeben wird.
Implementierung von ACPIO
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 füllen. So fügen Sie das Bild recovery_acpio
in recovery.img
im Gerät BoardConfig.mk
ein:
Setzen Sie die Konfiguration
BOARD_INCLUDE_RECOVERY_ACPIO
auftrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Erweitern Sie die Variable
BOARD_MKBOOTIMG_ARGS
, um die Boot-Image-Header-Version anzugeben. Die Variable muss größer oder gleich 1 sein, um Wiederherstellungs-ACPIO zu unterstützen.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Stellen Sie sicher, dass die Variable
BOARD_RECOVERY_ACPIO
auf den Pfad des ACPIO-Images eingestellt ist. Das Android-Build-System verwendet die Variable, um das Argumentrecovery_acpio
“ des Tools „mkbootimg
“ während der Erstellung des Wiederherstellungsimages festzulegen.
Wenn die Variablen BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
und BOARD_RECOVERY_ACPIO
richtig eingestellt sind, schließt das Android-Build-System den ACPIO ein, der durch die Variable BOARD_RECOVERY_ACPIO
in recovery.img
angegeben wird.