Общие ядра AOSP (также известные как общие ядра Android или ACK ) являются зависимыми от ядер kernel.org и включают в себя патчи, представляющие интерес для сообщества Android, которые не были включены в основную ветку или ядра с долгосрочной поддержкой (LTS). Эти патчи могут включать в себя:
- Для реализации функций Android необходимы обратная совместимость и выборочное использование функциональности из исходного кода.
- Функции уже доступны для устройств Android, но разработка всё ещё ведётся в основном репозитории.
- Функции поставщиков/производителей оригинального оборудования, полезные для других партнеров по экосистеме.
android-mainline — это основная ветка разработки функций Android. Основная ветка Linux объединяется с android-mainline всякий раз, когда Линус Торвальдс публикует релиз или релиз-кандидат. До 2019 года общие ядра Android создавались путем клонирования недавно анонсированного ядра LTS и добавления патчей, специфичных для Android. Этот процесс изменился в 2019 году, и теперь новое общее ядро Android создается на основе android-mainline . Эта новая модель позволяет избежать значительных усилий по переносу и тестированию патчей Android, достигая того же результата постепенно. android-mainline проходит значительное непрерывное тестирование, и эта модель включает высококачественное ядро с момента его публикации.
Когда в основной ветке проекта объявляется новая версия LTS, соответствующая общая ветка ядра создается на основе ветки android-mainline . Это позволяет партнерам начать проект до объявления версии LTS, выполнив слияние с веткой android-mainline . После создания новой общей ветки ядра партнеры могут беспрепятственно изменить источник слияния на новую ветку.
Другие общие ветви ядра регулярно получают слияния из соответствующих им релизов LTS . Эти слияния обычно происходят сразу после публикации релиза LTS. Например, когда был опубликован Linux 6.1.75, он был объединен с общим ядром 6.1 ( android14-6.1 ). Партнерам настоятельно рекомендуется обновлять свои ядра, чтобы оставаться в курсе исправлений ошибок LTS и ошибок, специфичных для Android.
Ветка ядра ACK KMI
Ядра GKI имеют стабильный интерфейс модулей ядра (KMI). KMI однозначно идентифицируется версией ядра и релизом платформы Android, поэтому ветви называются ANDROID_RELEASE - KERNEL_VERSION . Например, ядро GKI 6.1 для Android 14 называется android14-6.1 . Для Android 15 было представлено ядро GKI android15-6.6 .
Общая иерархия ядра
Ветка от android-mainline
Верхний уровень общей иерархии ядра показан на рисунке 1.

Рисунок 1. Создание общих ядер из ядра android-mainline.
Обратите внимание, что в 2022 году из ветки android-mainline было выделено новое общее ядро Android android14-6.1 В 2023 году, когда было объявлено о выпуске следующей LTS-версии, из ветки android-mainline было выделено ядро android15-6.6 .
Как показано на рисунке 1, каждая версия ядра может служить основой для двух ядер GKI. Например, два ядра версии 5.15 — это android13-5.15 и android14-5.15 , оба из которых являются ядрами с новыми функциями для соответствующих версий платформы. Так было и с версией 5.10; android12-5.10 был создан при объявлении LTS, а android13-5.10 отделился от android12-5.10 на этапе завершения разработки ядра с новыми функциями весной 2021 года, чтобы обеспечить разработку функций для Android 13. Начиная с Android 15 (2024), для каждой версии ядра существует только одно новое ядро GKI (ядра android15-6.1 нет).
Жизненный цикл ветви ACK KMI
Жизненный цикл ветви ACK KMI показан на рисунке 2.

