Общие ядра AOSP (также известные как общие ядра Android или ACK ) являются нижестоящими ядрами kernel.org и включают в себя патчи, представляющие интерес для сообщества Android, которые не были объединены с основными ядрами или ядрами с долгосрочной поддержкой (LTS). Эти патчи могут включать:
- Бэкпорты и выборочные выборки из исходного функционала, необходимые для функций Android
- Функции, готовые для устройств Android, но все еще находящиеся в стадии разработки
- Функции поставщика/OEM, полезные для других партнеров экосистемы
android-mainline
— основная ветка разработки функций Android. Linux mainline объединяется с 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 однозначно идентифицируется версией ядра и выпуском платформы Android, поэтому ветви называются ANDROID_RELEASE
- KERNEL_VERSION
. Например, ядро GKI версии 6.1 для Android 14 называется android14-6.1
. Для Android 15 было представлено ядро GKI android15-6.6
.
Функции и запуск ядер
До Android 15 для запуска устройства можно было использовать любое из трёх последних ядер. Начиная с Android 15, для запуска устройства можно использовать две последние версии ядра. Для Android 15 используются ядра android15-6.6
и android14-6.1
.
Поскольку при обновлении версии платформы обновление ядра не требуется, ядра, в которых отсутствуют последние функции для версии платформы, по-прежнему можно использовать для запуска устройств. Поэтому ядра, разработанные для Android 14, например, android14-6.1
, можно использовать на устройствах даже после обновления версии платформы до Android 15.
Релиз платформы Android | Запуск ядер | Ядра функций |
---|---|---|
Андроид 16 (2025) | android16-6.12 android15-6.6 | android16-6.12 |
Андроид 15 (2024) | android15-6.6 android14-6.1 | android15-6.6 |
Андроид 14 (2023) | android14-6.1 android14-5.15 android13-5.15 android13-5.10 android12-5.10 | android14-6.1 android14-5.15 |
Андроид 13 (2022) | android13-5.15 android13-5.10 android12-5.10 android12-5.4 android11-5.4 | android13-5.15 android13-5.10 |
Андроид 12 (2021) | android12-5.10 android12-5.4 android11-5.4 | android12-5.10 android12-5.4 |
1. Дополнительные ограничения могут применяться, если соответствующий BSP был обновлен для версии платформы. Подробнее см. в разделе «Объект интерфейса поставщика — соответствие ветвям ядра» . |
Общая иерархия ядра
Ветка от android-mainline
Верхний уровень иерархии общего ядра показан на рисунке 1.
Рисунок 1. Создание общих ядер из ядра android-mainline
Обратите внимание, что новое общее ядро Android android14-6.1
было ответвлено от android-mainline
в 2022 году. В 2023 году, когда был объявлен следующий LTS, android15-6.6
был ответвлен от android-mainline
.
Как показано на рисунке 1, каждая версия ядра может служить основой для двух ядер GKI. Например, два ядра v5.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 как для запуска, так и для обновления.
Номер поколения КМИ
Если на этапе стабилизации происходит слияние LTS, возникает проблема безопасности или другое событие после этого, требующее принятия патча, изменяющего KMI, номер поколения KMI , записанный в build.config.common
увеличивается. Текущее поколение KMI можно узнать с помощью команды uname
:
$ uname -r
6.6.30-android15-6-g86d10b30f51f
Число после выпуска платформы — это поколение KMI (в данном случае 6
).
При смене поколения KMI ядро становится несовместимым с модулями поставщика, соответствующими предыдущему поколению KMI, поэтому модули необходимо пересобрать и обновить синхронно с ядром. После заморозки KMI ожидается, что изменения поколений KMI будут происходить крайне редко.
Совместимость между ядрами
Требования к совместимости между ядрами одного семейства LTS меняются, начиная с новых ядер GKI.
Ядра GKI
Ядра GKI поддерживают обратную совместимость со всеми выпусками платформы Android, поддерживающими эту версию ядра. Кроме того, выпуски платформы Android обратно совместимы с ядрами GKI предыдущих версий. Поэтому вы можете безопасно использовать ядро android14-6.1
, разработанное для Android 14 (2023), на устройствах с Android 15 (2024). Совместимость проверяется посредством непрерывного тестирования VTS и CTS ядер GKI со всеми поддерживаемыми версиями.
KMI стабилен, поэтому ядро можно обновлять без необходимости пересборки модулей ядра в образе поставщика.
Совместимость KMI между разными ядрами GKI не поддерживается. Поэтому, например, ядро android14-6.1
невозможно заменить на ядро android15-6.6
без пересборки всех модулей.
Ядра GKI поддерживаются только в их первоначальном и последующих выпусках. Они не поддерживаются в более ранних выпусках. Поэтому ядро android15-6.6
не поддерживается для устройств под управлением Android 14 (2023).
Матрица совместимости
В этой таблице показаны версии ядра, поддерживаемые и протестированные для каждой версии платформы Android.
Релиз платформы Android | Поддерживаемые ядра |
---|---|
Андроид 16 (2025) | android16-6.12 android15-6.6 android14-6.1 android14-5.15 android13-5.15 android13-5.10 android12-5.10 android12-5.4 android11-5.4 |
Андроид 15 (2024) | android15-6.6 android14-6.1 android14-5.15 android13-5.15 android13-5.10 android12-5.10 android12-5.4 android11-5.4 |
Андроид 14 (2023) | android14-6.1 android14-5.15 android13-5.15 android13-5.10 android12-5.10 android12-5.4 android11-5.4 |
Андроид 13 (2022) | android13-5.15 android13-5.10 android12-5.10 android12-5.4 android11-5.4 |
Андроид 12 (2021) | android12-5.10 android12-5.4 android11-5.4 |
Сроки поддержки и исправления безопасности
ACK получают LTS-слияния от апстрима и исправления ошибок в коде, специфичном для Android. Эти исправления включают все исправления безопасности ядра, упомянутые в ежемесячных бюллетенях по безопасности Android , которые имеют отношение к ACK.
Поддержка ACK может быть дольше, чем поддержка соответствующего стабильного ядра на kernel.org . В этом случае Google предоставляет расширенную поддержку до даты окончания поддержки (EOL), указанной в этом разделе. После окончания поддержки ядра Google прекращает его поддержку, а устройства, работающие под управлением этого ядра, считаются уязвимыми.
Начиная с ядра 6.6 срок поддержки стабильных ядер составляет 4 года.
В этой таблице показаны сроки действия поддерживаемых ACK:
ACK-ветвь | Запуск дата | Поддерживать продолжительность жизни (годы) | ЭОЛ |
---|---|---|---|
андроид11-5.4 | 24 ноября 2019 г. | 6 | 2026-01-01 |
андроид12-5.4 | 24 ноября 2019 г. | 6 | 2026-01-01 |
андроид12-5.10 | 2020-12-13 | 6 | 2027-07-01 |
android13-5.10 | 2020-12-13 | 6 | 2027-07-01 |
андроид13-5.15 | 31 октября 2021 г. | 6 | 2028-07-01 |
андроид14-5.15 | 31 октября 2021 г. | 6 | 2028-07-01 |
андроид14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
андроид15-6.6 | 29 октября 2023 г. | 4 | 2028-07-01 |
андроид16-6.12 | 2024-11-17 | 4 | 2029-07-01 |
Общее тестирование ядра
Общие ядра тестируются с помощью нескольких систем непрерывной интеграции в дополнение к последующему тестированию поставщиками.
Функциональный тест ядра Linux
Тесты функционального тестирования ядра Linux (LKFT) запускают различные тестовые наборы, включая kselftest, LTP, VTS и CTS, на наборе физических устройств arm32 и arm64. Последние результаты тестов можно найти на странице android-lkft .
Тестирование KernelCI
Тестирование сборки и загрузки KernelCI запускается при каждом добавлении нового патча в общую ветку ядра. Несколько сотен конфигураций сборки тестируются и загружаются на различных платах. Последние результаты для ядер Android можно найти на сайте KernelCL .
Тестирование Android до и после отправки
Предварительные тесты используются для предотвращения появления сбоев в общих ядрах Android. Сводку результатов тестов можно найти на вкладке «Проверки» в разделе изменений кода в общем ядре Android gerrit.
Тестирование Android после отправки выполняется для новых опубликованных сборок в общих ветках ядра Android, когда новые патчи фиксируются в общей ветке ядра Android на сайте ci.android.com . Введя aosp_kernel
в качестве частичного имени ветки на сайте ci.android.com , вы увидите список веток ядра с доступными результатами. Например, результаты для android-mainline
можно найти на панели управления интеграции непрерывной сборки Android (Android CI) . Щелкните нужную сборку, чтобы узнать статус тестирования на вкладке Test Results
.
Тесты, определённые с помощью test-mapping с тестовой группой kernel-presubmit
в дереве исходного кода платформы Android, запускаются как presubmit для ветвей ядра Android. Например, следующая конфигурация в test/vts/tests/kernel_proc_file_api_test/TEST_MAPPING включает vts_kernel_proc_file_api_test
в качестве presubmit-теста при проверке общего кода ядра Android.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
0-дневное тестирование
Тестирование нулевого дня включает в себя пошаговое тестирование всех распространённых веток ядра Android при публикации новых патчей. Проводятся различные тесты загрузки, функциональности и производительности. Присоединяйтесь к публичной группе cros-kernel-buildreports .
Тестовая матрица
общее ядро Android | Релизы платформы Android | Тестовые наборы | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Основной | 16 | 15 | 14 | 13 | 12 | ЛКФТ | KernelCI | Предварительная отправка | Опубликовать Отправить | 0-й день | |
android-mainline | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android16-6.12 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | android13-5.15 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Внести вклад в общие ядра Android
Как правило, разработка функций должна осуществляться на основной ветке Linux, а не на распространённых ядрах Android. Мы настоятельно рекомендуем развивать её в рамках основной ветки, и после того, как она будет принята, её можно будет при необходимости портировать в конкретную ветку ACK. Команда разработчиков ядра Android с радостью поддержит инициативы по развитию в рамках основной ветки на благо экосистемы Android.
Отправляйте исправления Gerrit и соблюдайте эти правила внесения вклада .