Обзор ядра

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

ACK создаются из репозитория kernel/common. Этот репозиторий представляет собой надмножество исходного кода ядра Linux с дополнительными исправлениями для Android.

ACK версии 5.10 и выше также называются ядрами *Generic Kernel Images (GKI). Ядра GKI поддерживают разделение кода универсального ядра, не зависящего от оборудования, и модулей GKI от модулей поставщика, зависящих от оборудования.

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

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

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

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

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

Типы ядер

Общее ядро Android (ACK)
Ядро, которое является производным от LTS-ядра и включает исправления, важные для сообщества Android. Эти исправления не были объединены с основной веткой Linux или долгосрочными ядрами GKI.

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

Ядро Android Open Source Project (AOSP)
Подробнее об общих ядрах Android…

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

Ядро Generic Kernel Image (GKI)

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

  • Общее ядро. Часть ядра GKI, которая является общей для всех устройств.

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

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

Подробнее о ядре GKI…

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

Ядро Linux, которое поддерживается от двух до шести лет. Ядра LTS выпускаются раз в год и служат основой для общих ядер Android.

Типы ветвей

Ветка ядра 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, направленный на устранение фрагментации ядра путем отделения общих основных функций ядра от функций, относящихся к определенной системе на чипе и поддержке платы, в загружаемые модули.

Образ ядра общего назначения (GKI) – это загрузочный образ, сертифицированный Google, который содержит ядро GKI, созданное на основе дерева исходного кода ACK, и подходит для записи в загрузочный раздел устройства Android.

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

Что дальше

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

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