Интервью с разработчиком rus.stk Часть 1: Истоки и разработка ядра

Недавно мы взяли интервью у eng.stk, разработчика ядра blu_spark. В этой части мы спрашиваем его о его происхождении и развитии.

Недавно у меня появилась возможность взять интервью у старшего члена XDA. англ.stk, разработчик ядра blu_spark. На наших форумах он доступен на многих устройствах, включая Nexus 5, OnePlus 3/T и OnePlus 5T. В этой части мы расспрашиваем eng.stk о его происхождении в разработке и о том, как он разрабатывает ядро ​​blu_spark.


Итак, сначала представьтесь и представьтесь своему ядру. Чем ваше ядро ​​отличается от конкурентов? Какова ваша философия разработки изменений ядра и как вы их реализуете?

Я eng.stk и работаю на XDA с 2010 года. Большинство из вас знают меня по моим проектам code_blue и blu_spark :)

Я начал на XDA с написания нескольких скриптов и разных инструментов, а также хаков фреймворка. Я также сделал много тем... За время моего пребывания здесь я также напрямую сотрудничал с некоторыми проектами, такими как Purity ROM, Universal Kernel Manager, Kernel Adiutor, а с недавних пор — Magisk и
WireGuard Просто назвать несколько. В последнее время я также работаю над TWRP (особенно на устройствах OnePlus), модулями Magisk и другими инструментами/хаками. [которые] полезны в течение жизненного цикла моих проектов ядра (некоторые вещи размещались на портале XDA, если я помню правильно). Ядро blu_spark стало не просто ядром, но и комплексным взаимодействием между ядром, цепочками инструментов, восстановлением, темами, инструментами, скриптами и т. д. Но работа с ядром — это то, что мне нравится больше всего и что меня мотивирует.

Мне всегда нравилось хакать и создавать код/скрипты, когда у меня была такая возможность (разбирать электронные игрушки и базовое программирование на Commodore 64 моего кузена было весело). Для меня программирование — это не средство для достижения цели, а просто инструмент, подобный некоторым другим, для достижения определенной цели. Большая часть моих более серьезных вещей и основ моей работы была заложена, когда я открыл для себя Linux, когда мне было около двадцати лет. Позже, где-то во времена университета, Android стал для меня логическим следующим шагом: настоящая мечта мастера, где с аппаратным или программным обеспечением можно было много играть.

Лучшие слова для описания blu_spark — оптимизация и стабильность. Люди, которые его используют, знают, что на него можно положиться. Мои сборки ядра несколько «стандартные», в том смысле, что я стараюсь не удалять некоторые вещи, доступные из коробки, оставляя все необязательным, чтобы люди могли выбирать. Мне не нравится добавлять слишком много вещей, я просто меняю или добавляю то, что считаю лучшим для каждой конкретной области. Драйвер частоты процессора, планировщик ввода-вывода, сетевые протоколы, файловые системы и т. д., или настройте некоторые параметры для некоторых заданных параметров, или добавьте некоторые драйверы для достижения наилучшего результата. Я также создаю специальные наборы инструментов (от Linaro, отличный вариант GCC), главным образом для того, чтобы максимально эффективно использовать архитектуру.

В итоге большинство людей знают, что они используют blu_spark, с того момента, как прошивают ядро ​​на устройстве. Я всегда ищу что-то новое и способы обеспечить наилучший UX. Безопасно.

Расскажите нам о своем губернаторе blu_active! Что это такое, что он делает и почему он особенный?

Я знаю, что люди иногда путают blu_active с blu_spark. blu_active — это лишь малая часть по сравнению со всей остальной [работой], которую я делаю.

Губернатор ЦП в основном принимает решения о повышении или понижении частоты ЦП в соответствии с потребностями системы. С момента его создания в губернаторе произошло несколько изменений и мутаций. Как и все остальное, что я делаю, мне нужно было что-то, что удовлетворяло бы мои потребности. Он основан на моем любимом губернаторе — интерактивном губернаторе. Вначале я просто добавлял в него кое-что из исходного кода, но затем начал добавлять и другие вещи, такие как обновления CAF или логику, которую я видел в других регуляторах, и которые считаю полезными. Я также добавил совместимость с HMP и некоторые другие вкусности.

Последняя итерация основана на ветке Google Linux 4.4 Android, с некоторыми исправлениями исходной версии и CAF, но гораздо более компактной, чем раньше. Просто используйте в полной мере то, что у вас есть, уберите то, чего у вас нет. Я всегда стараюсь получить лучшую батарею, чем со стоковыми настройками, уменьшая расход, одновременно пытаясь улучшить производительность (реальная производительность, та, которую чувствуешь глазами и пальцами, а не синтетическими инструменты).

