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 でバグを作成し、シンボルリストに変更をアップロードします。

OS が Android 11 と 12 で、5.4 カーネルを実行する GKI 1.0 準拠のデバイスがあります。Android 12 および 13 へのアップグレード時に利用可能なカーネル アップグレードのオプションと、このようなデバイスをテストする方法を教えてください。

リリースおよびアップグレード バージョンについては、互換性マトリックスのサポートされているカーネル バージョンのリストを参照してください。アップグレードの例を 2 つ示します。

例 1: android11-5.4 カーネル(GKI 1.0)の Android 11 を搭載するデバイスを持つユーザーは、Android 12 にアップグレードする際、下記のオプションのいずれかを選択できます。

  • android12-5.10 GKI 2.0 カーネルにアップグレードする(強く推奨)。

  • android11-5.4 カーネルのままにする。

  • android12-5.4 カーネルにアップグレードする。

例 2: android12-5.4 または android12-5.10 のいずれかのカーネルの Android 12 を搭載するデバイスを持つユーザーは、Android 13 にアップグレードする際、下記のオプションのいずれかを選択できます。

  • android13-5.10 または android13-5.15 GKI 2.0 カーネルにアップグレードする(強く推奨)。

  • android12-5.4 GKI 1.0 カーネルのままにする。

  • android12-5.10 GKI 2.0 カーネルのままにする。

特に Treble コンプライアンス テストの場合は、次のいずれかを実行することをおすすめします。

  • パートナー カーネルを認証 GKI 1.0 カーネル(android11-5.4 または android12-5.4)で置き換える。

  • 選択に応じて、認証 GKI 2.0 カーネル(android12-5.10android13-5.10、または android13-5.15)を搭載した状態で出荷する。

GKI 2.0 ビルドは汎用カーネル イメージ(GKI)リリースビルドからダウンロードできます。