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