Инициатива по передаче в основное ядро Linux специфичных для Android изменений
В настоящее время в устройствах с платформой Android применяются отдельные модифицированные ветки ядра, на поддержание которых тратятся большие ресурсы. Разработчики из компании Google возобновили попытки переноса в основное ядро Linux изменений, развиваемых в варианте ядра для платформы Android. Первые попытки передачи в основное ядро всех специфичных для Android исправлений были предприняты в 2010 и 2011 годах, но привели лишь к частичной передаче кода.
В свою очередь разработчики Android смогут существенно упростить сопровождение ядра для Android, избавившись от трудоёмкого процесса переноса исправлений ошибок в старые Android-ядра и портирования изменений при подготовке очередной новой ветки ядра для Android. Разработка всех развиваемых для Android дополнений в основном ядре даст возможность пользователям и авторам прошивок применять свежие выпуски обычного ядра Linux, не ограничиваясь ядрами, предлагаемыми Google.
Отличия ядер для Android включают как необходимые для платформы изменения (MTP/PTP, параноидальный режим для сетевой подсистемы, интерактивный cpufreq governor, EAS (Energy Aware Scheduling)), так и изменения для поддержки оборудования, продвигаемые поставщиками устройств (sdcardfs, специфичные драйверы). Последнее стабильное ядро для Android базируется на выпуске 4.14, но сохраняется поддержка веток 3.18, 4.4 и 4.9, которые продолжают применяться в актуальных прошивках на основе Android 8.
Команда сопровождающих ядро для Android теперь пытается вначале продвинуть изменения в основное ядро перед публикацией, а также ведёт работу по решению проблем и уязвимостей непосредственно в upstream. Судя по прозвучавшему на конференции Linux Plumbers Conference 2018 докладу, в последнее время процесс синхронизации с основным ядром существенно продвинулся вперёд и возможность использования обычного ядра Linux вместе с Android, хоть ещё не достигнута, но уже достаточно близка к воплощению.
Из целей на будущее отмечается перенос модулей ashmem и ion из дерева staging, улучшение использования в Android структуры «Device Tree», решение проблемы с наследованием приоритетов в binder и перенос кода EAS (Energy Aware Scheduling) и SDCardFS в основное ядро. В текущем виде число специфичных изменений в Android Common Kernel, необходимых для загрузки платформы Android, сокращено до 30 патчей, охватывающих 6500 строк кода (ранее размер изменений достигал нескольких миллионов строк).
Для исправления ситуации Google развивает систему Treble, позволяющую производителям создавать универсальные компоненты поддержки оборудования, не привязанные к конкретным версиям Android и используемым выпускам ядра Linux. Несмотря на то, что Google регулярно выпускает обновления своих Android-ядер (Android Common Kernel), часто поставщики не спешат поставлять эти обновления или вообще используют одно ядро на протяжении всего жизненного цикла устройства. Для стимулирования доставки обновлений Google намерен применить административный ресурс на уровне отдельного требования в OEM-соглашении. Treble даёт возможность использовать в качестве основы уже готовые обновления от Google, интегрируя в них специфичные для конкретного устройства компоненты.
Компоненты для поддержки оборудования должны будут поставляться поставщиками в только в виде дополнительных модулей ядра, без возможности использования патчей для изменения основного ядра (например, поставщик не сможет изменить логику работы штатного планировщика процессов). В конечном счёте, Google планирует предложить поставщикам базовое ядро на основе свежей кодовой базы основного ядра Linux. Все изменения, затрагивающие основное ядро должны будут продвигаться в upstream. В модулях обязательно должна будет обеспечиваться совместимость с основным ядром на уровне пространства имён символов ядра.
Утверждается, что ядра для устройств Pixel 2 и Pixel 3 уже успешно собираются с использованием Clang. Дополнительно можно отметить другую инициативу Google, связанную с обеспечением сборки ядра Linux с использованием компилятора Clang. Варианты ядра, собираемые при помощи Clang, также развивают проекты Linaro и CrOS. Более того, ядро для Pixel 3 собирается с включением оптимизаций на этапе связывания (LTO) и механизма проверки целостности выполнения программы CFI (Control Flow Integrity).
Например, добавлена поддержка конструкции «asm goto», применения регистров rN для AArch64, режимов »-fno-delete-null-pointer-checks»,»-fcall-used» и »-fcall-saved». Изменения, необходимые для сборки применяемых в Android ядер Linux, уже включены в Clang 7.0 и находящуюся в разработке ветку 8.0. Из достижений на уровне ядра стало избавление от использования в коде массивов переменной длины, реализуемых GCC-расширением VLAiS (Variable Length Arrays, возможность использования переменной в качестве размера при создании массива, например «void foo (int n){ int m[n];»). Подготовлены патчи для поддержи »__builtin_constant_p».
В свою очередь разработчики Android смогут существенно упростить сопровождение ядра для Android, избавившись от трудоёмкого процесса переноса исправлений ошибок в старые Android-ядра и портирования изменений при подготовке очередной новой ветки ядра для Android. Разработка всех развиваемых для Android дополнений в основном ядре даст возможность пользователям и авторам прошивок применять свежие выпуски обычного ядра Linux, не ограничиваясь ядрами, предлагаемыми Google.
В настоящее время в устройствах с платформой Android применяются отдельные модифицированные ветки ядра, на поддержание которых тратятся большие ресурсы. Разработчики из компании Google возобновили попытки переноса в основное ядро Linux изменений, развиваемых в варианте ядра для платформы Android. Первые попытки передачи в основное ядро всех специфичных для Android исправлений были предприняты в 2010 и 2011 годах, но привели лишь к частичной передаче кода.
Команда сопровождающих ядро для Android теперь пытается вначале продвинуть изменения в основное ядро перед публикацией, а также ведёт работу по решению проблем и уязвимостей непосредственно в upstream. Судя по прозвучавшему на конференции Linux Plumbers Conference 2018 докладу, в последнее время процесс синхронизации с основным ядром существенно продвинулся вперёд и возможность использования обычного ядра Linux вместе с Android, хоть ещё не достигнута, но уже достаточно близка к воплощению.
Отличия ядер для Android включают как необходимые для платформы изменения (MTP/PTP, параноидальный режим для сетевой подсистемы, интерактивный cpufreq governor, EAS (Energy Aware Scheduling)), так и изменения для поддержки оборудования, продвигаемые поставщиками устройств (sdcardfs, специфичные драйверы). Последнее стабильное ядро для Android базируется на выпуске 4.14, но сохраняется поддержка веток 3.18, 4.4 и 4.9, которые продолжают применяться в актуальных прошивках на основе Android 8.
Для исправления ситуации Google развивает систему Treble, позволяющую производителям создавать универсальные компоненты поддержки оборудования, не привязанные к конкретным версиям Android и используемым выпускам ядра Linux. Несмотря на то, что Google регулярно выпускает обновления своих Android-ядер (Android Common Kernel), часто поставщики не спешат поставлять эти обновления или вообще используют одно ядро на протяжении всего жизненного цикла устройства. Для стимулирования доставки обновлений Google намерен применить административный ресурс на уровне отдельного требования в OEM-соглашении. Treble даёт возможность использовать в качестве основы уже готовые обновления от Google, интегрируя в них специфичные для конкретного устройства компоненты.
Из целей на будущее отмечается перенос модулей ashmem и ion из дерева staging, улучшение использования в Android структуры «Device Tree», решение проблемы с наследованием приоритетов в binder и перенос кода EAS (Energy Aware Scheduling) и SDCardFS в основное ядро. В текущем виде число специфичных изменений в Android Common Kernel, необходимых для загрузки платформы Android, сокращено до 30 патчей, охватывающих 6500 строк кода (ранее размер изменений достигал нескольких миллионов строк).
Утверждается, что ядра для устройств Pixel 2 и Pixel 3 уже успешно собираются с использованием Clang. Дополнительно можно отметить другую инициативу Google, связанную с обеспечением сборки ядра Linux с использованием компилятора Clang. Варианты ядра, собираемые при помощи Clang, также развивают проекты Linaro и CrOS. Более того, ядро для Pixel 3 собирается с включением оптимизаций на этапе связывания (LTO) и механизма проверки целостности выполнения программы CFI (Control Flow Integrity).
Компоненты для поддержки оборудования должны будут поставляться поставщиками в только в виде дополнительных модулей ядра, без возможности использования патчей для изменения основного ядра (например, поставщик не сможет изменить логику работы штатного планировщика процессов). В конечном счёте, Google планирует предложить поставщикам базовое ядро на основе свежей кодовой базы основного ядра Linux. Все изменения, затрагивающие основное ядро должны будут продвигаться в upstream. В модулях обязательно должна будет обеспечиваться совместимость с основным ядром на уровне пространства имён символов ядра.
Например, добавлена поддержка конструкции «asm goto», применения регистров rN для AArch64, режимов »-fno-delete-null-pointer-checks»,»-fcall-used» и »-fcall-saved». Изменения, необходимые для сборки применяемых в Android ядер Linux, уже включены в Clang 7.0 и находящуюся в разработке ветку 8.0. Из достижений на уровне ядра стало избавление от использования в коде массивов переменной длины, реализуемых GCC-расширением VLAiS (Variable Length Arrays, возможность использования переменной в качестве размера при создании массива, например «void foo (int n){ int m[n];»). Подготовлены патчи для поддержи »__builtin_constant_p».
Дата публикации: 22.11.2018
Ещё новости
27.08.2022 В океане обнаружены колоссальные залежи сахара, о существовании которых не знали даже эксперты
Это означает, что концентрация сахара на морском дне примерно в 80 раз выше, чем в обычной почве. Сахар поступает в виде сахарозы (основного ингредиента сахара, используемого на кухне), и высвобождает...
27.08.2022 Российское приложение определит депрессию у человека по его манере говорить
Главное нововведение — это алгоритм на основе нейросетей, которые сможет анализировать речь человека и предупреждать, если ему необходимо обратиться к врачу. Отечественные исследователи из Сеченовског...
09.11.2022 Перспективный «Москвич» уже появился в Казахстане? В соседней стране начали продавать JAC JS4 – ожидается, что его производство наладят в Москве на бывшем заводе Renault
Еще летом появились слухи, что эту же модель будут производить на московском заводе «Москвич», а недавняя неразбериха с российским анонсом JS4 лишь укрепила во мнении, что автомобиль действительно буд...
26.08.2022 20 000 потоковых процессоров, 36 ГБ памяти и шина разрядностью 512 бит. AMD работает над видеокартой-монстром, но она выйдет нескоро
Информатор приписывает ей компоновку с 13 (!) чиплетами: четырьмя модулями GCD (Graphics Compute Dies) и девятью MCD (Memory Complex Dies). Инсайдер принес очень интересные новости относительно перспе...
27.08.2022 Власти Италии обратились к экстрасенсу, чтобы тот спас всех от засухи
Такое решение вызвано серьезными последствиями аномальной жары лета 2022 года: два из пяти источников воды коммуны пересохли. В северном регионе Италии, коммуна Баярдо, Лигурия, местные власти обрати...
Все новости