Общие ядра 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
. Например, ядро 6.1 GKI для 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 был обновлен для выпуска платформы. Подробности см. в разделе Vendor Interface Object — match kernel branchs . |
Общая иерархия ядра
Ветка от android-mainline
Верхний уровень иерархии общего ядра показан на рисунке 1.
Рисунок 1. Создание общих ядер из ядра android-mainline
Обратите внимание, что новое общее ядро Android android14-6.1
было ответвлено от android-mainline
в 2022 году. В 2023 году, когда была объявлена следующая LTS, от android-mainline
было ответвлено android15-6.6
.
Как показано на рисунке 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 upstream.
Стабилизация фазы
Когда ветвь ACK KMI объявляется завершенной функцией, она переходит в фазу стабилизации (помеченную как стабильная на рисунке 2). Функции партнеров и исправления ошибок по-прежнему принимаются, но отслеживание KMI включено для обнаружения любых изменений, которые влияют на интерфейс. На этом этапе принимаются изменения, нарушающие работу KMI, и определение KMI обновляется с предопределенной периодичностью (обычно каждые две недели). Подробную информацию о мониторинге KMI см. в обзоре GKI .
KMI замороженная фаза
Перед тем, как новый релиз платформы будет отправлен в 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 будут происходить очень редко.
Совместимость между ядрами
Требования к совместимости между ядрами одного семейства 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 | android16-6.12 |
Андроид 15 (2024) | android15-6.6 | android15-6.6 |
Андроид 14 (2023) | android14-6.1 | android14-6.1 |
Андроид 13 (2022) | android13-5.15 | android13-5.15 |
Андроид 12 (2021) | android12-5.10 | android11-5.4 |
Сроки поддержки и исправления безопасности
ACK получают LTS-слияния от апстрима и исправления ошибок для кода, специфичного для Android. Эти исправления включают все исправления безопасности ядра, упомянутые в ежемесячных бюллетенях по безопасности Android , которые имеют отношение к ACK.
ACK могут поддерживаться дольше, чем соответствующее стабильное ядро upstream на kernel.org . В этом случае Google предоставляет расширенную поддержку до даты окончания срока службы (EOL), указанной в этом разделе. Когда ядра EOL, они больше не поддерживаются Google, и устройства, на которых они работают, считаются уязвимыми.
Начиная с ядра 6.6 срок поддержки стабильных ядер составляет 4 года.
В этой таблице показаны сроки действия поддерживаемых ACK:
ACK-ветвь | Запуск дата | Поддерживать продолжительность жизни (годы) | ЭОЛ |
---|---|---|---|
андроид11-5.4 | 2019-11-24 | 6 | 2026-01-01 |
андроид12-5.4 | 2019-11-24 | 6 | 2026-01-01 |
андроид12-5.10 | 2020-12-13 | 6 | 2027-07-01 |
андроид13-5.10 | 2020-12-13 | 6 | 2027-07-01 |
андроид13-5.15 | 2021-10-31 | 6 | 2028-07-01 |
андроид14-5.15 | 2021-10-31 | 6 | 2028-07-01 |
андроид14-6.1 | 2022-12-11 | 6 | 2029-07-01 |
андроид15-6.6 | 2023-10-29 | 4 | 2028-07-01 |
андроид16-6.12 | 2024-11-17 | 4 | 2029-07-01 |
Тестирование общего ядра
Общие ядра тестируются с помощью нескольких систем непрерывной интеграции в дополнение к последующему тестированию поставщиками.
Функциональный тест ядра Linux
Тесты Linux Kernel Functional Test (LKFT) инициируют различные тестовые наборы, включая kselftest, LTP, VTS и CTS на наборе физических устройств arm32 и arm64. Последние результаты тестов можно найти здесь .
Тестирование KernelCI
Тесты сборки и загрузки KernelCI запускаются всякий раз, когда новый патч фиксируется в общей ветке ядра. Несколько сотен конфигураций сборки тестируются и загружаются на различных платах. Последние результаты для ядер Android можно найти здесь .
Тестирование Android до и после отправки
Тесты Presubmit используются для предотвращения появления сбоев в общих ядрах Android. Сводку результатов теста можно найти на вкладке «Проверки» изменения кода в общем ядре Android gerrit.
Тестирование Android postsubmit выполняется для новых опубликованных сборок в общих ветвях ядра Android, когда новые патчи фиксируются в общей ветви ядра Android на ci.android.com . Введя aosp_kernel
в качестве частичного имени ветви на ci.android.com , вы увидите список веток ядра с доступными результатами. Например, результаты для android-mainline
можно найти здесь . При нажатии на конкретную сборку вы найдете статус теста на вкладке 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 как presbumit тест при проверке общего кода ядра Android.
{
"kernel-presubmit": [
{
"name": "vts_kernel_proc_file_api_test"
}
]
}
Тестирование 0-го дня
Тестирование 0-day выполняет пошаговое тестирование всех общих веток ядра Android при коммите новых патчей. Проводятся различные загрузочные, функциональные и производительные тесты. Присоединяйтесь к публичной группе cros-kernel-buildreports
Тестовая матрица
общее ядро Android | Релизы платформы Android | Тестовые наборы | |||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Основной | 16 | 15 | 14 | 13 | 12 | ЛКФТ | ЯдроCI | Предварительная отправка | Опубликовать Отправить | 0-й день | |
android-mainline | ✅ | ❌ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android16-6.12 | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android15-6.6 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android14-6.1 | ✅ | ✅ | ✅ | ✅ | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ | android13-5.15 | ✅ | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ | ✅ |
android12-5.10 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
android11-5.4 | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Внести вклад в общие ядра Android
Как правило, разработка функций должна осуществляться на основном Linux, а не на общих ядрах Android. Разработка upstream настоятельно рекомендуется, и после того, как разработка будет принята там, ее можно будет легко перенести в конкретную ветку ACK по мере необходимости. Команда Android Kernel Team с радостью поддержит усилия upstreaming на благо экосистемы Android.
Отправляйте исправления Gerrit и соблюдайте эти правила внесения вклада .