Жизненный цикл FCM

В выпуске платформы Android имеется несколько матриц совместимости платформы (FCM), по одной для каждой обновляемой целевой версии FCM, которые определяют, что может использовать платформа, и требования к целевой версии FCM. В рамках жизненного цикла FCM Android объявляет устаревшими и удаляет HAL HIDL, а затем изменяет файлы FCM, чтобы они отражали статус версии HAL .

Чтобы включить OTA только для платформы в своих собственных экосистемах, партнеры, которые расширяют интерфейсы поставщиков, также должны отказаться от поддержки и удалить HIDL HAL, используя те же методы.

Терминология

Матрица совместимости фреймворков (FCM)
XML-файл, в котором указаны требования к платформе для соответствующих реализаций поставщика. Матрица совместимости имеет версии, и новая версия замораживается для каждого выпуска платформы. Каждый выпуск платформы содержит несколько FCM.
Версии платформы FCM (S F )
Набор всех версий FCM в выпуске платформы. Платформа может работать с реализацией любого поставщика, которая удовлетворяет одному из этих FCM.
Версия FCM (F)
Самая высокая версия среди всех FCM в выпуске платформы.
Целевая версия FCM (V)
Целевая версия FCM (из SF ), явно объявленная в манифесте устройства, которой соответствует реализация поставщика. Реализация поставщика должна быть создана на основе опубликованного FCM, хотя она может объявлять более новые версии HAL в своем манифесте устройства.
HAL-версия
Версия HAL имеет формат foo@xy , где foo — имя HAL, а xy — конкретная версия; например, nfc@1.0 , keymaster@3.0 (корневой префикс, например android.hardware , в этом документе опущен).
Манифест устройства
XML-файлы, которые определяют, какие версии HAL предоставляет сторона устройства интерфейса поставщика, включая изображения поставщика и ODM. Содержимое манифеста устройства ограничено целевой версией устройства FCM, но может содержать список HAL, которые являются строго более новыми по отношению к FC, соответствующему V.
HAL устройства
HAL, которые перечислены (предоставлены) в манифесте устройства и перечислены в матрице совместимости платформы (FCM).
Матрица совместимости устройств (DCM)
XML-файл, в котором указаны требования поставщика к соответствующим реализациям платформы. Каждое устройство содержит один DCM.
Рамочный манифест
XML-файл, указывающий, какие версии HAL предоставляет сторона интерфейса поставщика, включая system, system_ext и образы продуктов. HAL в манифесте платформы динамически отключаются в соответствии с целевой версией FCM устройства.
HAL-фреймворки
HAL, указанные в манифесте платформы и в матрице совместимости устройств (DCM).

Жизненный цикл FCM в базе кода

В этом документе абстрактно описан жизненный цикл FCM. Чтобы просмотреть поддерживаемые манифесты, обратитесь к hardware/interfaces/compatibility_matrix.<FCM>.xml , где FCM можно найти в system/libvintf/include/vintf/Level.h .

Ожидается, что устройство, поставляющее соответствующую версию Android, будет иметь значение FCM, большее или равное эквивалентному уровню. Например, устройство, поставляемое с Android 11, обычно имеет уровень FCM 5, но реализует уровень FCM 6 или выше, что сопровождается различными дополнительными требованиями, указанными в матрицах совместимости. Поддерживаемые уровни:

ФКМ Версия Android
4 Андроид 10/Q
5 Андроид 11/Р
6 Андроид 12/С
7 Андроид 13/Т
8 Андроид 14/U
202404 Андроид 15/В

Уровень FCM равен уровню API поставщика или новее.

Когда Android прекращает поддержку уровня FCM, он по-прежнему поддерживается для существующих устройств. Устройствам, ориентированным на более низкие уровни FCM, неявно разрешено использовать HAL, перечисленные в более новых уровнях FCM, если они доступны в ветке.

Разработка в новой версии FCM

