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

На этой странице описывается проект Generic Kernel Image (GKI) и то, как он повышает стабильность Android и безопасность.

История

Каждому устройству под управлением Android требуется производственное ядро. До GKI ядра были пользовательскими и основывались на общем ядре Android (ACK), с изменениями для конкретных устройств, внесенными поставщиками систем на кристалле (SoC) и OEM-производителями.

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

Издержки фрагментации

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

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

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

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

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

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

Запретить обновления версий платформы Android

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

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

Фрагментированный способ установки исправлений в производственные ядра привел к задержке до 18 месяцев с момента, когда выпуск LTS был доступен в исходной версии, до момента, когда он находился на устройстве. Такая длительная задержка между выпуском ядра и продуктов основной разработки затрудняет для сообщества Android внедрение необходимых функций и драйверов в ядра основной ветки. К тому времени, когда пользователь представил предложения по улучшениям, кодовая база изменилась, что затрудняло демонстрацию актуальности патча.

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

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

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

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

Общее изображение

Начиная с Android 12, устройства, поставляемые с ядром версии 5.10 или выше, должны поставляться с ядром GKI. Сборки выпуска Generic Kernel Image (GKI) регулярно обновляются и регулярно пополняются LTS и исправлениями критических ошибок. Поскольку для KMI поддерживается двоичная стабильность, вы можете установить эти загрузочные образы, не внося изменений в образы поставщиков. Проект ГКИ преследует следующие цели:

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