将来の Android バージョン

現在の Android リリースでは、すべてのボード固有のコードを、デバイスのカーネル モジュールとしてビルドおよび出荷することをおすすめしています。カーネルの残りの部分は、(モノリシック カーネルであるか、一部がカーネル モジュールとしてコンパイルされたかにかかわらず)Android に関してはモノリシックに扱われます。

このモノリシック カーネルは、SoC ベンダーのリファレンス ハードウェアで起動できる SoC カーネルにすぎません。現在、SoC カーネルは一般的なカーネルと同様に扱われており、ボード固有のリポジトリに大量に複製されています。このディストリビューション モデルは、同じバグが各ブランチによって異なる方法で修正される原因となります。そのため、異なる時期にチェリーピックしたり、同じバグを異なる方法で修正したりすることになり、将来のカーネルの更新が遅れます。この問題に対処するには、SoC カーネルを別々の配布物にしたうえで、SoC を使用する関係者全員が同じ SoC カーネルに変更を適用する必要があります。

モノリシック カーネルの断片化

SoC カーネルは、時間が経つにつれて、Android リリースや ODM ごとに断片化されます。

図 1. デバイス カーネルのレプリケーション

この例は次のことを示しています。

  1. 関係者全員がボード固有のブランチ / タグをクロスマージするには、かなりの労力と時間がかかります。
  2. クロスマージを待つ間、Android デバイス メーカーは、自社のカーネルにバグ / セキュリティ修正パッチを適用します。
  3. 祖先からの分岐により、将来のアップグレード / マージが困難になります。

一般的な SoC カーネル

一般的な SoC カーネルの提案モデルは、SoC 固有のバグ修正、LTS アップグレード、セキュリティ修正などの変更をアップマージすることで発生する問題に対処するものです。たとえば、SoC カーネルごとに統合された理想的なシナリオには、次のようなワークフローがあります。

図 2. Android 8.x 以上のデバイス カーネル

このワークフローは、デバイス メーカーと協力して一般的な SoC カーネルを最新状態に保つことで、断片化したカーネル リポジトリの問題を解決することを目的としています。Android 8.x 以上では、ODM が固有の SoC カーネルをメンテナンスすることを避けて、LTS アップグレード、バグ修正、セキュリティ パッチなどのアップグレードを一般的な SoC カーネルに依存できるようにするために、すべての可能なオプションを ODM に提供します。

最初に、1 つの SoC に単一のカーネルソースを使用しているすべての ODM / ベンダーの支援に取り組みます。将来的には、SoC ごとのカーネルの単一バイナリ ディストリビューションを目指します。

カーネル変更のアップストリーム

新しいカーネル バージョンへのアップデートを簡易化および自動化するため、また、ODM が製品を構築するプラットフォームの安全性と信頼性を高めるため、SoC ベンダーには、カーネル変更をアップストリームして、メインの kernel.org リポジトリに受け入れられるようにすることを強く推奨します。最初は余分な作業が必要になりますが、長期的には時間とコストの節約につながります。また、マージされたコードは、コミュニティでレビューされていないコードに比べて高品質で、バグやセキュリティの問題が少なく、通常はサイズが小さくなります。

SoC の完全なサポートがアップストリームでマージされると、内部カーネル API が時間とともに進化するにつれて、コミュニティが API に必要な変更を加えられるようになり、その結果プラットフォームの寿命を伸ばすことができます。また、コミュニティが管理する多数のカーネルテスト プラットフォーム(kernelci.org など)の 1 つにハードウェア プラットフォームを追加することで、カーネルを自動的にテストして開発および安定版リリースにおけるリグレッションを修正することが可能になります。

Linux カーネル コミュニティと協力してコードをアップストリームする方法については、次のリソースを参照してください。

  • Documentation/process(4.9 以下の Documentation/development-process
  • Documentation/CodingStyle
  • Documentation/SubmittingPatches

コミュニティは、最小限のレビュー プロセスを通じて、カーネルのステージング部分にスタンドアロンのドライバとファイル システムを受け入れ、この領域でコードの品質の改善に取り組みます。