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