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

カーネル設定

以下の設定を Android カーネル設定のベースとして使用します。設定は android-baseandroid-base-ARCHandroid-recommended.cfg ファイルにまとめられています。

  • android-base: このオプションは、Android のコア機能を有効にするもので、すべてのデバイスで指定する必要があります。
  • android-base-ARCH: このオプションは、Android のコア機能を有効にするもので、アーキテクチャ ARCH のすべてのデバイスで指定する必要があります。すべてのアーキテクチャに、対応するアーキテクチャ固有の必須オプションのファイルがあるわけではありません。ファイルのないアーキテクチャでは、Android 用のアーキテクチャ固有のカーネル設定は不要です。
  • android-recommended: このオプションは、Android の高度な機能を有効にします。デバイスでの指定は任意です。

これらの設定ファイルは、kernel/configs リポジトリにあります。使用しているカーネルのバージョンに対応する設定ファイルのセットを使用してください。

カーネルの堅牢化のためにすでに行われている制御の詳細については、システムとカーネルのセキュリティをご覧ください。必要な設定の詳細については、Android Compatibility Definition Document(CDD)をご覧ください。

カーネル設定の生成

シンプルな defconfig フォーマットを使用するデバイスの場合は、次のようなカーネルツリーの merge_config.sh スクリプトを使用してオプションを有効にします。

ARCH=ARCH scripts/kconfig/merge_config.sh <...>/device_defconfig <...>/android-base.cfg <...>/android-base-ARCH.cfg <...>/android-recommended.cfg

これにより、新しい defconfig ファイルの保存や、有効にした Android の機能を備えた新しいカーネルのコンパイルに使用できる .config ファイルが生成されます。

その他のカーネル設定の要件

Android の依存関係を満たすために、プラットフォームの管理者が複数のカーネル機能から選択できる場合もあります。このような依存関係は、上記のカーネル設定フラグメント ファイルでは表現できません。これらのファイル形式が論理表現に対応していないためです。Android 9 以上の場合、互換性テストスイート(CTS)ベンダー テストスイート(VTS)は、以下の要件を満たしていることを検証します。

  • CONFIG_OF=y または CONFIG_ACPI=y
  • CONFIG_ANDROID_LOW_MEMORY_KILLER=y、または CONFIG_MEMCG=yCONFIG_MEMCG_SWAP=y の両方が設定されている 4.4 カーネルまたは 4.9 カーネル
  • CONFIG_DEBUG_RODATA=y または CONFIG_STRICT_KERNEL_RWX=y
  • CONFIG_DEBUG_SET_MODULE_RONX=y または CONFIG_STRICT_MODULE_RWX=y
  • ARM64 の場合のみ: CONFIG_ARM64_SW_TTBR0_PAN=y または CONFIG_ARM64_PAN=y

さらに、Android 9 以上の 4.9 カーネルでは、CONFIG_INET_UDP_DIAG オプションを y に設定する必要があります。

USB ホストモード オプションの有効化

USB ホストモード オーディオ用に、以下のオプションを有効にします。

CONFIG_SND_USB=y
CONFIG_SND_USB_AUDIO=y
# CONFIG_USB_AUDIO is for a peripheral mode (gadget) driver

USB ホストモード MIDI 用に、次のオプションを有効にします。

CONFIG_SND_USB_MIDI=y

TSYNC を使用した Seccomp BPF

Secure Computing Berkeley Packet Filter(Seccomp BPF)は、プロセスによるシステムコールを許すようなコンテキストを定義するサンドボックスが作成できるカーネル セキュリティ技術です。スレッド同期(TSYNC)機能を利用すると、マルチスレッド プログラムから Seccomp BPF を使用できます。この機能は、アップストリームで Seccomp がサポートされているアーキテクチャに限定されています(ARM、ARM64、x86、x86_64)。

Android Live-Lock Daemon

Android 10 には、Android Live-LocK Daemon(llkd)が搭載されています。これは、カーネルのデッドロックを検出して軽減するためのものです。llkd の使用方法について詳しくは、Android Live-Lock Daemon をご覧ください。

ARM64 で vDSO32 を使用する

仮想動的共有オブジェクト(vDSO)はシステムコールの代わりに使用され、正しく設定するとサイクルコストを削減できます。Android 10 では、64 ビットカーネルで vDSO32 がサポートされています。64 ビットカーネルでの vDSO64 と 32 ビットカーネルでの vDSO32 はすでにサポートされています。ARM64 アーキテクチャで vDSO32(CONFIG_VDSO_COMPAT)を使用すると、電池寿命が 0.4% 延び、その他のパフォーマンスも向上します。

Linux コミュニティは、アーキテクチャ間で vDSO を統合する作業に積極的に取り組んでいます。Linux カーネルで vDSO をセットアップするには、arm32 コンパイラのトリプレットで CONFIG_COMPATCONFIG_CROSS_COMPILE_COMPAT_VDSO を設定して、vDSO32 を有効にします。Android カーネルのチームが vDSO のパッチシリーズの旧バージョンを Pixel デバイスにバックポートしているので、Pixel カーネルのビルド内のサンプル(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN パス、CROSS_COMPILE_ARM32 参照、CONFIG_CROSS_COMPILE_ARM32 設定)を参考にしてください。