以下の設定を Android カーネル設定のベースとして使用します。設定は android-base
、android-base-ARCH
、android-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=y
とCONFIG_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_COMPAT
と CONFIG_CROSS_COMPILE_COMPAT_VDSO
を設定して、vDSO32 を有効にします。Android カーネルのチームが vDSO のパッチシリーズの旧バージョンを Pixel デバイスにバックポートしているので、Pixel カーネルのビルド内のサンプル(LINUX_FCC_CROSS_COMPILE_ARM32_PREBUILTS_BIN
パス、CROSS_COMPILE_ARM32
参照、CONFIG_CROSS_COMPILE_ARM32
設定)を参考にしてください。