Ядро 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 и модулей поставщика:
Рисунок 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, начните со следующего:
- Долгосрочные стабильные ядра — справочная информация о восходящих LTS-ядрах, которые используются в ACK.
- Общие ядра Android — Справочная информация об ACK.
Если вы новичок в разработке ядра GKI, начните с прочтения статьи «Разработка GKI» .