Проект универсального образа ядра (GKI)

Ядро продукта , также известное как ядро ​​устройства или OEM-ядро , — это ядро, поставляемое на вашем устройстве. До GKI ядро ​​продукта было получено в результате ряда изменений ядра основной ветки разработки. На рис. 1 показано, как дополнения к ядру дают ядро ​​продукта (ядро OEM/устройства):

Создание ядра продукта до GKI

Рис. 1. Конструкция ядра продукта до GKI.

  1. Ядро Linux с долгосрочной поддержкой (LTS) с сайта kernel.org было изменено с помощью исправлений для Android, что привело к появлению общего ядра Android (ACK) .
  2. ACK был изменен поставщиками, которые добавили поддержку своей системы на кристалле (SoC). Поставщики также могут добавить оптимизацию производительности или энергопотребления. Полученное ядро ​​называется ядром поставщика .
  3. Наконец, OEM-производители дополнительно модифицировали ядро ​​поставщика с помощью дополнительных драйверов устройств и настроек, которые они сочли необходимыми. Полученное ядро ​​называется ядром продукта .

Все эти модификации могут привести к тому, что до 50 % кода ядра будет кодом вне дерева, а не исходным ядром Linux или ACK. До GKI почти каждое устройство имело специальное ядро, что приводило к фрагментации ядра.

Стоимость фрагментации

Фрагментация ядра имеет несколько негативных последствий для сообщества Android.

Обновления безопасности трудоемки

Исправления безопасности, указанные в бюллетене по безопасности Android (ASB), должны быть перенесены в каждое из ядер устройства. Однако из-за фрагментации ядра распространение исправлений безопасности на устройства Android в полевых условиях обходится непомерно дорого.

Сложно объединить обновления с долгосрочной поддержкой

Выпуски с долгосрочной поддержкой (LTS) включают исправления безопасности и исправления других критических ошибок. Поддержание актуальности выпусков LTS оказалось наиболее эффективным способом предоставления исправлений безопасности. На устройствах Pixel было обнаружено, что 90% проблем с безопасностью ядра, о которых сообщалось в ASB, уже были устранены для устройств, которые остаются в актуальном состоянии.

Однако со всеми пользовательскими модификациями в ядрах устройств сложно просто объединить исправления LTS с ядрами устройств.

Запрещает выпуск обновлений платформы Android

Фрагментация затрудняет добавление новых функций Android, требующих внесения изменений в ядро, на устройства в полевых условиях. Код Android Framework должен предполагать, что поддерживается до пяти версий ядра и что для новой версии платформы не было внесено никаких изменений ядра (Android 10 поддерживает ядра 3.18, 4.4, 4.9, 4.14 и 4.19, которые в некоторых случаях не были изменены). дополнен новыми функциями, начиная с Android 8 в 2017 году).

Трудно внести изменения ядра обратно в исходную версию Linux.

Со всеми изменениями, внесенными в ядро, большинство флагманских устройств поставляются с версией ядра, которой уже не менее 18 месяцев. Например, ядро ​​4.14 было выпущено kernel.org в ноябре 2017 года, а первые телефоны Android, использующие ядра 4.14, были выпущены весной 2019 года.

Эта длительная задержка между выпуском исходного ядра и продуктами затрудняет для сообщества Android добавление необходимых функций и драйверов в исходные ядра.

Исправление фрагментации: общий образ ядра

Проект Generic Kernel Image (GKI) устраняет фрагментацию ядра путем унификации основного ядра и переноса поддержки SoC и плат из основного ядра в загружаемые модули поставщиков. GKI также представляет стабильный интерфейс модулей ядра (KMI) для модулей поставщиков, поэтому модули и ядро ​​можно обновлять независимо. Некоторые характеристики ядра GKI:

  • Ядро GKI собрано из исходников ACK.
  • Ядро GKI представляет собой двоичный файл с одним ядром и соответствующими загружаемыми модулями для каждой архитектуры и версии LTS (в настоящее время только arm64 для android11-5.4 и android12-5.4 ).
  • Ядро GKI тестируется со всеми версиями платформы Android, которые поддерживаются соответствующим ACK. В течение всего времени существования версии ядра GKI функция не устаревает.
  • Ядро GKI предоставляет стабильный KMI для драйверов в данной LTS.
  • Ядро GKI не содержит кода, специфичного для SoC или платы.

Изображение архитектуры GKI см. в обзоре ядра .

GKI — это сложное изменение, которое развертывается в несколько этапов, начиная с ядер версии 5.4 в выпуске платформы Android 11.

