На этой странице рассказывается о проекте Generic Kernel Image (GKI) и о том, как он повышает стабильность и безопасность Android.
История
Каждому устройству на базе Android требуется рабочее ядро. До появления GKI ядра были настраиваемыми и основанными на общем ядре Android (ACK) с изменениями, внесенными поставщиками процессоров (SoC) и производителями оригинального оборудования (OEM).
В результате такой настройки до 50% кода ядра может быть внешним и не относиться к основному ядру Linux или ACK. В результате этого ядра, созданные до GKI, были сильно фрагментированы.
Затраты на фрагментацию
Фрагментация ядра негативно влияет на сообщество Android.
Обновления системы безопасности требуют много усилий
Исправления системы безопасности, указанные в бюллетене по безопасности Android, должны быть перенесены в каждое ядро устройства. Однако из-за фрагментации ядра распространение исправлений безопасности на устройства Android в полевых условиях обходится слишком дорого.
Сложно объединить обновления с долгосрочной поддержкой
Версии с долгосрочной поддержкой (LTS) включают исправления системы безопасности и другие важные исправления ошибок. Как показывает практика, своевременное обновление до актуальных версий LTS – самый эффективный способ обеспечить защиту. На устройствах Pixel было обнаружено, что 90% проблем с безопасностью ядра, указанных в бюллетене по безопасности Android, уже были устранены на устройствах, на которых установлены актуальные обновления.
Однако из-за всех пользовательских модификаций в ядрах устройств сложно просто объединить исправления LTS с ядрами устройств.
Запретить обновление платформы Android
Из-за фрагментации сложно добавлять на устройства новые функции Android, требующие изменений ядра. Код Android Framework должен был учитывать разные варианты ядра, поэтому нельзя было полагаться на то, что новые функции Android будут реализованы в ядре. Это замедляло инновации и приводило к увеличению размера и сложности кода.
Сложно вносить изменения в ядро Linux.
Из-за фрагментированного подхода к добавлению исправлений в производственные ядра задержка между появлением версии LTS в основном репозитории и ее установкой на устройство могла составлять до 18 месяцев. Из-за такой задержки сообществу Android сложно добавлять необходимые функции и драйверы в основные версии ядра. К тому времени, когда пользователь отправлял предложения по улучшению, база кода уже менялась, поэтому было сложно показать актуальность исправления.
Как устранить фрагментацию: общий образ ядра
Проект Generic Kernel Image (GKI) решает проблему фрагментации ядра, объединяя основное ядро и перенося поддержку SoC и плат из основного ядра в загружаемые модули поставщика. Кроме того, GKI предоставляет стабильный интерфейс модуля ядра (KMI) для модулей поставщиков, поэтому модули и ядро можно обновлять независимо друг от друга. Вот некоторые характеристики ядра GKI:
- Ядро GKI создается на основе исходного кода ACK.
- Ядро GKI – это единый двоичный файл ядра и связанные с ним загружаемые модули для каждой архитектуры и каждого выпуска LTS.
- Ядро GKI тестируется со всеми версиями платформы Android, которые поддерживаются для связанного ACK. Функции не удаляются в течение всего срока поддержки версии ядра GKI.
- Ядро GKI предоставляет стабильный интерфейс KMI для драйверов в рамках определенной версии с долгосрочной поддержкой.
- Ядро GKI не содержит кода, относящегося к SoC или плате.
Изображение архитектуры GKI можно найти в разделе Общие сведения о ядре.
Общее изображение
Начиная с Android 12 устройства с версией ядра 5.10 или более поздней должны поставляться с ядром GKI. Сборки Generic Kernel Image (GKI) регулярно обновляются, в том числе с помощью LTS и исправлений критических ошибок. Поскольку двоичная стабильность поддерживается для KMI, вы можете установить эти загрузочные образы, не внося изменений в образы поставщика. Цели проекта GKI:
- При замене ядра продукта на ядро GKI не допускайте значительного снижения производительности или энергоэффективности.
- Партнеры могут исправлять ошибки и уязвимости ядра без участия поставщика.
- Снизить стоимость обновления основной версии ядра для устройств.
- Поддерживайте единый двоичный файл ядра GKI для каждой архитектуры, обновляя версии ядра в соответствии с четким процессом.