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 (
boot
idtbo
) 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_dtbo
w recovery.img
na urządzeniu BoardConfig.mk
:
Ustaw wartość parametru konfiguracji
BOARD_INCLUDE_RECOVERY_DTBO
natrue
: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 argumenturecovery_dtbo
narzędziamkbootimg
podczas tworzenia obrazu odzyskiwania.
Jeśli zmienne BOARD_INCLUDE_RECOVERY_DTBO
, BOARD_MKBOOTIMG_ARGS
i BOARD_PREBUILT_DTBOIMAGE
są prawidłowo skonfigurowane, system kompilacji Androida uwzględnia DTBO określone przez zmienną BOARD_PREBUILT_DTBOIMAGE
w recovery.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_acpio
w recovery.img
na urządzeniu BoardConfig.mk
:
Ustaw wartość parametru konfiguracji
BOARD_INCLUDE_RECOVERY_ACPIO
natrue
: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 argumenturecovery_acpio
narzędziamkbootimg
podczas tworzenia obrazu odzyskiwania.
Jeśli zmienne BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
i BOARD_RECOVERY_ACPIO
są prawidłowo skonfigurowane, system kompilacji Androida uwzględnia ACPIO określone przez zmienną BOARD_RECOVERY_ACPIO
w recovery.img
.