Обзор ядра

Ядро 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 или ядра Long Term GKI.

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

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

Функции Android 12 не могут быть перенесены на ядра 4.19; набор функций будет аналогичен набору функций устройства, выпущенного с версией 4.19 на Android 11 и обновленного до 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, поддерживаемое от 2 до 6 лет. Ядра LTS выпускаются раз в год и являются основой для каждого из общих ядер Android от Google.

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

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

Linux mainline : основная ветвь разработки для основных ядер Linux, включая ядра LTS.

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

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

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

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

Что дальше?

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

Если вы новичок в разработке ядра GKI, начните с прочтения статьи «Разработка GKI» .