Обновления системы A/B

SDV использует стандартный подход Android к A/B (бесшовным) обновлениям системы. Документация AOSP в основном относится к SDV. На этой странице подробно описано использование, специфичное для SDV, а также проверенные способы сборки и применения пакетов обновлений.

В настоящий момент SDV настроен на использование невиртуальных A/B-обновлений.

Реализуйте HAL управления загрузкой.

Образ SDV Core для Cuttlefish ( sdv_core_cf ) предоставляет стандартную реализацию HAL управления загрузкой, основанную на hardware/interfaces/boot/aidl/default/ . Другие загрузчики должны реализовать HAL для поддержки обновлений A/B.

Подробности см. в разделе «Реализация HAL управления загрузкой» документации AOSP. Для проверки реализации можно использовать bootctl, входящий в состав отладочных образов SDV ( eng и userdebug ).

Сгенерировать пакет OTA

Для получения дополнительной информации см.: Создание OTA-пакетов . Инструкции на этой странице соответствуют документации AOSP с небольшими отклонениями.

Полное обновление

Из корневого каталога репозитория:

source build/envsetup.sh && lunch sdv_core_cf-trunk_staging-userdebug
mkdir dist_output
m dist DIST_DIR=dist_output

Эти команды создают целевые файлы в каталоге dist_output . Для локальных сборок sdv_core_cf это обычно sdv_core_cf-target_files-$USER.zip .

Для создания OTA-пакета необходимо использовать ota_from_target_files . В отличие от AOSP, пакет не собирается как часть m dist .

m ota_from_target_files
ota_from_target_files \
  dist_output/sdv_core_cf-target_files-$USER.zip \
  ota_update.zip

Поэтапное обновление

Вызов функции ota_from_target_files аналогичен тому, что используется в AOSP :

ota_from_target_files \
  -i PREVIOUS-sdv_core_cf-target_files.zip \
  dist_new/sdv_core_cf-target_files-$USER.zip \
  incremental_ota_update.zip

Установите пакет OTA.

Обновления устанавливаются с помощью службы update_engine . Отладочные сборки SDV включают update_engine_client , который можно использовать для отладки и тестирования процесса обновления.

Для установки OTA-пакета выполните:

system/update_engine/scripts/update_device.py ota_update.zip

Если обновление установлено корректно (конечный статус — UPDATE_STATUS_UPDATED_NEED_REBOOT , а результат — ErrorCode::kSuccess ), обновление будет активировано при следующей перезагрузке.

Версионирование

Для обновления системы SDV использует метаданные OTA-пакетов Android, чтобы определить, соответствует ли OTA-пакет требованиям и может ли он быть установлен.

Также для APEX система SDV следует принципам Android в отношении возможности обновления. Поэтому APEX можно обновить, даже если он не является загрузочным APEX. Загрузочный APEX необходимо обновлять через системные обновления, и при этом должно выполняться одно из следующих действий:

  • Заявленная версия выше предустановленной, и обе больше или равны 1.

или,

  • Указанная версия не является предустановленной версией APEX и превышает версию в списке запрещенных, если таковой имеется.

SDV обычно развертывается на нескольких системах в сети. Поэтому необходимо убедиться, что обновления, внесенные в одну систему, выполняются корректно. Тем не менее, это не гарантирует корректную связь между всеми системами.

Крайне важно обновить всю сеть в целом, что требует либо одновременного развертывания обновлений пакетов служб на всех машинах, либо отсутствия в обновлениях критических изменений. Например, несовместимых изменений в интерфейсе.

Хотя SDV не предоставляет инструментов для обнаружения несовместимых изменений, наши рекомендации описывают, как согласовывать изменения, внесенные в интерфейсы, а также лучшие практики, необходимые для развертывания этих изменений.

Кроме того, SDV поддерживает механизмы отката для обновлений системы и APEX. Если система непреднамеренно переходит в неудовлетворительное состояние, мы можем восстановить последнее известное удовлетворительное состояние.