Auf Nicht-A/B-Geräten sollte das Wiederherstellungsabbild Informationen aus einem Gerätestrukturblob (DTB) oder einem Advanced Configuration and Power Interface (ACPI) -Überlagerungsabbild enthalten. Wenn solche Geräte in die Wiederherstellung booten, kann der Bootloader dann das Overlay-Image laden, das mit dem Wiederherstellungs-Image kompatibel ist. Geräte, die A/B-Updates (seamless) unterstützen, sollten die Wiederherstellung als Boot anstelle einer separaten Wiederherstellungspartition verwenden (Einzelheiten finden Sie unter Implementieren von A/B-Updates ).
Die Optionen zum Einschließen eines Wiederherstellungs-DTBO/ACPIO als Teil des Start-/Wiederherstellungsabbilds unterscheiden sich zwischen den Android-Versionen.
Freisetzung | Schema aktualisieren | GKI-Konformität | Boot-Header-Version (Geräte starten) | Boot-Header-Version (Upgrade von Geräten) | Dediziertes Wiederherstellungs-Image erforderlich |
---|---|---|---|---|---|
11 | A/B, Virtuelles A/B | Jawohl | 3 * | N / A | Nein |
A/B, Virtuelles A/B | Nein | 2, 3 | 0, 1, 2, 3 | Nein | |
Nicht-A/B | Jawohl | 3 | N / A | Jawohl | |
Nicht-A/B | Nein | 2, 3 | 0, 1, 2, 3 | Jawohl | |
10 (Q) | A/B | N / A | 2 | 0, 1, 2 | Nein |
Nicht-A/B | N / A | 2 | 0, 1, 2 | Jawohl | |
9 (P) | A/B | N / A | 1 | 0, 1 | Nein |
Nicht-A/B | N / A | 1 | 0, 1 | Jawohl | |
8 (O) | A/B | N / A | N/A (als 0 betrachtet) | N/A (als 0 betrachtet) | Nein |
Nicht-A/B | N / A | N/A (als 0 angesehen) | N/A (als 0 angesehen) | Jawohl |
* A/B-Geräte, auf denen Android 11 oder höher ausgeführt wird und die das generische 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 Wiederherstellungs-Image angeben, da A/B-Updates zwei Sätze von Partitionen (einschließlich
boot
unddtbo
) verwenden und während der Aktualisierung zwischen ihnen wechseln, sodass kein Wiederherstellungs-Image erforderlich ist. Falls gewünscht, können A/B-Geräte weiterhin ein dediziertes Wiederherstellungs-Image verwenden.Nicht-A/B-Geräte, die mit Android 11 oder höher starten und eine Boot-Header-Version von 3 verwenden, müssen explizit eine Boot-Header-Version von 2 für das Wiederherstellungsabbild separat angeben. Zum Beispiel:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
Bei Architekturen, die keine Gerätebäume unterstützen, kann das Wiederherstellungsabbild ein ACPIO-Abbild anstelle eines DTBO-Abbilds enthalten.
Informationen zu OTA-Fehlern und Wiederherstellungs-Images
Um Over-the-Air-Ausfälle (OTA) auf Nicht-A/B-Geräten zu verhindern, sollte das Wiederherstellungsabbild autark und unabhängig von anderen Abbildern sein. Wenn während einer OTA-Aktualisierung ein Problem auftritt, nachdem das Overlay-Image aktualisiert wurde (jedoch vor Abschluss der vollständigen Aktualisierung), versucht das Gerät, in den Wiederherstellungsmodus zu booten, um die OTA-Aktualisierung abzuschließen. Da die Overlay-Partition jedoch bereits aktualisiert wurde, kann es zu einer Diskrepanz mit dem Wiederherstellungs-Image kommen (das noch nicht aktualisiert wurde).
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 ändert sich
Damit das Wiederherstellungs-Image 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.
Boot-Image-Abschnitt | Seitenzahl |
---|---|
Bootheader (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 Argumenten des mkbootimg
Tools zum Angeben der Boot-Image-Header-Version und 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 Wiederherstellungsabbilds füllen. So fügen Sie das recovery_dtbo
-Image 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 Header-Version des Boot-Image 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 gesetzt ist. Das Android-Buildsystem verwendet die Variable, um das Argumentrecovery_dtbo
desmkbootimg
Tools während der Erstellung des Wiederherstellungsabbilds festzulegen.
Wenn die BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
und BOARD_PREBUILT_DTBOIMAGE
korrekt festgelegt sind, enthält das Android-Buildsystem den DTBO, der durch die Variable BOARD_PREBUILT_DTBOIMAGE
in recovery.img
angegeben wird.
Implementieren von ACPIO
Nicht-A/B-Geräte mit Android 9 oder höher können ein ACPIO-Overlay-Image (anstelle eines DTBO-Image) verwenden und den Abschnitt recovery_acpio
(anstelle des Abschnitts recovery_dtbo
) des Wiederherstellungsabbilds füllen. So fügen Sie das recovery_acpio
-Image 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 Kopfzeilenversion des Startabbilds 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 gesetzt ist. Das Android-Buildsystem verwendet die Variable, um das Argumentrecovery_acpio
desmkbootimg
Tools während der Erstellung des Wiederherstellungsabbilds festzulegen.
Wenn die BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
und BOARD_RECOVERY_ACPIO
richtig eingestellt sind, enthält das Android-Buildsystem das ACPIO, das durch die Variable BOARD_RECOVERY_ACPIO
in recovery.img
angegeben ist.