Wiederherstellungs-Images

Auf Nicht-A/B-Geräten sollte das Wiederherstellungsabbild Informationen aus einem device Tree Blob (DTB) oder Erweiterte Konfiguration und Stromversorgungsoberfläche (ACPI) Overlay-Bild. Wenn solche während der Wiederherstellung gestartet wird, kann der Bootloader das Overlay-Image laden, das ist mit dem Wiederherstellungsabbild kompatibel. Geräte mit A/B-Unterstützung (nahtlos) Updates die Wiederherstellung als Boot anstelle eines separate Wiederherstellungspartition (weitere Details finden Sie unter A/B implementieren) Updates).

Die Optionen zum Einbinden eines DTBO/ACPIO für die Wiederherstellung als Teil des Boot- bzw. Wiederherstellungsvorgangs Image unterscheiden sich je nach Android-Release.

Release Schema aktualisieren GKI-Compliance Header-Version Boot (starten von Geräten) Header-Version starten (Upgrade für Geräte ausführen) Dediziertes Wiederherstellungsabbild erforderlich
11 A/B,
Virtuelles A/B
Ja 3* Nein
A/B,
Virtuelles 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 (F) A/B-Tests 2 0, 1, 2 Nein
Nicht-A/B- 2 0, 1, 2 Ja
9 (E) A/B-Tests 1 0, 1 Nein
Nicht-A/B- 1 0, 1 Ja
8 (O) A/B-Tests – (erfasst 0) – (erfasst 0) Nein
Nicht-A/B- – (erfasst 0) – (erfasst 0) Ja

* A/B-Geräte mit Android 11 oder höher und unter Verwendung des generischen Kernel-Images (GKI) muss ein Primäre Boot-Header-Version von 3 werden Kompatibel mit Boot-Browsern Partition.

Wichtige Punkte:

  • Für A/B-Geräte muss kein Wiederherstellungsimage angegeben werden, da für A/B-Updates zwei Gruppen verwendet werden. von Partitionen (einschließlich boot und dtbo) und wechseln während Dadurch ist kein Wiederherstellungsimage mehr erforderlich. A/B-Geräte können weiterhin ein dediziertes Wiederherstellungsabbild verwenden.

  • Nicht-A/B-Geräte, die mit Android 11 oder höher auf den Markt gebracht werden Bei Verwendung der Boot-Header-Version 3 muss explizit ein Boot-Header Version 2 für das Wiederherstellungsabbild separat einrichten. Beispiel:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • Bei Architekturen, die keine Gerätestrukturen unterstützen, kann das Wiederherstellungsimage Ein ACPIO-Bild anstelle eines DTBO-Bilds.

Informationen zu OTA-Fehlern und Wiederherstellungs-Images

Um OTA-Ausfälle (Over The Air) auf Nicht-A/B-Geräten zu vermeiden, sollte unabhängig von anderen Bildern sein. Während eines OTA-Updates Bei Problemen nach der Aktualisierung des Overlay-Bilds (aber vor der Abschluss des vollständigen Updates), versucht das Gerät, in den Wiederherstellungsmodus zu starten, um das OTA-Update abzuschließen. Da die Overlay-Partition jedoch bereits aktualisiert wurde, könnte eine Diskrepanz mit dem Wiederherstellungsabbild (das nicht noch aktualisiert).

Um zu verhindern, dass die Wiederherstellung von der DTBO/ACPIO-Partition während eines Update, Nicht-A/B-Geräte mit Android 9 oder höher kann ein DTBO/ACPIO-Wiederherstellungs-Image angeben, das Informationen aus dem Overlay enthält Image als separater Abschnitt im Boot-Image-Format (muss einen Boot-Header verwenden) Version 1 oder 2).

Änderungen des Boot-Images

Um zuzulassen, dass das Wiederherstellungs-Image den DTBO oder ACPIO ohne A/B enthält mit Android 9 oder höher verwenden, aktualisieren Sie wie im Folgenden dargestellt.

Bereich für Boot-Image Anzahl der Seiten
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 Phase (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

Weitere Informationen zu den Argumenten des mkbootimg-Tools zum Angeben des Boot-Images Header-Version und Overlay-Image-Pfade, siehe Boot-Image-Header Versionsverwaltung.

DTBO implementieren

Nicht-A/B-Geräte mit Version 9 oder höher können Abschnitt recovery_dtbo des Wiederherstellungsabbilds. recovery_dtbo einfügen Bild in recovery.img auf dem Gerät BoardConfig.mk:

  • Legen Sie die Konfiguration BOARD_INCLUDE_RECOVERY_DTBO auf true fest:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • Erweitern Sie die Variable BOARD_MKBOOTIMG_ARGS, um den Boot-Image-Header anzugeben. Version:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Die Variable BOARD_PREBUILT_DTBOIMAGE muss auf den Pfad des DTBO-Bild. Das Android-Build-System verwendet die Variable, um die Argument recovery_dtbo des mkbootimg-Tools beim Erstellen von Wiederherstellungsabbild.

Wenn BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS und BOARD_PREBUILT_DTBOIMAGE Variablen sind richtig festgelegt, das Android-Build-System enthält den DTBO, der durch die Variable BOARD_PREBUILT_DTBOIMAGE in recovery.img.

ACPIO implementieren

Nicht-A/B-Geräte mit Android 9 oder höher können ein ACPIO-Overlay-Bild (anstelle eines DTBO-Bildes) und kann das Abschnitt recovery_acpio (anstelle des Abschnitts recovery_dtbo) des Wiederherstellungsabbild. Um das Bild recovery_acpio in recovery.img aufzunehmen, geben Sie im Gerät BoardConfig.mk:

  • Legen Sie die Konfiguration BOARD_INCLUDE_RECOVERY_ACPIO auf true fest:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Erweitern Sie die Variable BOARD_MKBOOTIMG_ARGS, um den Boot-Image-Header anzugeben. Version. Die Variable muss größer oder gleich 1 sein, um die Wiederherstellung zu unterstützen ACPIO.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Die Variable BOARD_RECOVERY_ACPIO muss auf den Pfad des ACPIO-Bild. Das Android-Build-System verwendet die Variable, um die Argument recovery_acpio des mkbootimg-Tools beim Erstellen des Wiederherstellungsabbild.

Wenn BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGS und BOARD_RECOVERY_ACPIO Variablen sind richtig festgelegt, das Android-Build-System enthält den durch die Variable BOARD_RECOVERY_ACPIO angegebenen ACPIO in recovery.img.