На прошедшей конференции Linux Plumbers 2021 компания Google рассказала об успехах инициативы по переводу платформы Android на использование обычного ядра Linux вместо применения собственного варианта ядра, включающего изменения, специфичные для платформы Android.
Наиболее важным изменением в разработке стало решение по переходу после 2023 года на модель «Upstream First», подразумевающую развитие всех новых возможностей ядра, необходимых в платформе Android, непосредственно в основном ядре Linux, а не в своих отдельных ветках (функциональность вначале будет продвигаться в основное ядро, а потом использоваться в Android, а не наоборот). На 2023 и 2024 годы также намечена передача в основной состав ядра всех дополнительных патчей, остающихся в ветке Android Common Kernel.
Что катается ближайшего будущего, то для ожидаемой в начале октября платформы Android 12 будут предложены сборки ядра «Generic Kernel Image» (GKI), по возможности приближенные к обычному ядру 5.10. Для указанных сборок будет предоставлен регулярный выпуск обновлений, которые будут размещаться в репозитории ci.android.com. В ядре GKI специфичные для платформы Android дополнения, а также связанные с поддержкой оборудования обработчики от OEM-производителей вынесены в отдельные модули ядра. Указанные модули не привязаны к версии основного ядра и могут развиваться отдельно, что значительно упрощает сопровождение и перевод устройств на новые ветки ядра.
Необходимые для производителей устройств интерфейсы реализованы в форме хуков, которые позволяют менять поведение ядра без внесения изменений в код. Всего в ядре android12-5.10 предложено 194 обычных хука, аналогичных точкам трассировки (tracepoint), и 107 специализированных хуков, позволяющих запускать обработчики в неатомарном контексте. В ядре GKI производителям оборудования запрещено наложение специфичных патчей на основное ядро, а компоненты для поддержки аппаратного обеспечения должны поставляться поставщиками только в виде дополнительных модулей ядра, в которых обязательно должна обеспечиваться совместимость с основным ядром.
Напомним, что в платформе Android развивается собственная ветка ядра — Android Common Kernel, на основе которой для каждого устройства формируются отдельные специфичные сборки. В каждой ветке Android производителям предоставляется несколько вариантов компоновки ядер для своих устройств. Например, в Android 11 предлагалось на выбор сразу три базовых ядра — 4.14, 4.19 и 5.4, а для Android 12 будет предложены базовые ядра 4.19, 5.4 и 5.10. Вариант 5.10 оформлен как Generic Kernel Image, в котором необходимые для OEM-производителей возможности переданы в upstream, вынесены в модули или перенесены в состав Android Common Kernel.
До появления GKI ядро для Android проходило несколько стадий подготовки:
- На базе основных LTS-ядер (3.18, 4.4, 4.9, 4.14, 4.19, 5.4) создавалось ответвление «Android Common Kernel», в которое переносились специфичные для Android патчи (ранее размер изменений достигал нескольких миллионов строк).
- На основе «Android Common Kernel» производители чипов, такие как Qualcomm, Samsung и MediaTek, формировали «SoC Kernel», включающие дополнения для поддержки оборудования.
- На основе «SoC Kernel» производители устройств создавали «Device Kernel», включающие изменения, связанные с поддержкой дополнительного оборудования, экранов, камер, звуковых систем и т.п.
Подобный подход существенно усложнял доведение обновлений с устранением уязвимостей и переход на новые ветки ядра. Несмотря на то, что Google регулярно выпускает обновления своих Android-ядер (Android Common Kernel), поставщики часто не спешат поставлять эти обновления или вообще используют одно ядро на протяжении всего жизненного цикла устройства.
Источник: opennet.ru