カーネルの概要

Android カーネルは、アップストリームのLinux Long Term Supported (LTS) カーネルに基づいています。 Google では、LTS カーネルを Android 固有のパッチと組み合わせて、 Android Common Kernel (ACK)として知られるものを形成します。

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

GKI カーネルは、システム オン チップ (SoC) およびボード固有のコードを含むハードウェア固有のベンダー モジュールと対話します。 GKI カーネルとベンダー モジュール間の対話は、ベンダー モジュールが必要とする機能とグローバル データを識別するシンボル リストで構成されるカーネル モジュール インターフェイス (KMI)によって可能になります。図 1 は、GKI カーネルとベンダー モジュールのアーキテクチャを示しています。

GKI アーキテクチャ
図 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 のみ)。このカーネルは 2 つの部分で構成されています。すべてのデバイスに共通のコードを含むコア GKI カーネルと、該当するデバイスに動的にロードできる Google によって開発された GKI モジュールです。
カーネル モジュール インターフェイス (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 メインライン
Android 機能の主要な開発ブランチ。新しいLTS カーネルがアップストリームで宣言されると、対応する新しいGKI カーネルがandroid-mainline から分岐されます。
Linux メインライン
LTS カーネルを含む、アップストリーム Linux カーネルの主要な開発ブランチ。

その他の用語

認定されたブート イメージ
カーネルはバイナリ形式 ( boot.img ) で配信され、デバイスにフラッシュされます。このイメージは、埋め込まれた証明書が含まれているという意味で認定されており、デバイスに Google 認定のカーネルが搭載されていることを Google が確認できます。
動的にロード可能なカーネル モジュール (DLKM)
デバイスのニーズに応じて、デバイスの起動中に動的にロードできるモジュール。 GKI とベンダー モジュールはどちらも DLKM のタイプです。 DLKM は.ko形式でリリースされ、ドライバーとして使用することも、他のカーネル機能を提供することもできます。
GKIプロジェクト
共通のコア カーネル機能をベンダー固有の SoC およびボード サポートからロード可能なモジュールに分離することで、カーネルの断片化に対処する Google プロジェクト。
汎用カーネルイメージ (GKI)
Google によって認定されたブート イメージ。ACKソース ツリーから構築されたGKI カーネルが含まれており、Android デバイスのブート パーティションにフラッシュするのに適しています。
KMI
GKI カーネルとベンダー モジュール間のインターフェイスにより、ベンダー モジュールを GKI カーネルとは独立して更新できるようになります。このインターフェイスは、パートナーごとのシンボル リストを使用してベンダー/OEM の依存関係として識別されたカーネル関数とグローバル データで構成されます。
GKI モジュール
Google によって構築されたカーネル モジュール。該当する場合はデバイスに動的にロードできます。これらのモジュールはGKI カーネルのアーティファクトとして構築され、 system_dlkm_staging_archive.tar.gzアーカイブとして GKI とともに配信されます。 GKI モジュールは、カーネル ビルド時のキー ペアを使用して Google によって署名されており、ビルドに使用された GKI カーネルとのみ互換性があります。
ベンダーモジュール
パートナーによって開発された、SoC およびデバイス固有の機能を含むハードウェア固有のモジュール。ベンダー モジュールは、動的にロード可能なカーネル モジュールの一種です。

次は何ですか?

  • Android カーネル開発が初めての場合は、以下を読むことから始めるとよいでしょう。
  • GKI カーネル開発が初めての場合は、 「 GKI 開発 」から始めてください。
  • 4.19 以前のカーネル バージョンを使用していて、関連ドキュメントを探している場合は、 「以前のカーネル (<=4.19) の概要」セクションを参照してください。