Рисунок 2. 6.6 Жизненный цикл ветви ACK KMI
Для уточнения процесса разработки и жизненного цикла ветвей, на рисунке 2 основное внимание уделяется ветвям ACK KMI для версии 6.6.
Каждая ветвь ACK KMI проходит через три фазы, обозначенные на рисунке 2 разными цветами в каждой ветви. Как показано, LTS регулярно объединяется независимо от фазы.
Этап разработки
После создания ветка ACK KMI переходит в фазу разработки (обозначена как dev на рисунке 2) и становится открытой для добавления новых функций в следующий релиз платформы Android. На рисунке 2 ветка android15-6.6 была создана, когда версия 6.6 была объявлена новым ядром LTS в основной ветке разработки.
Фаза стабилизации
Когда ветка ACK KMI объявляется полностью функциональной, она переходит в фазу стабилизации (обозначена как стабильная на Рис. 2). Партнерские функции и исправления ошибок по-прежнему принимаются, но включается отслеживание KMI для обнаружения любых изменений, влияющих на интерфейс. На этой фазе принимаются изменения, нарушающие совместимость KMI, и определение KMI обновляется с заданной периодичностью (обычно каждые две недели). Подробную информацию о мониторинге KMI см. в обзоре GKI .
Замороженная фаза КМИ
Перед выпуском новой версии для платформы AOSP ветка ACK KMI замораживается и остается замороженной на протяжении всего срока её существования. Это означает, что никакие изменения, нарушающие работу KMI, не принимаются, если не выявлена серьёзная проблема безопасности, которую невозможно устранить без влияния на стабильную версию KMI. Во избежание нарушений работы KMI некоторые патчи, объединённые из LTS-версий, могут быть изменены или удалены, если исправление не требуется для устройств Android.
Когда ветка ACK KMI заморожена, исправления ошибок и партнерские функции могут быть приняты при условии, что существующее общее ядро KMI не будет нарушено. KMI может быть расширен новыми экспортируемыми символами, если это не затрагивает интерфейсы, составляющие текущий KMI. При добавлении новых интерфейсов в KMI они немедленно становятся стабильными и не могут быть нарушены будущими изменениями.
Например, изменение, добавляющее поле в структуру, используемую общим ядром интерфейса KMI, не допускается, поскольку оно изменяет определение интерфейса:
struct foo {
int original_field1;
int original_field2;
int new_field; // Not allowed
};
int do_foo(struct foo &myarg)
{
do_stuff(myarg);
}
EXPORT_SYMBOL_GPL(do_foo);
Однако добавление новой функции допустимо:
struct foo2 {
struct foo orig_foo;
int new_field;
};
int do_foo2(struct foo2 &myarg)
{
do_stuff2(myarg);
}
EXPORT_SYMBOL_GPL(do_foo2);
В течение всего срока службы ядра GKI поддерживается обратная совместимость с пользовательским пространством, так что ядро можно безопасно использовать для той версии платформы Android, с которой было выпущено устройство. Непрерывное тестирование с предыдущими версиями обеспечивает совместимость. Таким образом, на рисунке 2 ядро android15-6.6 можно использовать для устройств Android 15 и более поздних версий. Поскольку версия платформы Android также совместима с предыдущими версиями, ядро android14-6.1 можно использовать для устройств Android 15 как при запуске, так и при обновлении.
номер поколения KMI
Если во время фазы стабилизации происходит слияние LTS-пакета, или после этого возникает проблема безопасности или другое событие, требующее принятия патча, изменяющего KMI, номер поколения KMI , записанный в build.config.common , увеличивается. Текущее поколение KMI можно узнать с помощью команды uname :
$ uname -r
6.6.30-android15-6-g86d10b30f51f
Число после номера выпуска платформы обозначает поколение KMI (в данном случае 6 ).
Если поколение KMI изменится, ядро станет несовместимо с модулями сторонних производителей, соответствующими предыдущему поколению KMI, поэтому модули необходимо будет пересобрать и обновить синхронно с ядром. После заморозки KMI изменения поколений KMI, как ожидается, будут происходить крайне редко.
Совместимость между ядрами
Начиная с новых ядер GKI, требования к совместимости между ядрами одного и того же семейства LTS меняются.
Ядра GKI
GKI kernels maintain backward compatibility with all Android platform releases that supported the kernel version. Additionally, the Android platform releases are backward-compatible with GKI kernels from previous releases. So you can safely use the android14-6.1 kernel developed for Android 14 (2023) on devices running Android 15 (2024). Compatibility is verified through continuous VTS and CTS testing of the GKI kernels with all supported releases.
KMI стабилен, поэтому обновление ядра возможно без необходимости пересборки модулей ядра в образе от поставщика.
Совместимость KMI не сохраняется между различными ядрами GKI. Поэтому, например, ядро android14-6.1 нельзя заменить ядром android15-6.6 без пересборки всех модулей.
Ядра GKI поддерживаются только для своих первоначальных и последующих версий. Они не поддерживаются для более старых версий. Поэтому ядро android15-6.6 не поддерживается на устройствах под управлением Android 14 (2023).
Матрица совместимости
В этой таблице показаны поддерживаемые и протестированные версии ядра для каждого выпуска платформы Android.
| Выпуск платформы Android | Поддерживаемые ядра |
|---|---|
| Android 17 (2026) | android17-6.18android16-6.12android15-6.6android14-6.1android14-5.15android13-5.15android13-5.10 (не поддерживается в Android 17 QPR1 и выше)android12-5.10 (не поддерживается в Android 17 QPR1 и выше) |
| Android 16 (2025) | android16-6.12android15-6.6android14-6.1android14-5.15android13-5.15android13-5.10android12-5.10 |
| Android 15 (2024) | android15-6.6android14-6.1android14-5.15android13-5.15android13-5.10android12-5.10 |
| Android 14 (2023) | android14-6.1android14-5.15android13-5.15android13-5.10android12-5.10 |
| Android 13 (2022) | android13-5.15android13-5.10android12-5.10 |
| Android 12 (2021) | android12-5.10 |
Сроки поддержки и обновления безопасности
ACK получает LTS-слияния от разработчиков и исправления ошибок в коде, специфичном для Android. Эти исправления включают все патчи безопасности ядра, упомянутые в ежемесячных бюллетенях безопасности Android , которые имеют отношение к ACK.
Поддержка ACK-сообщений может продолжаться дольше, чем поддержка соответствующего стабильного ядра, размещенного на kernel.org . В этом случае Google предоставляет расширенную поддержку до даты окончания поддержки (EOL), указанной в этом разделе. Когда поддержка ядра прекращается (EOL), Google больше не поддерживает его, и устройства, работающие на таких ядрах, считаются уязвимыми.
Начиная с ядра версии 6.6, срок поддержки стабильных версий ядра составляет 4 года.
В этой таблице показано время жизни поддерживаемых подтверждений (ACK):
| Ветка ACK | Запуск дата | Поддерживать продолжительность жизни (годы) | EOL |
|---|---|---|---|
| android12-5.10 | 2020-12-13 | 6 | 2027-07-01 |
| android13-5.10 | 2020-12-13 | 6 | 2027-07-01 |
| android13-5.15 | 2021-10-31 | 6 | 2028-07-01 |
| android14-5.15 | 2021-10-31 | 6 | 2028-07-01 |
| android14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
| android15-6.6 | 2023-10-29 | 4 | 2028-07-01 |
| android16-6.12 | 2024-11-17 | 4 | 2029-07-01 |
| android17-6.18 | 2025-11-30 | 4 | 2030-07-01 |
Общее тестирование ядра
В дополнение к тестированию, проводимому поставщиками, стандартные ядра тестируются с использованием нескольких систем непрерывной интеграции.
Тестирование KernelCI
KernelCI build-and-boot tests are initiated whenever a new patch is committed to a common kernel branch. Several hundred build configurations are tested and booted on various boards. Recent results for Android kernels can be found on the KernelCL site.
Предварительное и последующее тестирование Android
Предварительные тесты используются для предотвращения появления ошибок в ядрах Android. Сводку результатов тестов можно найти на вкладке «Проверки» в описании изменений кода в Gerrit для ядер Android.
Тестирование Android postsubmit выполняется для новых опубликованных сборок в общих ветках ядра Android, когда новые патчи вносятся в общую ветку ядра Android на ci.android.com . Введя aosp_kernel в качестве частичного имени ветки на ci.android.com , вы увидите список веток ядра с доступными результатами. Например, результаты для android-mainline можно найти на панели мониторинга непрерывной интеграции сборок Android (Android CI) . Щелкните конкретную сборку, чтобы узнать статус тестирования на вкладке Test Results .
Тесты, определенные с помощью test-mapping с группой тестов kernel-presubmit в исходном коде платформы Android, запускаются в качестве предварительных тестов для веток ядра Android. Например, следующая конфигурация в test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING включает vts_kernel_proc_file_api_test в качестве предварительного теста при внесении общего кода ядра Android.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
тестирование нулевого дня
Тестирование нулевого дня выполняет поэтапное тестирование всех общих веток ядра Android при внесении новых исправлений. Проводятся различные тесты загрузки, функциональные тесты и тесты производительности. Присоединяйтесь к публичной группе cros-kernel-buildreports .
Тестовая матрица
| общее ядро Android | Релизы платформы Android | Наборы тестов | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Основной | 17 | 16 | 15 | 14 | 13 | KernelCI | Предварительная отправка | Отправить | 0-дневный | ||
android-mainline | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | |
android17-6.18 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | |
android16-6.12 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | |
android15-6.6 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | |
android14-6.1 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | android13-5.15 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
Внесите свой вклад в разработку общих ядер Android.
Как правило, разработка новых функций должна вестись в основной ветке Linux, а не в ядрах Android. Разработка в репозиториях исходного кода всячески поощряется, и после принятия изменений в них, при необходимости, их можно перенести в соответствующую ветку ACK. Команда разработчиков ядра Android с удовольствием поддерживает усилия по интеграции в репозитории исходного кода на благо экосистемы Android.
Отправляйте исправления в Gerrit и соблюдайте данные правила внесения вклада .