開発者 eng.stk へのインタビュー パート 1: 起源とカーネル開発

私たちは最近、blu_spark カーネルの開発者である eng.stk にインタビューしました。 前編では、彼の成り立ちや開発の取り組みについて伺います。

最近、XDA シニアメンバーにインタビューする機会がありました。 eng.stk、blu_spark カーネルの開発者。 フォーラムでは、Nexus 5、OnePlus 3/T、OnePlus 5T などの多くのデバイスで利用できます。 このパートでは、eng.stk に開発の起源と、blu_spark カーネルをどのように開発したかについて尋ねます。


まず、自己紹介とカーネルの紹介をします。 あなたのカーネルは競合他社とどのように差別化されていますか? カーネルの変更に対する設計哲学は何ですか? また、どのように取り組んでいますか?

私は eng.stk で、2010 年から XDA を使用しています。 ほとんどの人は、私の code_blue プロジェクトと blu_spark プロジェクトで私を知っています :)

私はいくつかのスクリプトとその他のツール、フレームワーク ハックを作成することから XDA を開始しました。 テーマもたくさん作りました... ここにいる間、私は Purity ROM、Universal Kernel Manager、Kernel Adiutor、そして最近では Magisk や ワイヤーガード いくつか挙げてみます。 最近は TWRP の作業 (特に OnePlus デバイスで)、Magisk モジュール、その他のツール/ハックも行っています。 [それらは] 私のカーネル プロジェクトのライフ サイクル中に役に立ちます (思い起こせば、いくつかの内容は XDA ポータルにありました) 正しく)。 blu_spark カーネルは、単なるカーネルではなく、カーネル、ツールチェーン、リカバリ、テーマ、ツール、スクリプトなどの間の総合的なエクスペリエンスになり始めました。 しかし、カーネル作業が私にとって最も楽しいことであり、私を駆り立てるものです。

私はいつも、機会があればハッキングしたり、コードやスクリプトを構築したりするのを楽しんでいた (電子玩具を分解したり、いとこの Commodore 64 で基本的なコーディングをしたりするのは楽しかった)。 私にとってコーディングは目的を達成するための手段ではなく、他の人たちと同じように、定義された目的を達成するための単なるツールです。 私の仕事のより本格的なものと基礎のほとんどは、思春期か 20 代前半に Linux に出会ったときに完成しました。 その後、大学時代のどこかで、私にとって Android は論理的な次のステップでした。まさに、ハードウェアまたはソフトウェアを自由に遊べる、まさに改造家の夢でした。

blu_spark を説明するのに最適な言葉は、最適化と安定性です。 それを使用する人は、それが信頼できることを知っています。 私のカーネル ビルドは、ある意味「堅苦しい」もので、すぐに利用できる一部のものを削除せず、人々が選択できるようにすべてをオプションのままにする傾向があります。 私はあまり多くのものを追加するのは好きではありません。与えられたフィールドごとに最適と思われるものを変更または追加するだけです。 CPU 周波数ドライバー、IO スケジューラー、ネットワーク プロトコル、ファイル システムなどを調整したり、特定のパラメーターやアップストリームのいくつかのドライバーの調整パラメータを微調整したりして、最良の結果を得ることができます。 また、主にアーキテクチャを最大限に活用するために、カスタム メイドのツールチェーン (GCC の素晴らしい解釈である Linaro からのもの) も構築します。

要するに、ほとんどの人は、デバイス上でカーネルをフラッシュした瞬間から、自分が blu_spark を使用していることを認識します。 私は常に新しいものや、可能な限り最高の UX を提供する方法を探しています。 無事に。

あなたの blu_active ガバナーについて教えてください。 それは何ですか、何をしますか、そしてなぜ特別なのでしょうか?

blu_active と blu_spark を混同する人がいることは知っています。 blu_active は、私が行っている残りのすべての作業と比較すると、ほんの一部に過ぎません。

CPU ガバナーは基本的に、システムのニーズに応じて CPU 周波数を増減する決定を行います。 知事は発足以来、いくつかの変更と突然変異を経験しました。 他のことと同じように、自分のニーズを満たすものが必要でした。 これは私のお気に入りのガバナー、インタラクティブガバナーをベースにしています。 最初は上流のものをいくつか追加するだけでしたが、その後、CAF アップデートや他のガバナーで見た便利なロジックなど、他のものを追加し始めました。 また、HMP 互換性やその他の優れた機能も追加しました。

最新のイテレーションは Google の Linux 4.4 Android ブランチに基づいており、いくつかのアップストリームと CAF の修正も加えられていますが、以前よりもはるかにスリムになっています。 あるものは最大限に使い、ないものは取り除くだけです。 私は常に純正設定よりもバッテリーの消耗を減らし、バッテリーの消耗を減らすよう努めています。 パフォーマンス (人工的なパフォーマンスではなく、目と指で感じる実際のパフォーマンス) ツール)。

