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

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

История

Каждому устройству на базе Android требуется собственное ядро. До появления GKI ядра разрабатывались на основе Android Common Kernel (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.
  • Предоставить партнерам возможность предоставлять исправления безопасности ядра и исправления ошибок без участия поставщика.
  • Сокращение затрат на обновление основной версии ядра для устройств.
  • Поддерживайте единый двоичный файл ядра GKI для каждой архитектуры, обновляя версии ядра с помощью четкого процесса обновления.