Wiederherstellungsbilder

Auf Nicht-A / B - Geräte sollten die Wiederherstellung von Bildinformationen von einem enthaltenen Gerätebaum Blob (DTB) oder Advanced Configuration and Power Interface (ACPI) Overlay - Bild. 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 Unterstützung A / B (nahtlos) Updates Erholung als Boot anstelle einer separate Wiederherstellungspartition (Details siehe verwenden sollte Implementierung A / B - Updates ).

Die Optionen zum Einschließen eines Wiederherstellungs-DTBO/ACPIO als Teil des Boot-/Wiederherstellungsimages unterscheiden sich zwischen Android-Versionen.

Veröffentlichung Schema aktualisieren GKI-Konformität Boot-Header-Version (Startgeräte) 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) N/A (als 0) Nein
Nicht-A/B N / A N/A (als 0) N/A (als 0) Jawohl

* A / B - Geräte mit Android 11 oder höher und die Verwendung von Generika Kernel - Image (GKI) eine primäre verwenden muß Boot Header - Version 3 mit der kompatibel seinem Anbieter Boot - Partition .

Wichtige Punkte:

  • A / B - Geräte brauchen nicht ein Recovery - Image angeben als A / B - Updates zwei Sätze von Partitionen (einschließlich boot und dtbo ) und zwischen ihnen wechseln bei Updates, die Notwendigkeit eines Wiederherstellungs - Image zu entfernen. Auf Wunsch können A/B-Geräte weiterhin ein dediziertes Wiederherstellungs-Image verwenden.

  • Non-A / B - Geräte starten mit Android 11 oder höher und eine Boot - Header - Version 3 verwenden , müssen explizit angeben Boot - Header - Version 2 getrennt für das Wiederherstellungs - Image. Zum Beispiel:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • Bei Architekturen, die keine Gerätebäume unterstützen, kann das Wiederherstellungs-Image ein ACPIO-Image anstelle eines DTBO-Image enthalten.

Über OTA-Fehler und Wiederherstellungs-Images

Um Over-the-Air-Ausfälle (OTA) auf Nicht-A/B-Geräten zu vermeiden, sollte das Wiederherstellungsabbild autark und von anderen Abbildern unabhängig sein. Wenn während eines OTA-Updates ein Problem auftritt, nachdem das Overlay-Image aktualisiert wurde (aber vor 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, kann es zu einer Nichtübereinstimmung mit dem Wiederherstellungsabbild (das noch nicht aktualisiert wurde) kommen.

Um zu verhindern, dass die Wiederherstellung während eines Updates von der DTBO/ACPIO-Partition abhängig ist, können Nicht-A/B-Geräte mit Android 9 oder höher ein DTBO/ACPIO-Wiederherstellungsimage mit Informationen aus dem Overlay-Image als separaten Abschnitt im Boot-Image-Format angeben ( muss eine Boot-Header-Version von 1 oder 2) verwenden.

Boot-Image-Änderungen

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.

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

Ausführliche Informationen zu den mkbootimg Werkzeug Argumente für die Angabe der Boot - Image - Header - Version und Overlay - Bild Pfaden finden Sie Boot - Image Header Versionierung .

Implementieren von DTBO

Non-A / B - Geräte mit 9 oder höher können den bevöl recovery_dtbo Abschnitt des Wiederherstellungsbildes. So schließen Sie das recovery_dtbo Bild in recovery.img , in dem Gerät BoardConfig.mk :

  • Stellen Sie das Config - BOARD_INCLUDE_RECOVERY_DTBO zu true :

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • Erweitern Sie die BOARD_MKBOOTIMG_ARGS Variable das Boot - Image - Header - Version angeben:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Sicherstellen , dass der BOARD_PREBUILT_DTBOIMAGE Variable auf den Pfad des Bildes DTBO eingestellt ist. Das Android - Build - System verwendet die Variable , die das festlegen recovery_dtbo Argument der mkbootimg bei der Erstellung von Wiederherstellungs - Image - Tool.

Wenn die BOARD_INCLUDE_RECOVERY_DTBO , BOARD_MKBOOTIMG_ARGS und BOARD_PREBUILT_DTBOIMAGE Variablen richtig gesetzt sind, enthält das Android - Build - System der DTBO von dem angegebenen BOARD_PREBUILT_DTBOIMAGE Variable in recovery.img .

Implementieren von ACPIO

Non-A / B - Geräte mit Android 9 oder höher kann ein Überlagerungsbild ACPIO verwenden (anstelle eines DTBO Bild) und kann das Auffüllen recovery_acpio Abschnitt (anstelle des recovery_dtbo Abschnitt) des Wiederherstellungsbild. So schließen Sie das recovery_acpio Bild in recovery.img , in dem Gerät BoardConfig.mk :

  • Stellen Sie die Config - BOARD_INCLUDE_RECOVERY_ACPIO zu true :

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

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Sicherstellen , dass der BOARD_RECOVERY_ACPIO Variable auf den Pfad des Bildes ACPIO eingestellt ist. Das Android - Build - System verwendet die Variable , die das festlegen recovery_acpio Argument des mkbootimg Werkzeugs bei der Erstellung des Wiederherstellungsabbilds.

Wenn die BOARD_INCLUDE_RECOVERY_ACPIO , BOARD_MKBOOTIMG_ARGS und BOARD_RECOVERY_ACPIO Variablen richtig gesetzt sind, enthält das Android - Build - System der ACPIO von dem angegebenen BOARD_RECOVERY_ACPIO Variable in recovery.img .