Android увеличивает версию FCM для каждой версии платформы (например, Android 8 и 8.1). Во время разработки создается новый файл compatibility_matrix.F.xml , а существующий compatibility_matrix.f.xml (где f < F ) больше не изменяется.

Чтобы начать разработку в новой версии FCM F :

  1. Скопируйте последнюю версию compatibility_matrix.<F-1>.xml в compatibility_matrix.F.xml .
  2. Обновите атрибут level в файле до F
  3. Добавьте соответствующие правила сборки, чтобы установить эту матрицу совместимости на устройство.

Представляем новый HAL

Во время разработки при внедрении нового HAL (Wi-Fi, NFC и т. д.) в Android в текущей версии FCM F добавьте HAL в compatibility_matrix.F.xml .

Например, в Android 8.1 появился cas@1.0 . Устройства, запускаемые с Android 8.1, могут реализовать этот HAL, поэтому в compatibility_matrix.F.xml (который во время разработки этой версии временно назывался compatibility_matrix.current.xml ) была добавлена ​​следующая запись:

<hal format="hidl">
    <name>android.hardware.cas</name>
    <version>1.0</version>
    <interface>
        <name>IMediaCasService</name>
        <instance>default</instance>
    </interface>
</hal>

Обновление HAL (второстепенное)

Версии AIDL HAL считаются второстепенными версиями HAL. Версии интерфейса HIDL имеют major . minor версии, такие как 1.2 .

Во время разработки, когда AIDL HAL имеет обновление версии с 2 до 3 в текущей версии FCM F , новая версия добавляется к записи HAL в compatibility_matrix.F.xml . Поле версии записи HAL принимает диапазоны вроде 2-3 .

Например, в Android FCM F foo@3 представлен как второстепенное обновление версии HAL. Старая версия, foo@2 , используется для устройств, ориентированных на старые FCM, а более новая версия, foo@3 , может использоваться для устройств, ориентированных на Android FCM F Запись в старых FCM до версии 2 выглядела так:

<hal format="aidl">
    <name>foo</name>
    <version>2</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

Эта запись была скопирована в файл compatibility_matrix.F.xml и изменена для поддержки версии 3 следующим образом:

<hal format="aidl">
    <name>foo</name>
    <version>2-3</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

Обновление HAL (основное)

Во время разработки, когда HAL имеет обновление основной версии до текущей версии FCM F , новая основная версия x.0 добавляется в compatibility_matrix.F.xml со следующими настройками:

  • Только версия x.0 , если устройства, поставляемые с V = F должны запускаться с x.0 .
  • Со старыми основными версиями в том же теге <hal> , если устройства, поставляемые с V = F могут запускаться с более старой основной версией.

Например, версия F FCM представляет foo@2.0 как обновление основной версии HAL 1.0 и объявляет устаревшей HAL 1.0. Старая версия foo@1.0 используется для устройств, предназначенных для предыдущих версий FCM. Устройства, предназначенные для FCM версии F должны предоставить новую версию 2.0, если они предоставляют HAL. В этом примере предыдущие версии FCM содержат следующую запись:

<hal format="hidl">
    <name>foo</name>
    <version>1.0</version>;
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

Скопируйте эту запись в compatibility_matrix.F.xml и измените следующим образом:

<hal format="hidl">
    <name>foo</name>
    <version>2.0</version>
    <interface>
        <name>IFoo</name>
        <instance>default</instance>
    </interface>
</hal>

Ограничения:

  • Поскольку HAL 1.0 отсутствует в compatibility_matrix.F.xml , устройства, предназначенные для FCM версии F не должны предоставлять HAL 1.0 (поскольку этот HAL считается устаревшим).
  • Поскольку HAL 1.0 присутствует в более старых версиях FCM, платформа по-прежнему может работать с HAL 1.0, поэтому она обратно совместима со старыми устройствами, предназначенными для более старых версий FCM.

