OTA na podstawie bloków

Na nowych urządzeniach z Androidem 5.0 możesz włączyć aktualizacje OTA na podstawie bloków. OTA to mechanizm, za pomocą którego producenci OEM zdalnie aktualizują partycję systemową urządzenia:

  • Android 5.0 i nowsze wersje blokują aktualizacje OTA, aby zapewnić, że każde urządzenie będzie używać dokładnie tej samej partycji. Zamiast porównywać poszczególne pliki i obliczać poprawki binarne, blok OTA obsługuje całą partycję jako jeden plik i oblicza jedną poprawkę binarną, co zapewnia, że wynikowa partycja zawiera dokładnie te bity, które mają się znaleźć. Dzięki temu obraz systemu urządzenia może osiągnąć ten sam stan za pomocą fastboot lub OTA.
  • Android 4.4 i starsze wersje korzystały z aktualizacji plików OTA, które zapewniały, że urządzenia miały podobne treści, uprawnienia i tryby plików, ale pozwalały na to, aby metadane takie jak sygnatury czasowe i układ pamięci podręcznej różniły się na poszczególnych urządzeniach w zależności od metody aktualizacji.

Blokowanie OTA zapewnia, że każde urządzenie używa tej samej partycji, co umożliwia używanie dm-verity do podpisywania cyfrowego partycji systemowej. Szczegółowe informacje o dm-verity znajdziesz w artykule Weryfikacja podczas uruchamiania.

Uwaga: zanim zaczniesz używać dm-verity, musisz mieć działający system blokowania OTA.

Rekomendacje

W przypadku urządzeń z Androidem 5.0 lub nowszym należy zablokować aktualizacje OTA w systemie ROM fabrycznym. Aby wygenerować OTA na podstawie bloków na potrzeby kolejnych aktualizacji, prześlij opcję --block do ota_from_target_files.

W przypadku urządzeń z Androidem 4.4 lub starszym należy używać plików aktualizacji OTA. Chociaż można przeprowadzić migrację urządzeń, wysyłając pełny blok OTA Androida 5.0 lub nowszego, wymaga to wysłania pełnego OTA, który jest znacznie większy niż przyrostowy OTA (dlatego nie jest zalecany).

Funkcja dm-verity wymaga obsługi przez bootloader, która jest dostępna tylko na nowych urządzeniach z Androidem 5.0 lub nowszym, dlatego nie można włączyć dm-verity na istniejących urządzeniach.

Deweloperzy pracujący nad systemem OTA Androida (obrazu odzyskiwania i skryptów, które generują OTA) mogą śledzić zmiany, zapisując się na listę mailingową android-ota@googlegroups.com.

Przesyłanie i blokowanie OTA

Podczas aktualizacji OTA opartej na plikach Android próbuje zmienić zawartość partycji systemowej na poziomie systemu plików (w poszczególnych plikach). Nie ma gwarancji, że aktualizacja zapisze pliki w uporządkowanym porządku, będzie mieć spójny czas ostatniej modyfikacji lub superbloku albo nawet umieści bloki w tej samej lokalizacji na urządzeniu blokowym. Z tego powodu aktualizacje OTA oparte na plikach nie działają na urządzeniu z włączoną funkcją weryfikacji DM. Po próbie aktualizacji OTA urządzenie nie uruchamia się.

Podczas aktualizacji OTA na podstawie bloków Android wysyła na urządzenie różnicę między dwoma obrazami bloków (a nie 2 zbiorami plików). Aktualizacja sprawdza kompilację urządzenia na odpowiednim serwerze kompilacji na poziomie bloku (poniżej systemu plików) za pomocą jednej z tych metod:

  • Pełna aktualizacja. Kopiowanie pełnego obrazu systemu jest proste i ułatwia tworzenie poprawek, ale powoduje też generowanie dużych obrazów, co może wiązać się z wysokimi kosztami wdrażania poprawek.
  • Aktualizacja przyrostowa. Korzystanie z narzędzi do porównywania binarnych generuje mniejsze obrazy i ułatwia stosowanie poprawek, ale wymaga dużej ilości pamięci podczas generowania samej poprawki.

Uwaga:adb fastboot umieszcza na urządzeniu te same bity co pełna aktualizacja OTA, więc flashowanie jest zgodne z blokową aktualizacją OTA.

Aktualizowanie niezmodyfikowanych systemów

W przypadku urządzeń z niezmodyfikowanymi partycjami systemowymi z Androidem 5.0 proces pobierania i instalacji bloku OTA jest taki sam jak w przypadku pliku OTA. Jednak sama aktualizacja OTA może zawierać jedną lub więcej z tych różnic:

  • Rozmiar pliku do pobrania.

    Całkowite aktualizacje OTA bloku mają mniej więcej taki sam rozmiar jak pełne aktualizacje OTA plików, a aktualizacje przyrostowe mogą być tylko o kilka megabajtów większe.

    porównanie rozmiarów OTA

    Rysunek 1. Porównaj rozmiary aktualizacji OTA na Nexusa 6 w wersjach Androida 5.0 i 5.1 (różne zmiany w kompilacji docelowej)

    Ogólnie przyrostowe aktualizacje OTA bloków są większe niż przyrostowe aktualizacje OTA plików z tych powodów:

    • Zachowowanie danych. OTA oparte na blokach zachowują więcej danych (metadanych pliku, danych dm-verity, układu ext4 itp.) niż OTA oparte na plikach.
    • Różnice w algorytmachach obliczeniowych. W przypadku aktualizacji OTA pliku, jeśli ścieżka pliku jest identyczna w obu wersjach, pakiet OTA nie zawiera danych tego pliku. W przypadku aktualizacji OTA bloku określenie, czy w pliku zaszły niewielkie zmiany lub w ogóle ich nie było, zależy od jakości algorytmu obliczania poprawki i układu danych pliku w systemie źródłowym i docelowym.
  • Wrażliwość na wadliwą pamięć RAM i lampę błyskową. Jeśli plik jest uszkodzony, OTA pliku zakończy się powodzeniem, o ile nie dotknie uszkodzonego pliku, ale OTA bloku zakończy się niepowodzeniem, jeśli wykryje jakiekolwiek uszkodzenie na partycji systemowej.

Aktualizowanie zmodyfikowanych systemów

Na urządzeniach z zmodyfikowanymi partycjami systemowymi z Androidem 5.0:

  • Nie udaje się przeprowadzić aktualizacji OTA bloku cząstkowego. Partycja systemowa może zostać zmodyfikowana podczas adb remount lub w wyniku działania złośliwego oprogramowania. OTA plików toleruje pewne zmiany w partycji, takie jak dodawanie plików, które nie są częścią kompilacji źródłowej ani docelowej. Jednak blokada OTA nie pozwala na dodawanie elementów do partycji, więc użytkownicy będą musieli zainstalować pełną aktualizację OTA, która nadpisze wszelkie modyfikacje partycji systemowej, lub wgrać nowy obraz systemu, aby umożliwić przyszłe aktualizacje OTA.
  • Próby zmiany zmodyfikowanych plików powodują niepowodzenie aktualizacji. W przypadku aktualizacji OTA pliku i bloku, jeśli OTA próbuje zmienić zmodyfikowany plik, aktualizacja OTA zakończy się niepowodzeniem.
  • Próby uzyskania dostępu do zmodyfikowanych plików powodują błędy (tylko w przypadku dm-verity). W przypadku zarówno blokowania, jak i przepuszczania aktualizacji OTA, jeśli włączona jest funkcja dm-verity, a OTA próbuje uzyskać dostęp do zmodyfikowanych części systemu plików, OTA generuje błąd.