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

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

История

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

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

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

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

Обновления безопасности требуют больших трудозатрат

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

Трудно объединить долгосрочные поддерживаемые обновления

Выпуски Long-Term Supported (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 для каждой архитектуры, обновляя версии ядра с помощью четкого процесса обновления.