Новые версии FCM

Процесс выпуска версии FCM в системном разделе выполняется исключительно Google как часть выпуска AOSP и включает следующие шаги:

  1. Убедитесь, что compatibility_matrix.F.xml имеет атрибут level="F" .
  2. Убедитесь, что все устройства собраны и загружены.
  3. Обновите тесты VTS , чтобы гарантировать, что устройства, запускаемые с последней платформой (на основе уровня API доставки), имеют целевую версию FCM V >= F .
  4. Опубликовать файл в AOSP.

Например, тесты VTS гарантируют, что устройства, запускаемые с Android 9, имеют целевую версию FCM >= 3.

Кроме того, FCM продукта и system_ext также могут перечислять требования для версий FCM каждой платформы. Выпуск версий FCM на разделах product и system_ext осуществляет владелец этих образов соответственно. Номера версий FCM в разделах продукта и system_ext должны совпадать с номерами версий в системном разделе. Подобно версиям FCM в системном разделе, матрица совместимости FCM версии F в разделах product и system_ext отражает требования к устройству с целевой версией FCM F.

Устаревшая версия HAL

Отказ от версии HAL является решением разработчика (т. е. для версий HAL AOSP решение принимает Google). Это может произойти при выпуске более высокой версии HAL (второстепенной или основной).

Устареть HAL устройства

Когда данное устройство HAL foo@xy устарело в FCM версии F , это означает, что любое устройство, запускаемое с целевой версией FCM V = F или более поздней, не должно реализовывать foo в версии xy или любой версии старше xy . Устаревшая версия HAL по-прежнему поддерживается платформой обновления устройств.

При выпуске FCM версии F версия HAL foo@xy считается устаревшей, если конкретная версия HAL не указана явно в последнем FCM для целевой версии FCM V = F . Для устройств, запускающихся с V = F , справедливо одно из следующих условий:

  • Для платформы требуется более высокая версия (основная или дополнительная);
  • Фреймворк больше не требует HAL.

Например, в Android 9 health@2.0 представлен как основное обновление версии 1.0 HAL. health@1.0 удален из compatibility_matrix.3.xml но присутствует в compatibility_matrix.legacy.xml , compatibility_matrix.1.xml и совместимости_matrix.2.xml . Следовательно, health@1.0 считается устаревшим.

Устареть фреймворком HAL

Когда данная платформа HAL foo@xy устарела в FCM версии F , это означает, что любое устройство, запускаемое с целевой версией FCM V = F или более поздней версии, не должно ожидать, что платформа предоставит foo версии xy или любой версии старше xy . Устаревшая версия HAL по-прежнему предоставляется платформой для обновления устройств.

Когда выпускается версия FCM F , версия HAL foo@xy считается устаревшей, если в манифесте платформы указано max-level=" F - 1 " для foo@xy . Для устройств, запускаемых с V = F , платформа не предоставляет HAL foo@xy . Матрица совместимости устройств на устройствах, запускаемых с V = F не должна содержать HAL платформы с max-level < V .

Например, в Android 12 schedulerservice@1.0 устарел. Для его атрибута max-level установлено значение 5 — версия FCM, представленная в Android 11. См. манифест платформы Android 12 .

Удаление поддержки целевых версий FCM.

Когда активные устройства определенной целевой версии FCM V падают ниже определенного порога, целевая версия FCM удаляется из набора SF следующего выпуска платформы. Это делается с помощью обоих следующих шагов:

  1. Удаление compatibility_matrix.V.xml из правил сборки (чтобы он не устанавливался в образе системы) и удаление любого кода, который реализовал удаленные возможности или зависел от них.

  2. Удаление HAL платформы с max-level ниже или равным V из манифеста платформы, а также удаление любого кода, реализующего удаленные HAL платформы.

Устройства с целевой версией FCM за пределами SF для данного выпуска платформы не могут обновиться до этого выпуска.

