カーネルの概要

Android カーネルは、アップストリームの Linux 長期サポート(LTS)カーネルに基づいています。Google では、LTS カーネルは Android 固有のパッチと組み合わされ、Android 共通カーネル(ACK)を形成しています。

ACK は kernel/common リポジトリからビルドされます。このリポジトリは、アップストリームの Linux カーネルのスーパーセットであり、Android 固有のパッチが追加されています。

5.10 以降の ACK は、汎用カーネル イメージ(GKI)カーネルとも呼ばれます。* GKI カーネルは、ハードウェアに依存しない汎用 コアカーネルコードとGKI モジュールの、ハードウェア固有の ベンダー モジュールからの分離をサポートします。

GKI カーネルとベンダー モジュール間のやり取りは、ベンダー モジュールに必要な機能とグローバル データを識別するシンボルリストで構成されるカーネル モジュール インターフェース(KMI)によって可能になっています。 図 1 に、GKI カーネルとベンダー モジュールのアーキテクチャを示します。

GKI カーネルとベンダー モジュールのアーキテクチャ。

図 1.GKI カーネルとベンダー モジュールのアーキテクチャ。

カーネル用語集

カーネル ドキュメント全体で使用される用語を以下に示します。

カーネルタイプ

Android 共通カーネル(ACK)
LTS カーネルの下流にあるカーネルで、Android コミュニティにとって重要なパッチが含まれています。これらのパッチは、Linux メインラインまたは長期 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 メインライン : LTS カーネルを含む、アップストリームの Linux カーネルの主要開発ブランチ。

その他の用語

認定ブートイメージ
バイナリ形式(boot.img)で配信され、デバイスにフラッシュされるカーネル。 このイメージには埋め込み証明書が含まれているため、Google がデバイスに Google 認定のカーネルが搭載されていることを確認できるため、認定と見なされます。
動的に読み込み可能なカーネル モジュール(DLKM)
デバイスのニーズに応じて、デバイスの起動時に動的に読み込むことができるモジュール。GKI モジュールとベンダー モジュールは、どちらも DLKM の一種です。DLKM は .ko 形式でリリースされ、ドライバにすることも、他のカーネル機能を提供することもできます。
GKI プロジェクト
共通のコアカーネル機能をベンダー固有の SoC とボードのサポートから読み込み可能なモジュールに分離することで、カーネルの断片化に対処する Google プロジェクト。

汎用カーネル イメージ(GKI) : ACK ソースツリーからビルドされた GKI カーネルを含み、Android デバイスの boot パーティションにフラッシュするのに適した、Google が認定したブートイメージ。

カーネル モジュール インターフェース(KMI)
GKI カーネルとベンダー モジュール間のインターフェース。 ベンダー モジュールを GKI カーネルから独立して更新できます。このインターフェースはカーネル機能と、パートナーごとのシンボルリストを使用してベンダーや OEM の依存関係として識別されているグローバル データで構成されています。
ベンダー モジュール
パートナーが開発し、SoC とデバイス固有の機能を含むハードウェア固有のモジュール。ベンダー モジュールは、動的に読み込み可能なカーネル モジュールの一種です。

次のステップ

Android カーネルの開発が初めての場合は、まず以下をご覧ください。

GKI カーネルの開発が初めての方は、まず GKI 開発をご覧ください。