Обзор ядра

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

Подтверждения (ACK) формируются из репозитория kernel/mon . Этот репозиторий является надмножеством исходного ядра Linux и содержит дополнительные патчи, специфичные для Android.

Подтверждения версий 5.10 и выше также известны как *генерические образы ядра (GKI) ядра. Ядра GKI поддерживают разделение аппаратно-независимого кода ядра общего назначения и модулей GKI от аппаратно-специфических модулей от производителей .

Взаимодействие между ядром GKI и модулями сторонних производителей обеспечивается интерфейсом модулей ядра (KMI), состоящим из списков символов, определяющих функции и глобальные данные, необходимые модулям сторонних производителей. На рисунке 1 показана архитектура ядра GKI и модулей сторонних производителей:

Архитектура ядра GKI и модулей сторонних производителей.

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

Словарь терминов ядра

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

Типы ядер

Общее ядро ​​Android (ACK)
Ядро, являющееся частью репозитория ядра LTS и включающее в себя патчи, важные для сообщества Android. Эти патчи не были включены в основную ветку Linux или ядра Long Term GKI.

Ядра версий 5.10 и выше также называются ядрами Generic Kernel Image (GKI) .

Ядро Android с открытым исходным кодом (AOSP)
См. Android Common Kernel .

Функции Android 12 невозможно перенести в ядра версии 4.19; набор функций будет аналогичен устройству, выпущенному с Android 11 и обновленному до Android 12.

Generic Kernel Image (GKI) kernel

Любое ядро ​​ACK версии 5.10 и выше (только для aarch64). Ядро GKI состоит из двух частей:

  • Универсальное ядро ​​— часть ядра GKI, общая для всех устройств.

  • Модули GKI — это модули ядра, разработанные Google, которые могут динамически загружаться на устройствах, где это применимо. Эти модули создаются как артефакты ядра GKI и поставляются вместе с GKI в виде архива system_dlkm_staging_archive.tar.gz . Модули GKI подписываются Google с использованием пары ключей, используемых при сборке ядра, и совместимы только с тем ядром GKI, с которым они были созданы.

Интерфейс модулей ядра (KMI) ядро

См. ядро ​​GKI .

Ядро с долгосрочной поддержкой (LTS)

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

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

Ветка ядра ACK KMI
Ветка, для которой собираются ядра GKI . Названия веток соответствуют версиям ядра, например, android15-6.6 .
Android-mainline
Основная ветка разработки функций Android. Когда в основной ветке объявляется о выпуске нового ядра LTS , соответствующее новое ядро ​​GKI создается на основе ветки android-mainline.

Основная ветка разработки Linux : Главная ветка разработки для ядер Linux, включая ядра с долгосрочной поддержкой (LTS).

Другие термины

Сертифицированный образ загрузки
Ядро поставляется в бинарном виде ( boot.img ) и прошивается на устройство. Этот образ считается сертифицированным, поскольку содержит встроенные сертификаты, позволяющие Google убедиться в том, что устройство поставляется с ядром, сертифицированным Google.
Динамически загружаемый модуль ядра (DLKM)
Модуль, который может динамически загружаться во время загрузки устройства в зависимости от его потребностей. Модули GKI и модули поставщиков относятся к типу DLKM. DLKM выпускаются в формате .ko и могут представлять собой драйверы или предоставлять другие функции ядра.
проект GKI
Проект Google, направленный на решение проблемы фрагментации ядра путем разделения общей функциональности ядра от поддержки SoC и плат, специфичных для конкретного производителя, на загружаемые модули.

Generic Kernel Image (GKI) : Загрузочный образ, сертифицированный Google, содержащий ядро ​​GKI , собранное из исходного кода ACK , и подходящий для прошивки в загрузочный раздел устройства под управлением Android.

Интерфейс модулей ядра (KMI)
Интерфейс между ядром GKI и модулями поставщиков, позволяющий обновлять модули поставщиков независимо от ядра GKI. Этот интерфейс состоит из функций ядра и глобальных данных, которые были определены как зависимости от поставщиков/OEM с использованием списков символов для каждого партнера.
Модуль поставщика
Аппаратно-специфический модуль, разработанный партнером и содержащий функциональность, специфичную для SoC и устройства. Модуль поставщика — это тип динамически загружаемого модуля ядра.

Что дальше?

Если вы новичок в разработке ядра Android, начните с прочтения следующего:

Если вы новичок в разработке ядра GKI, начните с изучения разработки GKI .