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 (
boot
idtbo
) 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
natrue
: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 argumenturecovery_dtbo
narzędziamkbootimg
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_acpio
w recovery.img
na urządzeniu BoardConfig.mk
:
Ustaw konfigurację
BOARD_INCLUDE_RECOVERY_ACPIO
natrue
: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 Argumentrecovery_acpio
narzędziamkbootimg
podczas tworzenia obraz odzyskiwania.
Jeśli zmienne BOARD_INCLUDE_RECOVERY_ACPIO
, BOARD_MKBOOTIMG_ARGS
i BOARD_RECOVERY_ACPIO
są prawidłowo ustawione, system kompilacji Androida uwzględnia ACPIO określone przez zmienną BOARD_RECOVERY_ACPIO
w recovery.img
.