OTA oparte na blokach

Możesz włączyć blokowe aktualizacje bezprzewodowe (OTA) dla nowych urządzeń z systemem Android 5.0. OTA to mechanizm, za pomocą którego producenci OEM zdalnie aktualizują partycję systemową urządzenia:

  • Wersje Androida 5.0 i nowsze korzystają z blokowych aktualizacji OTA, aby mieć pewność, że każde urządzenie korzysta z dokładnie tej samej partycji. Zamiast porównywać poszczególne pliki i obliczać łaty binarne, block OTA obsługuje całą partycję jako jeden plik i oblicza pojedynczą łatkę binarną, upewniając się, że wynikowa partycja zawiera dokładnie zamierzone bity. Dzięki temu obraz systemu urządzenia może osiągnąć ten sam stan poprzez fastboot lub OTA.
  • Android 4.4 i wcześniejsze wersje korzystały z aktualizacji plików OTA, co zapewniało, że urządzenia miały podobną zawartość plików, uprawnienia i tryby, ale pozwalało na różnice w metadanych, takich jak znaczniki czasu i układ podstawowej pamięci masowej, w zależności od metody aktualizacji.

Ponieważ blok OTA zapewnia, że ​​każde urządzenie korzysta z tej samej partycji, umożliwia użycie dm-verity do kryptograficznego podpisania partycji systemowej. Aby uzyskać szczegółowe informacje na temat dm-verity, zobacz Verified Boot .

Uwaga: przed użyciem dm-verity musisz mieć działający system OTA.

Zalecenia

W przypadku urządzeń uruchamianych z systemem Android 5.0 lub nowszym użyj blokowych aktualizacji OTA w fabrycznej pamięci ROM. Aby wygenerować OTA oparte na blokach dla kolejnych aktualizacji, przekaż opcję --block do ota_from_target_files .

W przypadku urządzeń z systemem Android 4.4 lub starszym użyj aktualizacji plików OTA. Chociaż możliwe jest przeniesienie urządzeń poprzez wysłanie pełnego bloku OTA systemu Android 5.0 lub nowszego, wymaga to wysłania pełnego OTA, które jest znacznie większe niż przyrostowe OTA (i dlatego jest odradzane).

Ponieważ dm-verity wymaga obsługi programu ładującego, który jest dostępny tylko w nowych urządzeniach dostarczanych z systemem Android 5.0 lub nowszym, nie można włączyć dm-verity dla istniejących urządzeń.

Programiści pracujący nad systemem Android OTA (obraz odzyskiwania i skrypty generujące OTA) mogą być na bieżąco ze zmianami, subskrybując listę mailingową android-ota@googlegroups.com .

Plikowe a blokowe OTA

Podczas OTA opartego na plikach system Android próbuje zmienić zawartość partycji systemowej w warstwie systemu plików (plik po pliku). Aktualizacja nie gwarantuje zapisu plików w spójnej kolejności, spójnego czasu ostatniej modyfikacji lub superbloku, a nawet umieszczenia bloków w tym samym miejscu na urządzeniu blokowym. Z tego powodu OTA oparte na plikach nie działają na urządzeniu obsługującym dm-verity; po próbie OTA urządzenie nie uruchamia się.

Podczas OTA opartego na blokach system Android udostępnia urządzeniu różnicę między dwoma obrazami blokowymi (a nie dwoma zestawami plików). Aktualizacja sprawdza kompilację urządzenia względem odpowiedniego serwera kompilacji na poziomie bloku (poniżej systemu plików) przy użyciu jednej z następujących metod:

  • Pełna aktualizacja . Kopiowanie pełnego obrazu systemu jest proste i ułatwia generowanie poprawek, ale generuje także duże obrazy, które mogą sprawić, że stosowanie poprawek będzie kosztowne.
  • Aktualizacja przyrostowa . Użycie narzędzia binarnego różnicowania generuje mniejsze obrazy i ułatwia aplikację łatki, ale podczas generowania łatki zajmuje dużo pamięci.

Uwaga: adb fastboot umieszcza dokładnie te same bity na urządzeniu, co pełne OTA, więc flashowanie jest kompatybilne z blokowym OTA.

Zaktualizuj niezmodyfikowane systemy

W przypadku urządzeń z niezmodyfikowanymi partycjami systemowymi z systemem Android 5.0 proces pobierania i instalacji w przypadku blokowego OTA pozostaje taki sam, jak w przypadku pliku OTA. Jednak sama aktualizacja OTA może zawierać jedną lub więcej z następujących różnic:

  • Pobierz rozmiar . Pełne blokowe aktualizacje OTA mają w przybliżeniu ten sam rozmiar, co pełne aktualizacje OTA w formacie pliku, a aktualizacje przyrostowe mogą być tylko o kilka megabajtów większe.

    porównanie rozmiarów OTA

    Rysunek 1. Porównanie rozmiarów OTA Nexusa 6 w wersjach Androida 5.0 i Androida 5.1 (różne zmiany w kompilacji docelowej)

    Ogólnie rzecz biorąc, przyrostowe aktualizacje blokowe OTA są większe niż przyrostowe aktualizacje OTA plików z powodu:

    • Ochrona danych . OTA oparte na blokach zachowują więcej danych (metadane plików, dane dm-verity, układ ext4 itp.) niż OTA oparte na plikach.
    • Różnice w algorytmach obliczeniowych . Jeśli w przypadku aktualizacji pliku OTA ścieżka pliku jest identyczna w obu kompilacjach, pakiet OTA nie zawiera danych dla tego pliku. W blokowej aktualizacji OTA określenie niewielkich lub żadnych zmian w pliku zależy od jakości algorytmu obliczania poprawek i układu danych pliku zarówno w systemie źródłowym, jak i docelowym.
  • Wrażliwość na wadliwą pamięć flash i pamięć RAM . Jeśli plik jest uszkodzony, OTA pliku powiedzie się, o ile nie dotknie uszkodzonego pliku, ale blokowe OTA zakończy się niepowodzeniem, jeśli wykryje jakiekolwiek uszkodzenie na partycji systemowej.

Zaktualizuj zmodyfikowane systemy

W przypadku urządzeń ze zmodyfikowanymi partycjami systemowymi z systemem Android 5.0:

  • Przyrostowe aktualizacje blokowe OTA nie powiodły się . Partycja systemowa może zostać zmodyfikowana podczas adb remount lub w wyniku złośliwego oprogramowania. Plik OTA toleruje pewne zmiany w partycji, takie jak dodanie plików, które nie są częścią kompilacji źródłowej lub docelowej. Jednak blok OTA nie toleruje dodatków do partycji, więc użytkownicy będą musieli zainstalować pełne OTA nadpisujące wszelkie modyfikacje partycji systemowej) lub flashować nowy obraz systemu, aby umożliwić przyszłe OTA.
  • Próby zmiany zmodyfikowanych plików powodują niepowodzenie aktualizacji . Zarówno w przypadku aktualizacji plików, jak i bloków OTA, jeśli OTA spróbuje zmienić zmodyfikowany plik, aktualizacja OTA zakończy się niepowodzeniem.
  • Próby dostępu do zmodyfikowanych plików generują błędy (tylko dm-verity) . Zarówno w przypadku aktualizacji plików, jak i bloków OTA, jeśli włączona jest funkcja dm-verity, a OTA próbuje uzyskać dostęp do zmodyfikowanych części systemowego systemu plików, OTA generuje błąd.