Google は、黒人コミュニティに対する人種平等の促進に取り組んでいます。取り組みを見る

Android 共通カーネル

AOSP 共通カーネルは、LTS(長期サポート)カーネルのダウンストリームであり、LTS にマージされていないものの、Android コミュニティにとって関心のあるパッチがあります。たとえば以下のようなパッチがあります。

  • Android 向けにカスタマイズされた機能(例: インタラクティブ cpufreq ガバナー)。
  • 実装上の問題によりアップストリームで却下された機能(例: MTP/PTP、パラノイド ネットワーキング)。
  • Android デバイス向けには準備が整っているが、まだ開発アップストリームにある機能(例: 省電力スケジューリング / EAS)。
  • ベンダーや OEM の機能であるが、一般にも有用なもの(例: sdcardfs)。

共通カーネルのリスト

Android 共通カーネルの一覧については、https://android.googlesource.com/kernel/common/(下図)をご覧ください。

図 1. Android 共通カーネルの一覧

LTS との違い

Android 共通カーネルでは、LTS(4.14.0)に対して、355 ファイルでの変更、32,266 行の挿入、1,546 行の削除を行っています(2018 年 2 月時点)。

図 2. Android 固有のコードの推移

このうちの主な機能は次のとおりです。

  • 19.8%: 省電力スケジューリング(kernel/sched)
  • 13.8%: ネットワーク(net/netfilter)
  • 13.5%: sdcardfs(fs/sdcardfs)
  • 9.4%: USB(driver/usb)
  • 7.2%: SoC(arch/arm64、arch/x86)
  • 6.2%: f2fs(fs/f2fs - アップストリームからのバックポート)
  • 6.1%: 入力(drivers/input/misc)
  • 5.4%: FIQ デバッガ(drivers/staging/android/fiq_debugger)
  • 3.6%: Goldfish エミュレータ(drivers/platform/goldfish)
  • 3.4%: Verity(drivers/md)
  • 11.6%: その他

要件

AOSP 共通カーネルには、以下のものが必要です。

  • ダウンストリーム パートナーが LTS パッチをすべて含むアップデートを適切なタイミングで取得する方法。
  • 新しい機能の開発が AOSP 共通カーネルからのマージを(以前の Android リリースに対しても)妨げないことを保証する仕組み。
  • ダウンストリーム パートナーが Android のセキュリティに関する公開情報(ASB)に掲載されたセキュリティ パッチを簡単に見つける方法。携帯通信会社はこの方法を利用して、OEM が ASB に掲載されていないパッチを含めようとした場合に全体の再認定を要求することができます。

また、AOSP 共通カーネルで定期的なテストを行う必要があります。テストに合格した場合は、ブランチにタグを付ける必要があります。

LTS のマージ

ダウンストリーム パートナーが LTS パッチをすべて含むアップデートを適切なタイミングで受け取れるように、android-X.Y には LTS からの定期的なマージが行われ、自動化された VTS、CTS、ビルドテストや起動テストで検証されます。

Android-dessert ブランチ

新しい機能の開発が(以前の Android リリースに対しても)AOSP 共通カーネルからのマージを妨げないことを保証するために、最初の dessert リリースの前に android-X.Y-androidRel が android-X.Y からクローンされ、定期的に LTS からマージされて、関連付けられた Android リリースに対してテストされます。たとえば、android-4.4-n ブランチには LTS 4.4.y ブランチからのマージが行われます。

Android-release ブランチ

ダウンストリーム パートナーが ASB に掲載されたセキュリティ パッチを簡単に見つけられるように、Android リリースの時点で android-X.Y-androidRel-type が android-X.Y-androidRel からクローンされ、ASB に掲載されたパッチのみが適用されます。

ASB に関連付けられたパッチのリリース ブランチへのマージが確認されると、そのブランチは ASB レベルでタグ付けされます。たとえば、タグ ASB-2017-10-05 は、2017 年 10 月 5 日付けの Android のセキュリティに関する公開情報のパッチがそのリリース ブランチに含まれていることを示します。親ブランチにはそのセキュリティ パッチが含まれているため、android-4.4-o-release ブランチに ASB-2017-10-01 のタグが付いていれば、android-4.4-o と android-4.4 もその ASB に対応しています。次に例を示します。

  • Android N MR1 をリリースする前に、android-4.4-n-mr1android-4.4-n からクローンされました。
  • ASB に掲載されているパッチのみがマージされ、携帯通信会社からセキュリティ アップデートの全体的な認定を避けるように強く要求されている OEM が、ASB に掲載されたパッチを発見できるようになります。
  • android-4.4-n-mr2 は、リリース間でマージされた LTS パッチを android-4.4-n-mr1 に適用したものになります。
  • 毎月 ASB が公開されるたびに、ASB に掲載されたアップストリームのパッチがリリース ブランチに適用されます(ASB に掲載されたデバイス固有のパッチは共通カーネルに適用されません)。

定期テスト

すべての AOSP 共通カーネルで定期テストが行われ、テスト結果が公開されます。詳細は以下のとおりです。

  • LTS のアップデートや他のパッチがマージされると、VTS と CTS のサブセットが実行され、結果は https://qa-reports.linaro.org/lkft に公開されます。
  • さまざまなアーキテクチャやビルドにおけるビルドや起動の問題を継続的にテストするために、kernelci が実行されます。結果は https://kernelci.org/job/android に公開されます。

ブランチの階層構造(android-4.4)

android-4.4 カーネルのブランチは、次のような階層構造になっています。

図 3. android-4.4 カーネルのブランチの階層構造

ガイドライン

Android の実装では、以下のカーネル ガイドラインを使用する必要があります。

  • 新しい AOSP 共通カーネルをアップストリームのマージのソースとして使用する。
    • LTS からパッチを取得するために、android-X.Y からマージする。
      • 開発段階で定期的にマージする。
      • デバイスを新しい Android リリースに更新する場合は、android-X.Y ブランチまたは対象リリースのリリース ブランチからマージする(たとえば、Nougat MR2 に更新する場合は、android-4.4-n-mr2 ブランチからマージする)。
    • 携帯通信会社がセキュリティ リリースを制限している場合は、リリース ブランチからマージしてセキュリティ アップデートに対応する。
  • 修正をメインライン、LTS、AOSP 共通のアップストリームに提出する。