Na urządzeniach innych niż A/B obraz odzyskiwania powinien zawierać informacje z pliku DTB (Device Tree Blob) lub obrazu nakładki ACPI (Advanced Configuration and Power Interface). Gdy takie urządzenia uruchamiają się w trybie odzyskiwania, program rozruchowy może wczytać obraz nakładki zgodny z obrazem odzyskiwania. Urządzenia obsługujące aktualizacje A/B (bezproblemowe) powinny używać odzyskiwania jako rozruchu zamiast oddzielnej partycji odzyskiwania (szczegółowe informacje znajdziesz w artykule Wdrażanie aktualizacji A/B).
Opcje uwzględniania DTBO/ACPIO przywracania w ramach obrazu rozruchowego/przywracania różnią się w zależności od wersji Androida.
| Wersja | Aktualizowanie schematu | Zgodność z GKI | Wersja nagłówka rozruchowego (urządzenia wprowadzane na rynek) | Wersja nagłówka rozruchowego (uaktualnianie urządzeń) | Wymagany dedykowany obraz przywracania systemu |
|---|---|---|---|---|---|
| 11 | A/B, wirtualne A/B |
Tak | 3* | Nie dotyczy | Nie |
| A/B, wirtualne 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 Androidem 11 lub nowszym, które korzystają z ogólnego obrazu jądra, muszą używać wersji 3 głównego nagłówka rozruchowego, aby były zgodne z partycją rozruchową dostawcy.
Najważniejsze kwestie:
Urządzenia A/B nie muszą określać obrazu przywracania systemu, ponieważ aktualizacje A/B korzystają z 2 zestawów partycji (w tym
bootidtbo) i przełączają się między nimi podczas aktualizacji, co eliminuje potrzebę używania obrazu przywracania systemu. Urządzenia A/B mogą nadal używać dedykowanego obrazu przywracania systemu.Urządzenia inne niż A/B z Androidem 11 lub nowszym, które używają wersji nagłówka rozruchowego 3, muszą osobno określać wersję nagłówka rozruchowego 2 dla obrazu przywracania systemu. Przykład:
BOARD_RECOVERY_MKBOOTIMG_ARGS := --header_version 2W przypadku architektur, które nie obsługują drzew urządzeń, obraz przywracania systemu może zawierać obraz ACPIO zamiast obrazu DTBO.
Informacje o nieudanych aktualizacjach OTA i obrazach przywracania
Aby zapobiec awariom aktualizacji bezprzewodowych (OTA) na urządzeniach innych niż A/B, obraz przywracania systemu 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 ukończeniem pełnej aktualizacji), urządzenie spróbuje uruchomić się w trybie odzyskiwania, aby dokończyć aktualizację OTA. Jednak ponieważ partycja nakładki została już zaktualizowana, może wystąpić niezgodność z obrazem przywracania systemu (który nie został jeszcze zaktualizowany).
Aby zapobiec zależności od partycji DTBO/ACPIO podczas aktualizacji, urządzenia inne niż A/B z Androidem 9 lub nowszym mogą określać obraz DTBO/ACPIO przywracania 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 przywracania zawierał DTBO lub ACPIO przywracania 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 rozruchowy (1 strona) | 1 |
| Jądro (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 |
| DTBO lub ACPIO (o stronach) przywracania | o = (recovery_[dtbo|acpio]_size + page_size -
1) / page_size |
Szczegółowe informacje o argumentach narzędzia mkbootimg do określania wersji nagłówka obrazu rozruchowego i ścieżek obrazu nakładki znajdziesz w sekcji Wersjonowanie nagłówka obrazu rozruchowego.
Wdrażanie DTBO
Urządzenia inne niż A/B z Androidem 9 lub nowszym mogą wypełniać sekcję recovery_dtbo obrazu przywracania systemu. Aby uwzględnić obraz recovery_dtbo w recovery.img, na urządzeniu BoardConfig.mk:
Ustaw konfigurację
BOARD_INCLUDE_RECOVERY_DTBOnatrue:BOARD_INCLUDE_RECOVERY_DTBO := trueRozszerz 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)Sprawdź, czy zmienna
BOARD_PREBUILT_DTBOIMAGEjest ustawiona na ścieżkę obrazu DTBO. System kompilacji Androida używa tej zmiennej do ustawienia argumenturecovery_dtbonarzędziamkbootimgpodczas tworzenia obrazu przywracania systemu.
Jeśli zmienne BOARD_INCLUDE_RECOVERY_DTBO, BOARD_MKBOOTIMG_ARGS i BOARD_PREBUILT_DTBOIMAGE są prawidłowo ustawione, system kompilacji Androida uwzględnia DTBO określony przez zmienną BOARD_PREBUILT_DTBOIMAGE w recovery.img.
Wdrażanie ACPIO
Urządzenia inne niż A/B z Androidem 9 lub nowszym mogą używać obrazu nakładki ACPIO (zamiast obrazu DTBO) i wypełniać sekcję recovery_acpio (zamiast sekcji recovery_dtbo) obrazu przywracania systemu. Aby dodać obraz recovery_acpio do recovery.img na urządzeniu BoardConfig.mk:
Ustaw konfigurację
BOARD_INCLUDE_RECOVERY_ACPIOnatrue:BOARD_INCLUDE_RECOVERY_ACPIO := trueRozszerz zmienną
BOARD_MKBOOTIMG_ARGS, aby określić wersję nagłówka obrazu rozruchowego. Aby obsługiwać przywracanie ACPIO, zmienna musi być większa lub równa 1.BOARD_MKBOOTIMG_ARGS += --header_version $(BOARD_BOOTIMG_HEADER_VERSION)Sprawdź, czy zmienna
BOARD_RECOVERY_ACPIOjest ustawiona na ścieżkę obrazu ACPIO. System kompilacji Androida używa tej zmiennej do ustawienia argumenturecovery_acpionarzędziamkbootimgpodczas tworzenia obrazu przywracania systemu.
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ślony przez zmienną BOARD_RECOVERY_ACPIO w recovery.img.