Obrazy odzyskiwania

Na urządzeniach innych niż A/B obraz przywracania powinien zawierać informacje z blob drzewa urządzenia (DTB) lub Zaawansowana konfiguracja i interfejs zasilania (ACPI). Gdy takie urządzenia uruchomią tryb odzyskiwania, bootloader może załadować obraz nakładki zgodny z obrazem odzyskiwania. Urządzenia, które obsługują aktualizacje A/B (płynne), powinny używać funkcji odzyskiwania jako funkcji rozruchu zamiast osobnej partycji odzyskiwania (szczegóły znajdziesz w artykule Wdrażanie aktualizacji A/B).

Opcje uwzględnienia DTBO/ACPIO przywracania w ramach rozruchu/przywracania różnią się w zależności od wersji Androida.

Wersja Zaktualizuj schemat Zgodność z GKI Wersja nagłówka rozruchowego (uruchamianie urządzeń) Wersja nagłówka rozruchowego (uaktualnianie urządzeń) Wymagany jest specjalny obraz przywracania
11 A/B,
Wirtualne A/B
Tak 3* Nie dotyczy Nie
A/B,
wirtualny A/B
Nie 2, 3 0, 1, 2, 3 Nie
nie A/B Tak 3 Nie dotyczy Tak
nie A/B Nie 2, 3 0, 1, 2, 3 Tak
10 (Q) A/B Nie dotyczy 2 0, 1, 2 Nie
nie A/B Nie dotyczy 2 0, 1, 2 Tak
9 (K) A/B Nie dotyczy 1 0, 1 Nie
nie A/B Nie dotyczy 1 0, 1 Tak
8 (O) A/B Nie dotyczy Nie dotyczy (uważane za 0) Nie dotyczy (uznano, że ma wartość 0) Nie
nie A/B Nie dotyczy Nie dotyczy (uważane za 0) Nie dotyczy (uważane za 0) Tak

* Urządzenia A/B z Androidem w wersji 11 lub nowszej, które korzystają z Generic Kernel Image (GKI), muszą używać podstawowej wersji nagłówka rozruchu o wartości 3, aby być zgodne z partycją rozruchu dostawcy.

Najważniejsze kwestie:

  • Urządzenia A/B nie wymagają podawania obrazu odzyskiwania, ponieważ aktualizacje A/B używają 2 zbiorów partycji (bootdtbo) oraz przełączają się między nimi podczas aktualizacji, co eliminuje potrzebę obrazu odzyskiwania. Urządzenia typu A/B mogą użyj dedykowanego obrazu odzyskiwania.

  • Urządzenia inne niż A/B uruchamiane z Androidem 11 lub nowszym i używające wersji nagłówka rozruchowego 3 muszą wyraźnie wskazywać wersję nagłówka rozruchowego dla obrazu odzyskiwania osobno. Na przykład:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • W przypadku architektur, które nie obsługują drzew urządzeń, obraz odzyskiwania może zawierać obraz ACPIO zamiast obrazu DTBO.

Informacje o błędach związanych z aktualizacją bezprzewodową i obrazach do przywracania

Aby zapobiec błędom związanym z siecią bezprzewodową (OTA) na urządzeniach innych niż A/B, obraz przywracania powinny być samowystarczalne i niezależne od innych obrazów. Jeśli podczas aktualizacji OTA wystąpi problem po zaktualizowaniu obrazu nakładki (ale przed zakończeniem pełnej aktualizacji), urządzenie spróbuje uruchomić tryb odzyskiwania, aby dokończyć aktualizację OTA. Jednak ponieważ partycja nakładki została już zaktualizowana, może wystąpić niezgodność z obrazem odzyskiwania (który nie został jeszcze zaktualizowany).

Aby zapobiec uzależnieniu odzyskiwania od partycji DTBO/ACPIO podczas aktualizacji, urządzenia inne niż A/B z Androidem 9 lub nowszym mogą wskazywać obraz DTBO/ACPIO odzyskiwania zawierający informacje z obrazu nakładki jako osobną sekcję w formacie obrazu rozruchowego (musisz użyć nagłówka rozruchowego w wersji 1 lub 2).

