Obrazy odzyskiwania

W przypadku urządzeń innych niż A/B obraz odzyskiwania powinien zawierać informacje z bloba drzewa urządzenia (DTB) lub obrazu nakładki interfejsu ACPI (Advanced Configuration and Power Interface). 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ędniania informacji o odzyskiwaniu DTBO/ACPIO w ramach obrazu rozruchowego lub obrazu odzyskiwania różnią się w zależności od wersji Androida.

Wersja Aktualizacja schematu Zgodność z GKI Wersja nagłówka rozruchu (uruchamianie urządzeń) Wersja nagłówka rozruchowego (uaktualnianie urządzeń) Wymagany dedykowany obraz przywracania
11 A/B,
wirtualny 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 (P) 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 (uważane za 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 A/B mogą nadal używać dedykowanego obrazu odzyskiwania.

  • Urządzenia inne niż A/B uruchamiane z Androidem 11 lub nowszym i używające wersji nagłówka rozruchu 3 muszą wyraźnie wskazywać wersję nagłówka rozruchu w przypadku obrazu odzyskiwania osobno. 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 uniknąć problemów z przesyłaniem bezprzewodowym (OTA) na urządzeniach innych niż A/B, obraz odzyskiwania powinien być samowystarczalny i niezależny 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ą określać obraz DTBO/ACPIO odzyskiwania zawierający informacje z obrazu nakładki jako oddzielną 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 (m stron) m = (ramdisk_size + page_size - 1) / page_size
Program rozruchowy drugiego etapu (n stron) n = (second_size + page_size - 1) / page_size
Recovery DTBO lub ACPIO (o pages) o = (recovery_[dtbo|acpio]_size + page_size - 1) / page_size

Szczegółowe informacje o argumentach narzędzia mkbootimg służących do określania wersji nagłówka obrazu rozruchu i ścieżek obrazów nakładki znajdziesz w sekcji Wersja nagłówka obrazu rozruchu.

Wdrożenie DTBO

Urządzenia inne niż A/B z Androidem 9 lub nowszym mogą wypełniać sekcję recovery_dtbo obrazu odzyskiwania. Aby uwzględnić obraz recovery_dtborecovery.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ć wersję nagłówka obrazu rozruchowego:

    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ę do obrazu DTBO. System kompilacji Androida używa tej zmiennej do ustawienia argumentu recovery_dtbo narzędzia mkbootimg podczas tworzenia obrazu odzyskiwania.

Jeśli zmienne BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGSBOARD_PREBUILT_DTBOIMAGE są prawidłowo skonfigurowane, system kompilacji Androida uwzględnia DTBO określone przez zmienną BOARD_PREBUILT_DTBOIMAGErecovery.img.

Wdrożenie ACPIO

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

  • Ustaw wartość parametru konfiguracji BOARD_INCLUDE_RECOVERY_ACPIO na true:

    BOARD_INCLUDE_RECOVERY_ACPIO := true
    
  • Rozszerz zmienną BOARD_MKBOOTIMG_ARGS, aby określić wersję nagłówka obrazu rozruchowego. 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ę do obrazu ACPIO. System kompilacji Androida używa tej zmiennej do ustawienia argumentu recovery_acpio narzędzia mkbootimg podczas tworzenia obrazu odzyskiwania.

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