Нещодавно ми взяли інтерв’ю у eng.stk, розробника ядра blu_spark. У цій частині ми запитуємо його про його походження та розвиток.
Нещодавно я отримав можливість взяти інтерв’ю у старшого члена XDA англ.стк, розробник ядра 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 і поради для початківців розробників ядра