Разработка манифеста устройства

При разработке и выпуске новых устройств поставщики могут определить и объявить целевую версию FCM в манифесте устройства (DM). При обновлении образа поставщика для старых устройств поставщики могут реализовать новые версии HAL и увеличить целевую версию FCM.

Разработка новых устройств

При определении целевой версии FCM устройства для новых устройств:

  1. Оставьте DEVICE_MANIFEST_FILE и PRODUCT_ENFORCE_VINTF_MANIFEST неопределенными.
  2. Реализуйте HAL для целевой версии FCM.
  3. Напишите правильный файл манифеста устройства.
  4. Запишите целевую версию FCM в файл манифеста устройства.
  5. Установите DEVICE_MANIFEST_FILE .
  6. Установите для PRODUCT_ENFORCE_VINTF_MANIFEST значение true .

Выпуск новых устройств

Когда новое устройство выпускается, его первоначальная целевая версия FCM должна быть определена и объявлена ​​в манифесте устройства как атрибут « target-level » в элементе <manifest> верхнего уровня.

Например, устройства, запускаемые с Android 9, должны иметь целевую версию FCM, равную 3 (более поздняя версия, доступная в настоящее время). Чтобы объявить это в манифесте устройства:

<manifest version="1.0" type="device" target-level="3">
    <!-- ... -->
</manifest>

Обновление образа поставщика

При обновлении образа поставщика для старого устройства поставщики могут реализовать новые версии HAL и увеличить целевую версию FCM.

Обновление HAL

Во время обновления образа поставщика поставщики могут внедрять новые версии HAL при условии, что имя HAL, имя интерфейса и имя экземпляра совпадают. Например:

  • Устройства Google Pixel 2 и Pixel 2 XL, выпущенные с Target FCM версии 2, в которой реализован необходимый звук 2.0 HAL android.hardware.audio@2.0::IDeviceFactory/default .
  • Для аудио 4.0 HAL, выпущенного с Android 9, устройства Google Pixel 2 и Pixel 2 XL могут использовать полный OTA для обновления до 4.0 HAL, который реализует android.hardware.audio@4.0::IDeviceFactory/default .
  • Несмотря на то, что в compatibility_matrix.2.xml указано только аудио 2.0, требование к образу поставщика с Target FCM Version 2 было ослаблено, поскольку платформа Android 9 (FCM Version 3) рассматривает аудио 4.0 как замену аудио 2.0 HAL с точки зрения функциональности. .

Подводя итог, учитывая, что для compatibility_matrix.2.xml требуется аудио 2.0, а для compatibility_matrix.3.xml требуется аудио 4.0, требования следующие:

Версия FCM (Система) Целевая версия FCM (поставщик) Требования
2 (8,1) 2 (8,1) Аудио 2.0
3 (9) 2 (8,1) Аудио 2.0 или 4.0
3 (9) 3 (9) Аудио 4.0

Обновление целевой версии FCM

Во время обновления образа поставщика поставщики также могут увеличить целевую версию FCM, чтобы указать целевую версию FCM, с которой может работать обновленный образ поставщика. Чтобы изменить целевую версию FCM устройства, поставщики должны:

  1. Реализуйте все новые требуемые версии HAL для целевой версии FCM.
  2. Измените версии HAL в файле манифеста устройства.
  3. Измените целевую версию FCM в файле манифеста устройства.
  4. Удалите устаревшие версии HAL.

Например, устройства Google Pixel и Pixel XL запущены с Android 7.0, поэтому их целевая версия FCM должна быть как минимум устаревшей. Однако манифест устройства объявляет целевую версию FCM 2, поскольку образ поставщика был обновлен в соответствии с compatibility_matrix.2.xml :

<manifest version="1.0" type="device" target-level="2">

Если поставщики не реализуют все необходимые новые версии HAL или не удаляют устаревшие версии HAL, целевая версия FCM не может быть обновлена.

Например, устройства Google Pixel 2 и Pixel 2 XL имеют Target FCM версии 2. Хотя они реализуют некоторые HAL, требуемые compatibility_matrix.3.xml (например, аудио 4.0, здоровье 2.0 и т. д.), они не удаляют android.hardware.radio.deprecated@1.0 . android.hardware.radio.deprecated@1.0 , который устарел в FCM версии 3 (Android 9). Следовательно, эти устройства не могут обновить целевую версию FCM до 3.

Обязательные требования к ядру во время OTA

Обновление устройств с Android 9 или ниже

На устройствах с Android 9 или более ранней версии убедитесь, что выбраны следующие CL:

Эти изменения вводят флаг сборки PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS и не устанавливают флаг для устройств, запущенных с Android 9 или более ранней версией.

  • При обновлении до Android 10 клиенты OTA на устройствах под управлением Android 9 или более ранней версии неправильно проверяют требования ядра в пакете OTA. Эти изменения необходимы для исключения требований ядра из сгенерированного пакета OTA.
  • При обновлении до Android 11 необязательно устанавливать флаг сборки PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS для проверки совместимости VINTF при создании пакета обновления.

Дополнительные сведения об этом флаге сборки см. в разделе Обновление устройств с Android 10 .

Обновление устройств с Android 10

В Android 10 представлен новый флаг сборки PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS . Для устройств, запущенных с Android 10, для этого флага автоматически устанавливается значение true . Когда для флага установлено значение true , сценарий извлекает версию ядра и конфигурации ядра из установленного образа ядра.

  • При обновлении до Android 10 пакет обновления OTA содержит версию ядра и конфигурацию. Клиенты OTA на устройствах под управлением Android 10 читают эту информацию, чтобы проверить совместимость.
  • При обновлении до Android 11 генератор пакетов OTA считывает версию и конфигурацию ядра для проверки совместимости.

Если сценарию не удается извлечь эту информацию для вашего образа ядра, выполните одно из следующих действий:

  • Отредактируйте сценарий, чтобы он поддерживал формат вашего ядра и внес свой вклад в AOSP.
  • Установите BOARD_KERNEL_VERSION на версию ядра и BOARD_KERNEL_CONFIG_FILE на путь к собранному файлу конфигурации ядра .config . Обе переменные должны обновляться при обновлении образа ядра.
  • Либо установите для PRODUCT_OTA_ENFORCE_VINTF_KERNEL_REQUIREMENTS значение false , чтобы пропустить проверку требований ядра. Это не рекомендуется, поскольку любая несовместимость скрыта и обнаруживается только при запуске тестов VTS после обновления.

Вы можете просмотреть исходный код скрипта извлечения информации о ядре extract_kernel.py .