OTA на основе блоков

Вы можете включить блочные обновления по беспроводной сети (OTA) для новых устройств под управлением Android 5.0. OTA — это механизм, с помощью которого OEM-производители удаленно обновляют системный раздел устройства:

  • Android 5.0 и более поздние версии используют блокировку OTA-обновлений, чтобы гарантировать, что каждое устройство использует один и тот же раздел. Вместо сравнения отдельных файлов и вычисления двоичных исправлений, блок OTA обрабатывает весь раздел как один файл и вычисляет один двоичный патч, гарантируя, что результирующий раздел содержит именно нужные биты. Это позволяет образу системы устройства достичь того же состояния через быструю загрузку или OTA.
  • Android 4.4 и более ранние версии использовали OTA-обновления файлов, что гарантировало, что устройства будут иметь одинаковое содержимое файлов, разрешения и режимы, но позволяло метаданным, таким как временные метки и структуру базового хранилища, различаться между устройствами в зависимости от метода обновления.

Поскольку блок OTA гарантирует, что каждое устройство использует один и тот же раздел, он позволяет использовать dm-verity для криптографической подписи системного раздела. Подробности о dm-verity см. в разделе «Проверенная загрузка» .

Примечание. Перед использованием dm-verity у вас должна быть работающая блочная система OTA.

Рекомендации

Для устройств, запускаемых с Android 5.0 или более поздней версии, используйте блокировку OTA-обновлений в заводском ПЗУ. Чтобы создать OTA на основе блоков для последующих обновлений, передайте параметр --block в ota_from_target_files .

Для устройств, выпущенных с Android 4.4 или более ранней версии, используйте файловые OTA-обновления. Хотя переход между устройствами возможен путем отправки полного блока OTA Android 5.0 или более поздней версии, для этого требуется отправка полного OTA, размер которого значительно больше, чем инкрементный OTA (и поэтому не рекомендуется).

Поскольку для dm-verity требуется поддержка загрузчика, которая имеется только на новых устройствах, поставляемых с Android 5.0 или более поздней версии, вы не можете включить dm-verity для существующих устройств.

Разработчики, работающие над системой Android OTA (образ восстановления и сценарии, генерирующие OTA), могут быть в курсе изменений, подписавшись на список рассылки android-ota@googlegroups.com .

Файловые и блочные OTA

Во время OTA на основе файлов Android пытается изменить содержимое системного раздела на уровне файловой системы (пофайлово). Обновление не гарантирует запись файлов в согласованном порядке, постоянное время последнего изменения или суперблок или даже размещение блоков в одном и том же месте на блочном устройстве. По этой причине OTA на основе файлов не работают на устройствах с поддержкой dm-verity; после попытки ОТА устройство не загружается.

Во время OTA на основе блоков Android передает устройству разницу между двумя изображениями блоков (а не двумя наборами файлов). Обновление проверяет сборку устройства на соответствующем сервере сборки на уровне блоков (ниже файловой системы) с помощью одного из следующих методов:

  • Полное обновление . Копирование полного образа системы является простым и упрощает создание исправлений, но при этом создаются большие образы, что может сделать применение исправлений дорогостоящим.
  • Инкрементальное обновление . Использование инструмента двоичного различия позволяет генерировать изображения меньшего размера и упрощает применение исправлений, но при создании самого исправления требуется много памяти.

Примечание: adb fastboot размещает на устройстве те же биты, что и полный OTA, поэтому прошивка совместима с блочным OTA.

Обновить немодифицированные системы

Для устройств с неизмененными системными разделами под управлением Android 5.0 процесс загрузки и установки блочного OTA остается таким же, как и файлового OTA. Однако само обновление OTA может включать одно или несколько из следующих отличий:

  • Размер загрузки . Полноблочные OTA-обновления имеют примерно тот же размер, что и полные файловые OTA-обновления, а дополнительные обновления могут быть всего на несколько мегабайт больше.

    сравнение размеров ОТА

    Рис. 1. Сравните размеры Nexus 6 OTA в версиях Android 5.0 и Android 5.1 (различные изменения целевой сборки)

    Как правило, инкрементные блочные OTA-обновления больше, чем инкрементные файловые OTA-обновления, из-за:

    • Сохранение данных . OTA на основе блоков сохраняют больше данных (метаданные файлов, данные dm-verity, макет ext4 и т. д.), чем OTA на основе файлов.
    • Различия в алгоритмах вычислений . Если при обновлении файла OTA путь к файлу идентичен в обеих сборках, пакет OTA не содержит данных для этого файла. При блочном OTA-обновлении определение незначительных изменений или отсутствие изменений в файле зависит от качества алгоритма расчета исправлений и расположения данных файла как в исходной, так и в целевой системе.
  • Чувствительность к неисправной флэш-памяти и оперативной памяти . Если файл поврежден, файловый OTA завершается успешно, пока он не затрагивает поврежденный файл, но блочный OTA завершается неудачей, если обнаруживается какое-либо повреждение в системном разделе.

Обновление модифицированных систем

Для устройств с измененными системными разделами под управлением Android 5.0:

  • Инкрементные блочные обновления OTA не работают . Системный раздел может быть изменен во время adb remount или в результате воздействия вредоносного ПО. Файл OTA допускает некоторые изменения в разделе, например добавление файлов, которые не являются частью исходной или целевой сборки. Однако блочный OTA не допускает добавления в раздел, поэтому пользователям необходимо будет установить полный OTA, перезаписывая любые изменения системного раздела), или прошить новый образ системы, чтобы включить будущие OTA.
  • Попытки изменить измененные файлы приводят к сбою обновления . Как для файловых, так и для блочных обновлений OTA: если OTA пытается изменить файл, который был изменен, обновление OTA завершается неудачно.
  • Попытки доступа к измененным файлам приводят к ошибкам (только dm-verity) . Как для файловых, так и для блочных обновлений OTA, если включена функция dm-verity и OTA пытается получить доступ к измененным частям системной файловой системы, OTA генерирует ошибку.