Android カーネルに関するよくある質問

このドキュメントでは、Android カーネル(汎用カーネル イメージ(GKI)カーネル)に関するよくある質問について説明します。GKI と GKI カーネルの用語に慣れていない場合は、カーネルの概要をご覧ください。

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

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

安定版のカーネルでベンダー モジュールが使用する構造を変更することはできますか?

KMI インターフェースの一部となっている構造は、KMI が固定されたカーネルでは変更できません。これらの構造は KMI を固定する前に変更できます。

バイナリとソースの互換性を損なわない範囲でカーネルを変更できますか?

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

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

カーネル設定については、gki_defconfig の変更点をご覧ください。

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

Android 共通カーネル(ACK)内のドライバに基づいてベンダー モジュールを作成する場合、アップストリームと ACK からのバグ修正をモジュールに反映させるのはユーザー側の処理となります。一般的には、GKI カーネルと GKI モジュールを変更せずに使用することをおすすめします。これにより、Google によってこれらのアップデートが一貫して提供されます。

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

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

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

多くの GKI 準拠デバイスは、config フラグメントを使用して、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 でバグを作成し、シンボルリストに変更をアップロードします。