Wiederherstellungs-Images

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 boot und dtbo), 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 2
    
  • Bei 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_DTBO auf true fest:

     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)
    
  • Prüfen Sie, ob die Variable BOARD_PREBUILT_DTBOIMAGE auf den Pfad des DTBO-Images festgelegt ist. Das Android-Build-System verwendet die Variable, um das Argument recovery_dtbo des mkbootimg-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_ACPIO auf true fest:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Erweitern 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_ACPIO auf den Pfad des ACPIO-Images festgelegt ist. Das Android-Build-System verwendet die Variable, um das Argument recovery_acpio des mkbootimg-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.