Обзор ядра

Ядро Android основано на исходном ядре Linux с долгосрочной поддержкой (LTS), которое можно найти по адресу . В Google ядра LTS объединяются с исправлениями для Android, чтобы сформировать так называемые общие ядра Android (ACK) .

Более новые ACK (версия 5.4 и выше) также известны как ядра GKI , поскольку они поддерживают разделение аппаратно-независимого кода Generic Core Kernel и аппаратно-независимых модулей GKI . Ядро GKI взаимодействует с модулями аппаратных поставщиков, содержащими систему на кристалле (SoC) и код, специфичный для платы. Взаимодействие между ядром GKI и модулями поставщиков обеспечивается интерфейсом модулей ядра (KMI) , состоящим из списков символов, идентифицирующих функции и глобальные данные, требуемые модулями поставщиков. На рис. 1 показана архитектура ядра GKI и модуля поставщика: Ядро GKI и архитектура модуля поставщика

Рис. 1. Архитектура ядра GKI и модуля поставщика

Глоссарий ядра

Этот раздел содержит термины, используемые в документации ядра.

Типы ядра

Общее ядро ​​Android (ACK)
Ядро, которое является нижестоящим по течению от ядра LTS и включает исправления, представляющие интерес для сообщества Android, которые не были объединены в основную линейку Linux или ядра с долгосрочной поддержкой (LTS). Более новые ACK (версия 5.4 и выше) также известны как ядра GKI, поскольку они поддерживают разделение аппаратно-независимого кода Generic Kernel и аппаратно-независимых модулей GKI.
Ядро проекта Android с открытым исходным кодом (AOSP)
См. Общее ядро ​​Android.
Ядро функции
Ядро, для которого гарантированно реализованы функции релиза платформы. Например, в Android 12 двумя ядрами функций были android12-5.4 и android12-5.10. Функции Android 12 нельзя перенести на ядра 4.19; набор функций будет аналогичен устройству, запущенному с 4.19 на R и обновленному до S).
общее основное ядро
Часть ядра GKI , общая для всех устройств.
Ядро общего образа ядра (GKI)
Любое более новое (5.4 и выше) ядро ​​ACK (в настоящее время только aarch64). Это ядро ​​состоит из двух частей: основного ядра GKI с кодом, общим для всех устройств, и модулей ядра GKI, разработанных Google, которые можно динамически загружать на устройства, где это применимо.
Ядро интерфейса модуля ядра (KMI)
См. Ядро GKI .
Запустить ядро
Ядро, подходящее для запуска устройства для данной версии платформы Android. Например, в Android 12 допустимыми ядрами запуска были 4.19, 5.4 и 5.10.
Ядро с долгосрочной поддержкой (LTS)
Ядро Linux с поддержкой от 2 до 6 лет. Ядра LTS выпускаются один раз в год и являются основой для каждого из ACK Google.

Типы филиалов

Ветвь ядра ACK KMI
Ветвь, для которой собираются ядра GKI . Например, android12-5.10 и android13-5.15.
Android-магистраль
Основная ветвь разработки для функций Android. Когда новое ядро ​​LTS объявляется вышестоящим, соответствующее новое ядро ​​GKI является ответвлением от android-mainline.
Основная линия Linux
Основная ветвь разработки для исходных ядер Linux, включая ядра LTS.

Другие условия

Сертифицированный загрузочный образ
Ядро поставил в бинарном виде ( boot.img ) и прошил на устройство. Этот образ сертифицирован в том смысле, что он содержит встроенные сертификаты, поэтому Google может убедиться, что устройство поставляется с ядром, сертифицированным Google.
Динамически загружаемый модуль ядра (DLKM)
Модуль, который может динамически загружаться во время загрузки устройства в зависимости от потребностей устройства. Модули GKI и поставщиков являются типами DLKM. DLKM выпускаются в .ko и могут быть драйверами или предоставлять другие функции ядра.
проект ГКИ
Проект Google, направленный на решение проблемы фрагментации ядра путем разделения общей функциональности ядра от специфичной для поставщика SoC и поддержки платы на загружаемые модули.
Общий образ ядра (GKI)
Загрузочный образ, сертифицированный Google, который содержит ядро ​​GKI, созданное из исходного дерева ACK , и подходит для прошивки в загрузочный раздел устройства Android.
КМИ
Интерфейс между ядром GKI и модулями поставщиков, позволяющий обновлять модули поставщиков независимо от ядра GKI. Этот интерфейс состоит из функций ядра и глобальных данных, которые были идентифицированы как зависимости поставщика/OEM с использованием списков символов для каждого партнера.
Модуль ядра GKI
Динамически загружаемые модули, созданные Google, которые можно динамически загружать на устройства, где это применимо. Эти модули создаются вместе с ядром GKI и поставляются вместе с GKI в виде образа system_dlkm . Модули ядра GKI подписываются Google с помощью пары ключей времени сборки ядра и совместимы только с общим ядром, с которым они созданы. Модули ядра GKI представляют собой тип ДЛКМ
.
Модуль поставщика
Аппаратно-ориентированный модуль, разработанный партнером и содержащий функциональные возможности SoC и конкретных устройств. Модуль поставщика — это тип динамически загружаемого модуля ядра.

Что дальше?

  • Если вы новичок в разработке ядра Android, вы можете начать со следующего:
  • Если вы новичок в разработке ядра GKI, начните с чтения GKI development .
  • Если вы используете версию ядра 4.19 или более раннюю и ищете соответствующую документацию, обратитесь к разделу Обзор предыдущих ядер (<=4.19) .