В настоящее время существует два этапа GKI:

  • GKI 1.0 был представлен в Android 11 для устройств с ядром 5.4. GKI 1.0 применяется ко всем устройствам, поставляемым с ядрами 5.4, даже к тем, которые запущены с Android 12 или Android 13.
  • GKI 2.0 был представлен в Android 12 для устройств с ядрами 5.10 и является новым стандартом для всех устройств, которые поставляются с ядрами 5.10 или более поздних версий.

ГКИ 1.0

В GKI 1.0 устройства, запускаемые с ядром версии 5.4, должны пройти тестирование GKI (Android 11 и более поздние версии платформы). Цели GKI 1.0 включают следующее:

  • Избегайте регрессий в Vendor Test Suite (VTS) или Compatibility Test Suite (CTS) при замене ядра продукта на ядро ​​GKI.
  • Уменьшите нагрузку на партнеров по поддержанию их ядра в актуальном состоянии с помощью общих ядер AOSP.
  • Включите основные изменения Android в ядра для устройств, обновляющихся и запускаемых с новыми выпусками Android.
  • Не нарушайте пользовательское пространство Android.
  • Отдельные аппаратно-зависимые компоненты от основного ядра в виде загружаемых модулей.

Документацию по GKI 1.0 см. в разделе GKI 1.0 .

ГКИ 2.0

В GKI 2.0 устройства, запускаемые с ядром версии 5.10 или выше, должны поставляться с ядром GKI (начиная с Android 12). Подписанные загрузочные образы доступны и регулярно обновляются с помощью LTS и исправлений критических ошибок. Поскольку для KMI поддерживается стабильность двоичных файлов, вы можете установить эти загрузочные образы, не внося изменений в образы поставщиков. Цели GKI 2.0 включают следующее:

  • Не допускайте значительного снижения производительности или энергопотребления при замене ядра продукта на ядро ​​GKI.
  • Предоставьте партнерам возможность предоставлять исправления безопасности ядра и исправления ошибок без участия поставщика.
  • Снизить стоимость обновления основной версии ядра для устройств (например, с версии 5.10 до ядра 2021 LTS).
  • Поддерживайте единый двоичный файл ядра GKI для каждой архитектуры, обновляя версии ядра с четким процессом обновления.

GKI 2.0 представляет самое последнее состояние ядер Android. Документация ядра вне подразделов GKI 1.0 и предыдущих ядер (<=4.19) отражает архитектуру GKI 2.0.

,

Ядро продукта , также известное как ядро ​​устройства или OEM-ядро , — это ядро, поставляемое на вашем устройстве. До GKI ядро ​​продукта было получено в результате ряда изменений ядра основной ветки разработки. На рис. 1 показано, как дополнения к ядру дают ядро ​​продукта (ядро OEM/устройства):

Создание ядра продукта до GKI

Рис. 1. Конструкция ядра продукта до GKI.

  1. Ядро Linux с долгосрочной поддержкой (LTS) с сайта kernel.org было изменено с помощью исправлений для Android, что привело к появлению общего ядра Android (ACK) .
  2. ACK был изменен поставщиками, которые добавили поддержку своей системы на кристалле (SoC). Поставщики также могут добавить оптимизацию производительности или энергопотребления. Полученное ядро ​​называется ядром поставщика .
  3. Наконец, OEM-производители дополнительно модифицировали ядро ​​поставщика с помощью дополнительных драйверов устройств и настроек, которые они сочли необходимыми. Полученное ядро ​​называется ядром продукта .

Все эти модификации могут привести к тому, что до 50 % кода ядра будет кодом вне дерева, а не исходным ядром Linux или ACK. До GKI почти каждое устройство имело специальное ядро, что приводило к фрагментации ядра.

Стоимость фрагментации

Фрагментация ядра имеет несколько негативных последствий для сообщества Android.

Обновления безопасности трудоемки

Исправления безопасности, указанные в бюллетене по безопасности Android (ASB), должны быть перенесены в каждое из ядер устройства. Однако из-за фрагментации ядра распространение исправлений безопасности на устройства Android в полевых условиях обходится непомерно дорого.

Сложно объединить обновления с долгосрочной поддержкой

Выпуски с долгосрочной поддержкой (LTS) включают исправления безопасности и исправления других критических ошибок. Поддержание актуальности выпусков LTS оказалось наиболее эффективным способом предоставления исправлений безопасности. На устройствах Pixel было обнаружено, что 90% проблем с безопасностью ядра, о которых сообщалось в ASB, уже были устранены для устройств, которые остаются в актуальном состоянии.

Однако со всеми пользовательскими модификациями в ядрах устройств сложно просто объединить исправления LTS с ядрами устройств.

Запрещает выпуск обновлений платформы Android

