Крайне важно поддерживать стабильный KMI для модулей поставщиков. Ядро GKI собирается и поставляется в бинарном виде, а загружаемые поставщиком модули строятся в отдельном дереве. В результате ядро GKI и модули поставщика должны работать так, как если бы они были собраны вместе.
Как правило, Linux-сообщество не одобряет идею стабильности ABI в ядре для основного ядра. Перед лицом различных цепочек инструментов, конфигураций и постоянно развивающегося ядра основной ветки Linux невозможно поддерживать стабильный KMI в основной ветке. Однако можно поддерживать стабильный KMI в среде GKI с жесткими ограничениями при следующих ограничениях:
Только одна конфигурация,
gki_defconfig
, может использоваться для сборки ядра.KMI стабилен только в одной и той же версии ядра LTS и Android, например
android13-5.10
,android12-5.10
илиandroid13-5.15
.- Для
android-mainline
не поддерживается стабильность KMI.
- Для
Для сборки ядра и модулей используется только конкретная цепочка инструментов Clang , поставляемая в AOSP и определенная для соответствующей ветки.
Только известные символы, используемые модулями, как указано в списке символов, отслеживаются на предмет стабильности и считаются символами KMI.
- Следствием этого является то, что модули поставщиков должны использовать только символы KMI. Это ограничение применяется при неудачной загрузке модуля, если требуются символы, отличные от KMI.
После того, как ветвь KMI заморожена, изменения разрешены, но не могут нарушить KMI. Эти изменения включают следующее:
- Изменения конфигурации
- Изменения кода ядра
- Изменения цепочки инструментов (включая обновления)
Используйте герметичный процесс сборки и набор инструментов LLVM
Герметичный процесс сборки обеспечивает стабильный KMI, поскольку манифесты repo
в kernel/manifest
полностью описывают среду сборки. Например, манифест для android13-5.15
включает набор инструментов, сценарии сборки и все остальное, необходимое для сборки ядра Generic Kernel Image (GKI). Соответствующие файлы конфигурации build.config
, такие как конфигурация сборки GKI build.config.gki.aarch64
, обеспечивают правильное использование включенных инструментов для получения согласованных результатов сборки.
Использование герметичного процесса сборки также гарантирует согласованность описания ABI для дерева независимо от того, сгенерировано ли оно Google (например, abi_gki_aarch64.xml
для android13-5.15
или сгенерировано в локальном дереве, которое включает модули поставщиков. Инструменты для создания и сравнения Описание ABI для интерфейса модуля ядра (KMI) также предоставляется как часть репозитория, описываемого манифестом.
Цепочка инструментов, используемая для сборки ядра GKI, должна быть полностью совместима с цепочкой инструментов, используемой для сборки модулей поставщиков. Начиная с Android 10, все ядра Android должны быть собраны с помощью цепочки инструментов LLVM. При использовании GKI цепочка инструментов LLVM, используемая для создания ядер продуктов и модулей поставщиков, должна генерировать тот же ABI, что и цепочка инструментов LLVM от AOSP, а партнеры должны обеспечить совместимость KMI с ядром GKI. Настоятельно рекомендуется использовать предоставленные инструменты сборки, поскольку они обеспечивают гарантии совместимости.
Что дальше?
Инструкции по сборке ядра с использованием герметичного процесса сборки и цепочки инструментов LLVM см. в разделе Сборка ядер .
Инструкции по мониторингу ABI и устранению проблем см. в статье Мониторинг ABI ядра Android.