Новости и события » Hi-Tech » Инициатива по передаче в основной ядро Linux, специфичных для Android изменений

Инициатива по передаче в основной ядро Linux, специфичных для Android изменений

Разработчики из компании Google возобновили попытки переноса в основное ядро Linux изменений, развиваемых в варианте ядра для платформы Android. В настоящее время в устройствах с платформой Android применяются отдельные модифицированные ветки ядра, на поддержание которых тратятся большие ресурсы. Первые попытки передачи в основное ядро всех специфичных для Android исправлений были предприняты в 2010 и 2011 годах, но привели лишь к частичной передаче кода.

Разработка всех развиваемых для Android дополнений в основном ядре даст возможность пользователям и авторам прошивок применять свежие выпуски обычного ядра Linux, не ограничиваясь ядрами, предлагаемыми Google. В свою очередь разработчики Android смогут существенно упростить сопровождение ядра для Android, избавившись от трудоемкого процесса переноса исправлений ошибок в старые Android-ядра и портирования изменений при подготовке очередной новой ветки ядра для Android.

Последнее стабильное ядро для Android базируется на выпуске 4.14, но сохраняется поддержка веток 3.18, 4.4 и 4.9, которые продолжают применяться в актуальных прошивках на основе Android 8. Отличия ядер для Android включают как необходимые для платформы изменения (MTP/PTP, параноидальный режим для сетевой подсистемы, интерактивный cpufreq governor, EAS (Energy Aware Scheduling)), так и изменения для поддержки оборудования, продвигаемые поставщиками устройств (sdcardfs, специфичные драйверы).

Судя по прозвучавшему на конференции Linux Plumbers Conference 2018 докладу, в последнее время процесс синхронизации с основным ядром существенно продвинулся вперед и возможность использования обычного ядра Linux вместе с Android, хоть еще не достигнута, но уже достаточно близка к воплощению. Команда сопровождающих ядро для Android теперь пытается вначале продвинуть изменения в основное ядро перед публикацией, а также ведет работу по решению проблем и уязвимостей непосредственно в upstream.

В текущем виде число специфичных изменений в Android Common Kernel, необходимых для загрузки платформы Android, сокращено до 30 патчей, охватывающих 6500 строк кода (ранее размер изменений достигал нескольких миллионов строк). Из целей на будущее отмечается перенос модулей ashmem и ion из дерева staging, улучшение использования в Android структуры "Device Tree", решение проблемы с наследованием приоритетов в binder и перенос кода EAS (Energy Aware Scheduling) и SDCardFS в основное ядро.

Несмотря на то, что Google регулярно выпускает обновления своих Android-ядер (Android Common Kernel), часто поставщики не смешать предлагать эти обновления или вообще используют одно ядро на протяжении всего жизненного цикла устройства. Для исправления ситуации Google развивает систему Treble, позволяющую производителям создавать универсальные компоненты поддержки оборудования, не привязанные к конкретным версиям Android и используемым выпускам ядра Linux. Treble дает возможность использовать в качестве основы уже готовые обновления от Google, интегрируя в них специфичные для конкретного устройства компоненты. Для стимулирования доставки обновлений Google планирует применить административный ресурс на уровне отдельного требования в OEM-соглашении.

В конечном счете, Google планирует предложить поставщикам базовое ядро на основе свежей кодовой базы основного ядра Linux. Компоненты для поддержки оборудования должны будут поставляться поставщиками в только в виде дополнительных модулей ядра, без возможности использования патчей для изменения основного ядра (например, поставщик не сможет изменить логику работы штатного планировщика процессов). В модулях обязательно должна будет обеспечиваться совместимость с основным ядром на уровне пространства имен символов ядра. Все изменения, затрагивающие основное ядро должны будут продвигаться в upstream.

Дополнительно можно отметить другую инициативу Google, связанную с обеспечением сборки ядра Linux с использованием компилятора Clang. Утверждается, что ядра для устройств Pixel 2 и Pixel 3 уже успешно собираются с использованием Clang. Более того, ядро для Pixel 3 собирается с включением оптимизаций на этапе связывания (LTO) и механизма проверки целостности выполнения программы CFI (Control Flow Integrity). Варианты ядра, собираемые при помощи Clang, также развивают проекты Linaro и CrOS.

Изменения, необходимые для сборки применяемых в Android ядер Linux, уже вклчены в Clang 7.0 и находящуюся в разработке ветку 8.0. Например, добавлена поддержка конструкции "asm goto", применения регистров rN для AArch64, режимов "-fno-delete-null-pointer-checks", "-fcall-used" и "-fcall-saved". Подготовлены патчи для поддержи "__builtin_constant_p". Из достижений на уровне ядра стало избавление от использования в коде массивов переменной длины, реализуемых GCC-расширением VLAiS (Variable Length Arrays, возможность использования переменной в качестве размера при создании массива, например "void foo(int n){ int m[n];").

Android


Свежие новости Украины на сегодня и последние события в мире экономики и политики, культуры и спорта, технологий, здоровья, происшествий, авто и мото

Вверх