Android カーネルは、アップストリームの Linux 長期サポート(LTS)カーネルに基づいています。Google では、LTS カーネルは Android 固有のパッチと組み合わされ、Android 共通カーネル(ACK)と呼ばれるカーネルを形成しています。
新しい ACK(バージョン 5.4 以降)は、GKI カーネルとも呼ばれます。これは、ハードウェアに依存しない汎用コアカーネル コードとハードウェア固有の GKI モジュールの分離をサポートするためです。GKI カーネルは、システム オン チップ(SoC)とボード固有のコードを含むハードウェア固有のベンダー モジュールとやり取りします。GKI カーネルとベンダー モジュール間のインタラクションは、ベンダー モジュールに必要な機能とグローバル データを識別するシンボルリストで構成されるカーネル モジュール インターフェース(KMI)によって可能になっています。図 1 に、GKI カーネルとベンダー モジュールのアーキテクチャを示します。
カーネル用語集
このセクションでは、カーネル ドキュメント全体で使用される用語について説明します。
カーネルタイプ
- Android 共通カーネル(ACK)
- LTS カーネルのダウンストリームのカーネルであり、Linux メインラインまたは長期サポート(LTS)カーネルにはマージされていないものの Android コミュニティにとって関心のあるパッチが含まれています。新しい ACK(バージョン 5.4 以降)は、GKI カーネルとも呼ばれます。これは、ハードウェアに依存しない汎用カーネルコードとハードウェアに依存しない GKI モジュールの分離をサポートするためです。
- Android オープンソース プロジェクト(AOSP)カーネル
- Android 共通カーネルをご覧ください。
- 機能カーネル
- プラットフォーム リリース機能の実装が保証されているカーネル。たとえば、Android 12 の 2 つの機能カーネルは android12-5.4 と android12-5.10 でした。Android 12 の機能は、4.19 カーネルにバックポートできません。機能セットは、R で 4.19 を搭載してリリースされ、S にアップグレードされたデバイスと同様です。
- 汎用コアカーネル
- すべてのデバイスに共通する GKI カーネルの一部。
- 汎用カーネル イメージ(GKI)カーネル
- 新しい(5.4 以降の)ACK カーネル(現在は aarch64 のみ)。このカーネルには、すべてのデバイスに共通するコードを含むコア GKI カーネルと、必要に応じてデバイスに動的に読み込むことができる Google で開発された GKI モジュールという 2 つの部分があります。
- カーネル モジュール インターフェース(KMI)カーネル
- GKI カーネルをご覧ください。
- ローンチ カーネル
- 特定の Android プラットフォーム リリースでデバイスを起動するために有効なカーネル。たとえば、Android 12 の有効なローンチ カーネルは 4.19、5.4、5.10 でした。
- 長期サポート(LTS)カーネル
- 2~6 年間サポートされている Linux カーネル。LTS カーネルは年に 1 回リリースされ、Google の各 ACK の基礎となります。
ブランチタイプ
- ACK KMI カーネル ブランチ
- GKI カーネルがビルドされるブランチ。例えば、android12-5.10、android13-5.15 などです。
- android-mainline
- Android 機能向けの主要開発ブランチ。新しい LTS カーネルがアップストリームで宣言されると、対応する新しい GKI カーネルが android-mainline から分岐します。
- Linux メインライン
- アップストリームの Linux カーネル(LTS カーネルを含む)向けの主要開発ブランチ。
その他の用語
- 認定ブートイメージ
- バイナリ形式(
boot.img
)で配布され、デバイスにフラッシュされるカーネル。このイメージは、Google が認定したカーネルでデバイスが出荷されていることを確認できるように証明書が埋め込まれているという点で認定されています。 - 動的に読み込み可能なカーネル モジュール(DLKM)
- デバイスのニーズに応じてデバイスの起動中に動的に読み込むことができるモジュール。GKI モジュールとベンダー モジュールは、どちらも DLKM の一種です。DLKM は
.ko
形式でリリースされ、ドライバとなるか、他のカーネル機能を提供できます。 - GKI プロジェクト
- 共通のコアカーネル機能をベンダー固有の SoC とボードのサポートから読み込み可能なモジュールに分離することで、カーネルの断片化に対処する Google プロジェクト。
- 汎用カーネル イメージ(GKI)
- ACK ソースツリーからビルドされた GKI カーネルを含み、Android デバイスの boot パーティションにフラッシュするのに適した、Google が認定したブートイメージ。
- KMI
- GKI カーネルとベンダー モジュール間のインターフェース。ベンダー モジュールを GKI カーネルから独立して更新できます。このインターフェースはカーネル機能と、パートナーごとのシンボルリストを使用してベンダーや OEM の依存関係として識別されているグローバル データで構成されています。
- GKI モジュール
- Google がビルドしたカーネル モジュール。必要に応じてデバイスに動的に読み込むことができます。これらのモジュールは GKI カーネルのアーティファクトとしてビルドされ、GKI とともに
system_dlkm_staging_archive.tar.gz
アーカイブとして配信されます。GKI モジュールは、カーネルビルド時間の鍵ペアを使用して Google によって署名され、ビルドされた GKI カーネルとのみ互換性があります。 - ベンダー モジュール
- パートナーが開発し、SoC とデバイス固有の機能を含むハードウェア固有のモジュール。ベンダー モジュールは、動的に読み込み可能なカーネル モジュールの一種です。
次のステップ
- Android カーネルの開発が初めての方は、まず以下の記事をお読みください。
- 長期安定版カーネル - ACK にフィードするアップストリームの LTS カーネルの予備知識。
- Android 共通カーネル - ACK の予備知識。
- GKI カーネルの開発が初めての方は、まず GKI 開発をご覧ください。
- 4.19 以前のカーネル バージョンをご使用で、関連ドキュメントをお探しの場合は、以前のカーネル(4.19 以前)の概要をご覧ください。