Фрагментация затрудняет добавление новых функций Android, требующих внесения изменений в ядро, на устройства в полевых условиях. Код Android Framework должен предполагать, что поддерживается до пяти версий ядра и что для новой версии платформы не было внесено никаких изменений ядра (Android 10 поддерживает ядра 3.18, 4.4, 4.9, 4.14 и 4.19, которые в некоторых случаях не были изменены). дополнен новыми функциями, начиная с Android 8 в 2017 году).

Трудно внести изменения ядра обратно в исходную версию Linux.

Со всеми изменениями, внесенными в ядро, большинство флагманских устройств поставляются с версией ядра, которой уже не менее 18 месяцев. Например, ядро ​​4.14 было выпущено kernel.org в ноябре 2017 года, а первые телефоны Android, использующие ядра 4.14, были выпущены весной 2019 года.

Эта длительная задержка между выпуском исходного ядра и продуктами затрудняет для сообщества Android добавление необходимых функций и драйверов в исходные ядра.

Исправление фрагментации: общий образ ядра

Проект Generic Kernel Image (GKI) устраняет фрагментацию ядра путем унификации основного ядра и переноса поддержки SoC и плат из основного ядра в загружаемые модули поставщиков. GKI также представляет стабильный интерфейс модулей ядра (KMI) для модулей поставщиков, поэтому модули и ядро ​​можно обновлять независимо. Некоторые характеристики ядра GKI:

  • Ядро GKI собрано из исходников ACK.
  • Ядро GKI представляет собой двоичный файл с одним ядром и соответствующими загружаемыми модулями для каждой архитектуры и версии LTS (в настоящее время только arm64 для android11-5.4 и android12-5.4 ).
  • Ядро GKI тестируется со всеми версиями платформы Android, которые поддерживаются соответствующим ACK. В течение всего времени существования версии ядра GKI функция не устаревает.
  • Ядро GKI предоставляет стабильный KMI для драйверов в данной LTS.
  • Ядро GKI не содержит кода, специфичного для SoC или платы.

Изображение архитектуры GKI см. в обзоре ядра .

GKI — это сложное изменение, которое развертывается в несколько этапов, начиная с ядер версии 5.4 в выпуске платформы Android 11.

В настоящее время существует два этапа GKI:

  • GKI 1.0 был представлен в Android 11 для устройств с ядром 5.4. GKI 1.0 применяется ко всем устройствам, поставляемым с ядрами 5.4, даже к тем, которые запущены с Android 12 или Android 13.
  • GKI 2.0 был представлен в Android 12 для устройств с ядрами 5.10 и является новым стандартом для всех устройств, которые поставляются с ядрами 5.10 или более поздних версий.

ГКИ 1.0

В GKI 1.0 устройства, запускаемые с ядром версии 5.4, должны пройти тестирование GKI (Android 11 и более поздние версии платформы). Цели GKI 1.0 включают следующее:

  • Избегайте регрессий в Vendor Test Suite (VTS) или Compatibility Test Suite (CTS) при замене ядра продукта на ядро ​​GKI.
  • Уменьшите нагрузку на партнеров по поддержанию их ядра в актуальном состоянии с помощью общих ядер AOSP.
  • Включите основные изменения Android в ядра для устройств, обновляющихся и запускаемых с новыми выпусками Android.
  • Не нарушайте пользовательское пространство Android.
  • Отдельные аппаратно-зависимые компоненты от основного ядра в виде загружаемых модулей.

Документацию по GKI 1.0 см. в разделе GKI 1.0 .

ГКИ 2.0

В GKI 2.0 устройства, запускаемые с ядром версии 5.10 или выше, должны поставляться с ядром GKI (начиная с Android 12). Подписанные загрузочные образы доступны и регулярно обновляются с помощью LTS и исправлений критических ошибок. Поскольку для KMI поддерживается стабильность двоичных файлов, вы можете установить эти загрузочные образы, не внося изменений в образы поставщиков. Цели GKI 2.0 включают следующее:

  • Не допускайте значительного снижения производительности или энергопотребления при замене ядра продукта на ядро ​​GKI.
  • Предоставьте партнерам возможность предоставлять исправления безопасности ядра и исправления ошибок без участия поставщика.
  • Снизить стоимость обновления основной версии ядра для устройств (например, с версии 5.10 до ядра 2021 LTS).
  • Поддерживайте единый двоичный файл ядра GKI для каждой архитектуры, обновляя версии ядра с четким процессом обновления.

GKI 2.0 представляет самое последнее состояние ядер Android. Документация ядра вне подразделов GKI 1.0 и предыдущих ядер (<=4.19) отражает архитектуру GKI 2.0.