Na urządzeniach innych niż A/B obraz odzyskiwania powinien zawierać informacje z obiektu blob drzewa urządzeń (DTB) lub obrazu nakładki zaawansowanego interfejsu konfiguracji i zasilania (ACPI) . Gdy takie urządzenia zostaną uruchomione w trybie odzyskiwania, program ładujący może załadować obraz nakładki zgodny z obrazem odzyskiwania. Urządzenia obsługujące aktualizacje A/B (bezproblemowe) powinny używać odzyskiwania jako rozruchu zamiast osobnej partycji odzyskiwania (więcej informacji można znaleźć w sekcji Implementowanie aktualizacji A/B ).
Opcje dołączania odzyskiwania DTBO/ACPIO do obrazu rozruchowego/odzyskiwania różnią się w zależności od wersji Androida.
Uwolnienie | Aktualizuj schemat | Zgodność z GKI | Wersja nagłówka rozruchowego (uruchamianie urządzeń) | Wersja nagłówka rozruchowego (aktualizacja urządzeń) | Wymagany jest dedykowany obraz odzyskiwania |
---|---|---|---|---|---|
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 (uznawane za 0) | Nie dotyczy (uznawane za 0) | NIE |
nie-A/B | Nie dotyczy | Nie dotyczy (uznawane za 0) | Nie dotyczy (uznawane za 0) | Tak |
* Urządzenia A/B z systemem Android 11 lub nowszym i korzystające z ogólnego obrazu jądra (GKI) muszą używać podstawowego nagłówka rozruchowego w wersji 3, aby były kompatybilne z partycją rozruchową dostawcy .
Kluczowe punkty:
Urządzenia A/B nie muszą określać obrazu odzyskiwania, ponieważ aktualizacje A/B korzystają z dwóch zestawów partycji (w tym
boot
idtbo
) i przełączają się między nimi podczas aktualizacji, eliminując potrzebę stosowania obrazu odzyskiwania. W razie potrzeby urządzenia A/B mogą nadal korzystać z dedykowanego obrazu odzyskiwania.Urządzenia inne niż A/B uruchamiane z systemem Android 11 lub nowszym i korzystające z nagłówka rozruchowego w wersji 3 muszą osobno określić wersję nagłówka rozruchowego 2 dla obrazu odzyskiwania. 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 awariach OTA i obrazach odzyskiwania
Aby zapobiec awariom transmisji bezprzewodowej (OTA) na urządzeniach innych niż A/B, obraz przywracania powinien być samowystarczalny i niezależny od innych obrazów. Jeśli podczas aktualizacji OTA problem wystąpi po aktualizacji obrazu nakładki (ale przed zakończeniem pełnej aktualizacji), urządzenie spróbuje uruchomić się w trybie odzyskiwania, aby dokończyć aktualizację OTA. Ponieważ jednak partycja nakładkowa 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 systemem Android 9 lub nowszym mogą określić obraz odzyskiwania DTBO/ACPIO zawierający informacje z obrazu nakładki jako osobną sekcję w formacie obrazu rozruchowego ( musi używać wersji nagłówka rozruchowego 1 lub 2).
Zmiany obrazu rozruchowego
Aby obraz odzyskiwania zawierał DTBO lub ACPIO odzyskiwania na urządzeniach innych niż A/B z systemem Android 9 lub nowszym, zaktualizuj strukturę obrazu rozruchowego w następujący sposób.
Sekcja obrazu rozruchowego | Numer stron |
---|---|
Nagłówek rozruchowy (1 strona) | 1 |
Jądro (l stron) | l = ( kernel_size + page_size - 1) / page_size |
Ramdysk (m stron) | m = ( ramdisk_size + page_size - 1) / page_size |
Program ładujący drugiego stopnia (n stron) | n = ( second_size + page_size - 1) / page_size |
Odzyskiwanie DTBO lub ACPIO (o stron) | o = ( recovery_[dtbo|acpio]_size + page_size - 1) / page_size |
Aby uzyskać szczegółowe informacje na temat argumentów narzędzia mkbootimg
służących do określania wersji nagłówka obrazu rozruchowego i ścieżek obrazu nakładki, zobacz Wersjonowanie nagłówka obrazu rozruchowego .
Implementacja DTBO
Urządzenia inne niż A/B z wersją 9 lub nowszą mogą zapełnić sekcję recovery_dtbo
obrazu odzyskiwania. Aby dołączyć obraz recovery_dtbo
do recovery.img
, w urządzeniu BoardConfig.mk
:
Ustaw konfigurację
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ę obrazu DTBO. System kompilacji systemu Android 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ą ustawione poprawnie, system kompilacji Androida uwzględnia DTBO określone przez zmienną BOARD_PREBUILT_DTBOIMAGE
w recovery.img
.
Implementacja ACPIO
Urządzenia inne niż A/B z systemem Android 9 lub nowszym mogą używać obrazu nakładki ACPIO (zamiast obrazu DTBO) i wypełniać sekcję recovery_acpio
(zamiast sekcji recovery_dtbo
) obrazu odzyskiwania. Aby dołączyć obraz recovery_acpio
do recovery.img
, w urządzeniu BoardConfig.mk
:
Ustaw konfigurację
BOARD_INCLUDE_RECOVERY_ACPIO
natrue
:BOARD_INCLUDE_RECOVERY_ACPIO := true
Rozszerz zmienną
BOARD_MKBOOTIMG_ARGS
, aby określić wersję nagłówka obrazu rozruchowego. Zmienna musi być większa lub równa 1, aby umożliwić odzyskiwanie ACPIO.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)
Upewnij się, że zmienna
BOARD_RECOVERY_ACPIO
jest ustawiona na ścieżkę obrazu ACPIO. System kompilacji systemu Android 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ą ustawione poprawnie, system kompilacji Androida zawiera ACPIO określony przez zmienną BOARD_RECOVERY_ACPIO
w recovery.img
.