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. Если система непреднамеренно переходит в неудовлетворительное состояние, мы можем восстановить последнее известное удовлетворительное состояние.