Obrazy odzyskiwania

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 i dtbo ) 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 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ę obrazu DTBO. System kompilacji systemu Android używa tej zmiennej do ustawienia argumentu recovery_dtbo narzędzia mkbootimg 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 na true :

    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 argumentu recovery_acpio narzędzia mkbootimg 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 .