В какой-то момент мне захотелось иметь простую настройку, чтобы люди могли легко экспериментировать с производительностью. Так родился Fastlane :). Логика чем-то похожа на то, как работает Honda VTEC: играть таймингами от заданного порога. Таким образом, с помощью простого переключателя и переменного порогового значения люди могут получить более прямое и агрессивное масштабирование частоты процессора. Заставить его входить раньше или позже в зависимости от загрузки системы, минуя целевые нагрузки. Он полностью совместим с HMP и может быть настроен для каждого кластера в соответствии с потребностями пользователей, а также точно настроен для каждого устройства, на котором он работает.

Какие встроенные механизмы или настройки, предлагаемые OEM-производителями, вам нравятся/не нравятся? то есть усиление входного сигнала Qualcomm.

Некоторые улучшения пользовательского пространства и другие настройки, установленные в HAL (уровнях аппаратной абстракции), жестко закодированных компонентах фреймворка и т. д. иногда могут раздражать. Конечно, разработчики ядра, как известно, обходят некоторые из этих проблем. Например, на Nexus 5 большинство из нас избавились от mpdecision и получили собственный горячий плагин - в то время у нас был blu_plug. У некоторых других устройств было плохое управление температурным режимом и специальный термоконтроль с sysfs для уровней температуры, частоты смягчения и т. д. В некоторых более поздних устройствах действуют жесткие политики в отношении батареи, отключения ядер и других вещей на «низких уровнях», которые не приносят реального увеличения использования устройства. На самом деле иногда это даже портило пользовательский опыт, поэтому пришлось приручить технологии CTL и BCL.

Я также помню, как удаляли шифрование на устройствах, когда это было важно, все изменения, итерации SELinux внесли изменения, из-за которых предыдущие хаки работали по-другому... некоторые недавние изменения в безопасности Android представляют собой постоянную проблему. К ним относится AVB (некоторые части в основном известны как dm-verity). Некоторые другие изменения наложили ограничения на места настроек и sysfs, которые пришлось переместить, поскольку у нас нет доступа к тем местам, которые у нас были раньше. Большинство из этих ограничений более актуальны для стандартных ПЗУ (на которых я выполняю большую часть своей работы), обычно это прокладывает путь и упрощает работу, когда дело доходит до пользовательских ПЗУ (где ограничения ниже).

В последние SoC, такие как Qualcomm Snapdragon 820 и 835, некоторые OEM-производители добавили некоторые улучшения из пользовательского пространства, которые приветствуются и устраняют слепые зоны в системе. Не все OEM-продукты плохи. Когда дело доходит до исходного кода ядра, чем чище и документирован исходный код, тем лучше.

Какие еще функции вы хотели бы включить? Например, расширенное управление цветом и так далее.

Обычно я не включаю материалы, которыми лично не пользуюсь или которые не считаю полезными. То, что мне нравится делать, помимо blu_active, включает в себя оптимизацию и исправления архитектуры, обновления криптографических материалов, планирование ввода-вывода и многое другое. особенности хранилища/файловой системы, KCAL, быстрая зарядка USB, сила вибрации, светодиодное управление батареей/уведомлениями, блокировщики Wakelock, WireGuard, и т. д. Как я уже говорил ранее, я всегда использую специальную цепочку инструментов сборки.

Какую методологию тестирования вы используете для своего ядра? Используете ли вы пользовательские отчеты, тесты или какие-либо другие специальные процедуры?

У меня есть каждый телефон, для которого я разрабатываю, поэтому любые изменения всегда проверяются мной. Поскольку я ежедневно езжу на каждом устройстве в течение длительного периода времени, все, что я считаю неподходящим для себя, не должно подходить никому другому. Когда я публично выпускаю сборку, она уже прошла множество тестов со стороны меня и некоторых других людей, которым я доверяю и которые могут предоставить полезные отзывы. Я знаю, что иногда некоторым пользователям надоедает постоянно работать так, как должно, но я ценю стабильность превыше всего: в первую очередь я всегда ставлю себя на место пользователя.

Я провожу все в соответствии с реальным вариантом использования, а не синтетическими тестами. Такое программное обеспечение создано для людей, а не для машин в бэк-офисе. Начальная точка всегда лучше, чем стандартный опыт, по всем фронтам, но я не особо ценю последний высокий балл Antutu. Мои ядра можно настроить на такой тест, но это не моя конечная цель. Я ценю некоторые более прямые тесты, например, тестирование хранилища ввода-вывода. Они могут дать быстрый способ, например, подтвердить некоторые недавно сделанные изменения.

Я провожу тестирование на стандартных ПЗУ, чтобы иметь стабильную основу для всего. Я делаю пользовательские сборки для пользовательских ПЗУ, но из-за нестабильного характера пользовательских ПЗУ с добавлением дополнений, ночных программ и даже разница в реализации некоторых функций, невозможно охватить их все и обеспечить каждому надлежащую поддержку, к сожалению.

Я также иногда создаю бета-версии для тестирования чего-то конкретного или для запуска сборок для бета-версий или предварительных версий для разработчиков. Я сделал это на устройствах Nexus и OnePlus, люди иногда любят что-то тестировать :)


Ознакомьтесь с частью 2: F2FS, EAS и советы для начинающих разработчиков ядра.