Проект универсального образа ядра (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 предоставляет драйверам в рамках данной LTS-системы стабильный KMI.
  • Ядро GKI не содержит кода, специфичного для конкретной SoC или платы.

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

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

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

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