Androidカーネルのよくある質問

このドキュメントには、Generic Kernel Image(GKI)カーネルとも呼ばれるAndroidカーネルに関するよくある質問が含まれています。 GKIおよびGKIカーネルの用語に慣れていない場合は、カーネルの概要を参照してください。

安定したカーネルでカーネルモジュールインターフェイス(KMI)シンボルリストを変更できますか?

既存のKMIに影響を与えない変更は、凍結されているカーネルに追加できます。これらの変更には、新しくエクスポートされた関数とシンボルリストエントリが含まれます。詳細については、シンボルリストの管理を参照してください。

安定したカーネルのベンダーモジュールで使用される構造を変更できますか?

KMIインターフェースの一部である構造は、凍結されたKMIを持つカーネルでは変更できません。 KMIがフリーズする前に、これらの構造を変更できます。

バイナリ/ソースの互換性を壊さない限り、カーネルを変更できますか?

KMIに影響を与えない変更は、 Android固有のパッチで説明されているように行うことができます。

GKIはカーネル構成をどのように処理しますか?

カーネル構成については、 gki_defconfigの変更を参照してください。

既存のGKIモジュールへの上書きのアップストリームバグ修正を処理するにはどうすればよいですか?

Android Common Kernel(ACK)のドライバーに基づいてベンダーモジュールを作成する場合、アップストリームからのバグ修正とACKがモジュールに確実に伝達されるようにするのはあなた次第です。一般に、GKIカーネルとGKIモジュールを変更せずに使用することが最善の利益であるため、これらの更新はGoogleによって一貫して提供されます。

GKI固有のテストはありますか?

認定されたGKIビルドがインストールされていることを確認し、リリースごとのGKI要件を適用するベンダーテストスイート(VTS)テストがあります。たとえば、ブートヘッダーv3用のAndroid 12 VTSテストがあり、5.10カーネルを実行しているデバイスに必要なパーティションが存在することを確認します。

デバイスビルド用のプロジェクトdefconfigフラグメントファイルを作成するにはどうすればよいですか?

多くのGKI準拠デバイスは、ベンダーモジュールを構築するために、 gki_defconfigに加えて、必要な構成オプションを記述するために構成フラグメントを使用します。 ACKコードベースの一部である例には、CuttlefishやDB845cが含まれます。フラグメントを最適化するための構成オプションの手動検査を回避する方法はありませんが、カーネルソースのscripts/diffconfigは、 gki_defconfiggki_defconfig+device.fragmentの結果を比較するのに役立ちます。

modprobeで-と_を同等に扱うための回避策はありますか?

modprobeのマニュアルページには次の説明が含まれています。「 modprobeはLinuxカーネルにモジュールをインテリジェントに追加または削除します。便宜上、モジュール名に_と-の違いはありません(自動アンダースコア変換が実行されます)。」 GKIチームは標準のアップストリーム規則に準拠しているため、ベンダーツールまたはモジュールの命名規則ではこの準拠を考慮に入れる必要があります。

内部使用のためにdebugfsを有効にするにはどうすればよいですか?

debugfsの有効化の詳細については、侵入型のダウンストリームデバッグ機能を参照してください。

特定のモジュール構成が有効になっているGKIカーネル間の不一致のABIを解決するにはどうすればよいですか?

GKIカーネルとモジュール構成の間のABIの不一致は、暗黙的なモジュール構成の依存関係を表します。モジュールを有効にすると、バイナリ構成が結果のカーネルイメージに組み込まれます。 Androidカーネルチーム( kernel-team@android.com )に連絡して、今後のパスを決定してください。シンボルのリストが決定したら、 Issue Trackerでバグを作成し、シンボルリストに変更をアップロードします。