Блокировка OTA

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

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

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

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

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

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

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

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

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

Разница между блокировкой файлов и блокировкой OTA

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

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

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

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

Обновление неизмененных систем

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

  • Размер скачиваемых файлов.

    Размер полных обновлений OTA с блокировкой примерно такой же, как и размер полных обновлений OTA с файлами, а размер инкрементных обновлений может быть всего на несколько мегабайт больше.

    сравнение размеров OTA;

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

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

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

Как обновить измененные системы

На устройствах с модифицированными системными разделами и Android 5.0:

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