安定したカーネルモジュールインターフェイス(KMI)を維持する

ベンダーモジュールの安定したKMIを維持することが重要です。 GKIカーネルはバイナリ形式で構築および出荷され、ベンダーがロード可能なモジュールは別のツリーに構築されます。結果として得られるGKIカーネルとベンダーモジュールは、一緒に構築されたかのように機能する必要があります。

一般的に、Linuxコミュニティは、メインラインカーネルのカーネル内ABI安定性の概念に眉をひそめています。さまざまなツールチェーン、構成、および進化し続けるLinuxメインラインカーネルに直面して、メインラインで安定したKMIを維持することは現実的ではありません。ただし、次の制約があるため、高度に制約されたGKI環境で安定したKMIを維持することができます。

  • カーネルの構築に使用できる構成は、 gki_defconfigの1つだけです。

  • KMIは、 android13-5.15android13-5.10android12-5.10などの同じLTSおよびAndroidバージョンのカーネル内でのみ安定しています。

    • android-mainlineではKMIの安定性は維持されません。
  • カーネルとモジュールの構築には、AOSPで提供され、対応するブランチ用に定義された特定のClangツールチェーンのみが使用されます。

  • シンボルリストで指定されているようにモジュールによって使用されることがわかっているシンボルのみが安定性について監視され、KMIシンボルと見なされます。

    • 当然の結果として、ベンダーモジュールはKMIシンボルのみを使用する必要があります。この制約は、KMI以外のシンボルが必要な場合に、モジュールのロードに失敗することによって適用されます。
  • KMIブランチがフリーズした後、変更は許可されますが、KMIを壊すことはできません。これらの変更には、次のものが含まれます。

    • 構成の変更
    • カーネルコードの変更
    • ツールチェーンの変更(更新を含む)

ハーメチックビルドプロセスとLLVMツールチェーンを使用する

ハーメチックビルドプロセスは、 kernel/manifestrepoマニフェストにビルド環境を完全に記述させることにより、安定したKMIを保証します。たとえば、 android13-5.15のマニフェストには、ツールチェーン、ビルドスクリプト、およびGeneric Kernel Image(GKI)カーネルのビルドに必要なその他すべてが含まれています。 GKIビルド構成build.config.gki.aarch64などのそれぞれのbuild.config構成ファイルは、含まれているツールが一貫したビルド結果を生成するために正しく使用されていることを確認します。

ハーメチックビルドプロセスを使用すると、ツリーのABI記述が、Googleによって生成されたか(たとえば、 abi_gki_aarch64.xml場合はandroid13-5.15 )、ベンダーモジュールを含むローカルツリーで生成されたかにかかわらず、一貫性が保たれます。カーネルモジュールインターフェイス(KMI)のABI記述も、マニフェストによって記述されたリポジトリの一部として提供されます。

GKIカーネルの構築に使用されるツールチェーンは、ベンダーモジュールの構築に使用されるツールチェーンと完全に互換性がある必要があります。 Android 10以降、すべてのAndroidカーネルはLLVMツールチェーンを使用して構築する必要があります。 GKIでは、製品カーネルとベンダーモジュールの構築に使用されるLLVMツールチェーンがAOSPからのLLVMツールチェーンと同じABIを生成する必要があり、パートナーはKMIがGKIカーネルと互換性があることを確認する必要があります。提供されているビルドツールを使用すると、互換性が保証されるため、使用することを強くお勧めします。

次は何ですか?

  • ハーメチックビルドプロセスとLLVMツールチェーンを使用してカーネルをビルドする手順については、カーネルのビルドを参照してください。

  • ABIを監視して問題を修正する方法については、 AndroidカーネルのABI監視を参照してください。