На этой странице описывается проект 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 для каждой архитектуры, обновляя версии ядра с четким процессом обновления.