Zmiany w obrazie rozruchowym

Aby obraz odzyskiwania mógł zawierać obraz DTBO lub ACPIO na urządzeniach innych niż A/B z Androidem 9 lub nowszym, zaktualizuj strukturę obrazu rozruchowego w ten sposób.

Sekcja obrazu rozruchowego Liczba stron
Nagłówek uruchamiania (1 strona) 1
Kernel (l pages) L = (kernel_size + page_size – 1) / page_size
Ramdisk (liczba stron: m) m = (ramdisk_size + page_size – 1) / page_size
Program rozruchowy drugiego etapu (n stron) n = (second_size + page_size - 1) / page_size
Przywracanie DTBO lub ACPIO (liczba stron: ) O = (recovery_[dtbo|acpio]_size + page_size – 1) / page_size

Szczegółowe informacje o argumentach narzędzia mkbootimg służących do określania obrazu rozruchowego wersji nagłówka i ścieżek do obrazów nad powierzchnią patrz Nagłówek obrazu rozruchowego Obsługa wersji.

Wdróż DTBO

Urządzenia inne niż A/B z Androidem 9 lub nowszym mogą wypełniać sekcję recovery_dtbo obrazu odzyskiwania. Aby uwzględnić recovery_dtbo obraz w języku recovery.img, na urządzeniu BoardConfig.mk:

  • Ustaw wartość parametru konfiguracji BOARD_INCLUDE_RECOVERY_DTBO na true:

     BOARD_INCLUDE_RECOVERY_DTBO := true
    
  • Rozszerz zmienną BOARD_MKBOOTIMG_ARGS, aby określić nagłówek obrazu rozruchowego wersja:

    BOARD_MKBOOTIMG_ARGS := --ramdisk_offset $(BOARD_RAMDISK_OFFSET) --tags_offset $(BOARD_KERNEL_TAGS_OFFSET) --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Upewnij się, że zmienna BOARD_PREBUILT_DTBOIMAGE jest ustawiona na ścieżkę parametru Obraz DTBO. System kompilacji Androida używa tej zmiennej do ustawiania argumentu recovery_dtbo narzędzia mkbootimg podczas tworzenia obrazu odzyskiwania.

Jeśli BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS i BOARD_PREBUILT_DTBOIMAGE zmiennych jest ustawionych prawidłowo, system kompilacji Androida zawiera tabelę DTBO określoną przez zmienną BOARD_PREBUILT_DTBOIMAGE w argumencie recovery.img

Wdróż ACPIO

Na urządzeniach innych niż A/B z Androidem 9 lub nowszym można: obrazu nakładki ACPIO (zamiast obrazu DTBO) i mogą wypełniać recovery_acpio (zamiast sekcji recovery_dtbo) sekcji obraz odzyskiwania. Aby uwzględnić obraz recovery_acpiorecovery.img na urządzeniu BoardConfig.mk:

  • Ustaw konfigurację BOARD_INCLUDE_RECOVERY_ACPIO na true:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Rozszerz zmienną BOARD_MKBOOTIMG_ARGS, aby określić nagłówek obrazu rozruchowego wersji. Aby obsługiwać odzyskiwanie ACPIO, zmienna musi być większa lub równa 1.

    BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
    
  • Upewnij się, że zmienna BOARD_RECOVERY_ACPIO jest ustawiona na ścieżkę parametru Obraz ACPIO. System kompilacji Androida używa zmiennej do ustawienia Argument recovery_acpio narzędzia mkbootimg podczas tworzenia obraz odzyskiwania.

Jeśli zmienne BOARD_INCLUDE_RECOVERY_ACPIO, BOARD_MKBOOTIMG_ARGSBOARD_RECOVERY_ACPIO są prawidłowo ustawione, system kompilacji Androida uwzględnia ACPIO określone przez zmienną BOARD_RECOVERY_ACPIOrecovery.img.