Obrazy do odzyskiwania konta

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ółowe informacje znajdziesz w artykule Wdrażanie aktualizacji A/B).

Opcje uwzględniania informacji o odzyskiwaniu DTBO/ACPIO w ramach obrazu rozruchu lub 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 (uznano, że ma wartość 0) Tak

* Urządzenia A/B z Androidem 11 lub nowszym i korzystające z ogólnego obrazu jądra (GKI) muszą używać podstawowej wersji nagłówka rozruchowego 3, aby były zgodne z partycją rozruchu dostawcy.

Najważniejsze kwestie:

  • Urządzenia z testem A/B nie wymagają podania obrazu odzyskiwania, ponieważ aktualizacje A/B korzystają z 2 zbiorów partycji (w tym bootdtbo) i 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 wprowadzane z Androidem 11 lub nowszym i korzystające z nagłówka rozruchowego w wersji 3 muszą wyraźnie określić wersję nagłówka rozruchowego 2 dla obrazu przywracania. Na przykład:

    BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2
    
  • W przypadku architektur, które nie obsługują drzew urządzeń, obraz przywracania 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ć się w trybie przywracania, aby dokończyć aktualizację OTA. Ponieważ jednak partycja nakładki została już zaktualizowana, może wystąpić niezgodność obrazu 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 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
Jądro (strony: l) 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_dtbo w 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ć 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 ustawiania 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 ustawione, system kompilacji Androida uwzględnia DTBO określony przez zmienną BOARD_PREBUILT_DTBOIMAGErecovery.img.

Wdrożenie ACPIO

Urządzenia inne niż A/B z Androidem w wersji 9 lub nowszej mogą używać obrazu nakładki ACPIO (zamiast obrazu DTBO) i mogą wypełnić 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 można było obsługiwać przywrócenie ACPIO, zmienna nie może być mniejsza niż 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 ustawiania 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.