Статус версии HAL

В следующих разделах описываются (в хронологическом порядке) возможные состояния версии HAL.

Неизданный

Для HAL устройств, если версия HAL отсутствует ни в одной из общедоступных и замороженных матриц совместимости, она считается невыпущенной и, возможно, находится в разработке. Сюда входят версии HAL, которые есть только в compatibility_matrix.F.xml . Примеры:

  • Во время разработки Android 9 HAL health@2.0 считался невыпущенным HAL и присутствовал только в compatibility_matrix.3.xml .
  • HAL teleportation@1.0 отсутствует ни в одной из выпущенных матриц совместимости, а также считается невыпущенным HAL.

Для HAL платформы, если версия HAL присутствует только в манифесте платформы несвязанной ветки разработки, она считается невыпущенной.

Выпущено и актуально

Для HAL устройств, если версия HAL находится в какой-либо общедоступной и замороженной матрице совместимости, она выпускается. Например, после того, как версия FCM 3 заморожена и опубликована в AOSP, HAL health@2.0 считается выпущенной и текущей версией HAL.

Если версия HAL находится в общедоступной и замороженной матрице совместимости с самой высокой версией FCM, версия HAL является текущей (т. е. не устарела). Например, существующие версии HAL (например, nfc@1.0 , представленные в compatibility_matrix.legacy.xml ), которые продолжают существовать в compatibility_matrix.3.xml также считаются выпущенными и текущими версиями HAL.

Для HAL платформы, если версия HAL находится в манифесте платформы последней выпущенной ветки без атрибута max-level или (что необычно) с max-level равным или выше версии FCM, выпущенной в этой ветке, она считается выпущенной и текущей версией HAL. Например, displayservice HAL выпущен и актуален в Android 12, как указано в манифесте платформы Android 12 .

Выпущен, но устарел

Для HAL устройств версия HAL считается устаревшей тогда и только тогда, когда выполняются все следующие условия:

  • Он выпущен.
  • В общедоступной и замороженной матрице совместимости нет самой высокой версии FCM.
  • Фреймворк все еще поддерживает общедоступную и замороженную матрицу совместимости.

Примеры:

Следовательно, power@1.0 является текущим, но НЕ устаревшим в Android 9.

Для HAL платформы, если версия HAL находится в манифесте платформы последней выпущенной ветки с атрибутом max-level ниже, чем версия версии FCM в этой ветке, она считается выпущенной, но устаревшей версией HAL. Например, schedulerservice HAL выпущена, но устарела в Android 12, как указано в манифесте платформы Android 12 .

Удаленный

Для HAL устройства версия HAL удаляется тогда и только тогда, когда выполняются следующие условия:

  • Ранее оно было выпущено.
  • Платформа не поддерживает ни одну общедоступную и замороженную матрицу совместимости.

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

Для HAL платформы версия HAL удаляется тогда и только тогда, когда выполняются следующие условия:

  • Он был выпущен ранее.
  • Его нет ни в одном манифесте фреймворка последней выпущенной ветки.

Устаревшие FCM

Унаследованная целевая версия FCM представляет собой особую ценность для всех устройств, отличных от Treble. Устаревший FCM, compatibility_matrix.legacy.xml , перечисляет требования платформы для устаревших устройств (т. е. устройств, выпущенных до Android 8.0).

Если этот файл существует для FCM с версией F , любое устройство, отличное от Treble, может быть обновлено до F при условии, что его манифест устройства совместим с этим файлом. Его удаление выполняется по той же процедуре, что и FCM для других целевых версий FCM (удаляется после того, как количество активных устройств до 8.0 падает ниже определенного порога).

Выпущенные версии FCM

Список выпущенных версий FCM можно найти в разделе hardware/interfaces/compatibility_matrices .

Чтобы найти версию FCM, выпущенную для конкретной версии Android, см. Level.h .