ある時点で、私は人々が簡単な方法でパフォーマンスを試しられるように、シンプルな調整機能を望んでいました。 こうしてファストレーンが誕生しました:)。 このロジックはホンダの VTEC の動作方法に似ており、指定されたしきい値からのタイミングを調整します。 したがって、単純なスイッチと可変のしきい値を使用して、より直接的かつ積極的な CPU 周波数スケーリングを行うことができます。 システム負荷に応じて遅かれ早かれ入力し、ターゲット負荷をバイパスします。 HMP と完全に互換性があり、ユーザーのニーズに応じてクラスターごとに調整したり、実行されるデバイスごとに細かく調整したりできます。

OEM が提供する組み込みメカニズムや微調整のうち、好きなものと嫌いなものは何ですか? つまり、クアルコムの入力ブーストです。

HAL (ハードウェア抽象化レイヤー)、ハードコードされたフレームワークなどに設定されている一部のユーザースペース ブーストやその他の調整可能パラメータは、煩わしい場合があります。 もちろん、カーネル開発者はこれらのいくつかを回避していることが知られています。たとえば、Nexus 5 では、ほとんどの人が mpdecision を削除し、カスタム ホットプラグを入手しました。当時は blu_plug が導入されていました。 他の一部のデバイスでは、温度管理が不十分で、温度レベル、緩和周波数などについて sysfs を使用したカスタム温度制御が行われていました。 一部の最近のデバイスには、バッテリー、コアの取り外し、その他の「低レベル」に関する厳しいポリシーがあり、デバイスの使用量が実際には増加しませんでした。 実際のところ、それによってユーザー エクスペリエンスが台無しになることもあるため、CTL および BCL テクノロジを抑制する必要がありました。

また、デバイスの暗号化を削除することが重要だったときのことも覚えています。SELinux の反復ですべての変更が導入され、以前のハッキングが別の方法で機能するようになりました... 最近の Android のセキュリティ変更には、常に課題が伴います。 これらには AVB (一部の部分は主に dm-verity として知られています) が含まれます。 他のいくつかの変更により、以前と同じ場所にアクセスできないため、調整パラメータと sysfs の場所に制限が加えられ、移動する必要がありました。 これらの制限のほとんどはストック ROM (私はほとんどの作業を行っています) により関連しており、通常、これにより道が開かれ、(制限が低い) カスタム ROM に関しては簡単になります。

Qualcomm Snapdragon 820 や 835 などの最近の SoC では、一部の OEM はユーザースペースからのブーストを追加しており、これは歓迎されており、システムの盲点に対処していますが、すべての OEM が悪いわけではありません。 カーネル ソースに関しては、ソースがクリーンで文書化されているほど優れています。

他にどのような機能を搭載したいと考えていますか? 高度なカラーコントロールなど。

私は通常、個人的に使用しないものや役に立たないと思うものは含めません。 blu_active 以外に私がやりたいことには、アーキテクチャの最適化と修正、暗号化関連の更新、IO スケジューリングなどが含まれます。 ストレージ/ファイルシステムグッズ、KCAL、USB高速充電、振動強度、バッテリー/通知LED制御、Wakelockブロッカー、WireGuard、 等 先ほども述べたように、私は常にカスタム ビルド ツールチェーンを使用してビルドします。

カーネルにはどのようなテスト方法を使用していますか? ユーザーレポート、ベンチマーク、その他のカスタムルーチンを使用していますか?

私は開発に使用したすべての携帯電話を所有しているため、変更は常に私自身でテストされます。 私は毎日あらゆるデバイスを長時間運転するので、自分に合わないものは他の人にも適さないはずです。 私がビルドを公開リリースするとき、私や有益なフィードバックを提供してくれると私が信頼している他の人たちからの多くのテストがすでに行われています。 常にすべての機能が正常に動作することに飽きてしまうユーザーもいることは承知していますが、私は何よりも安定性を重視しています。常にユーザーの立場に立って考えています。

私は合成テストではなく、実際のユースケースに向けて物事を実行します。 この種のソフトウェアは、バックオフィスの機械ではなく、人間のために作られています。 あらゆる面で、スタート地点は常にストック経験よりも優れていますが、私は最新の Antutu ハイスコアをそれほど重視していません。 私のカーネルはこの種のベンチマークに合わせて調整できますが、それが私の最終目標ではありません。 私は、IO ストレージ テストなど、より直接的なベンチマークを重視しています。 たとえば、最近行われた変更を迅速にアサートする方法を提供できます。

安定したベースラインを確保できるように、ストック ROM を使用してテストを行っています。 私はカスタム ROM のカスタム ビルドを行っていますが、エクストラ、ナイトリー、さらには追加されたカスタム ROM の揮発性の性質により、 一部の機能には実装の違いがあるため、それらをすべてカバーして全員に適切なサポートを提供することは不可能です。 残念ながら。

また、特定のものをテストするため、またはベータ ROM または開発者プレビューへのビルドを起動するときのために、ベータ ビルドをビルドすることもあります。 私は Nexus と OnePlus デバイスでそれを行いました。人々は時々何かをテストするのが好きです:)


パート 2 をご覧ください: F2FS、EAS、およびカーネル開発者を目指すためのヒント