您可以将以下配置设置用作 Android 内核配置的基础。设置会整理到 android-base
和 android-recommended
.cfg 文件:
android-base
。这些选项可实现核心 Android 功能,所有设备都应该启用。android-recommended
。这些选项可实现高级 Android 功能,设备可选择性启用。
android-base.cfg 和 android-recommended.cfg 文件均位于 android-common 内核 Repo: https://android.googlesource.com/kernel/common/。
上游 Linux 内核 4.8 版本中为内核配置片段指定了新的位置 (kernel/configs)。对于基于版本 4.8 或更高版本的分支,Android 基础和建议的配置片段位于该目录中。对于基于版本 4.8 之前版本的内核分支,配置片段位于 android/ 目录中。
如需详细了解已用于加强设备内核的控件,请参阅系统和内核安全。如需详细了解必需的设置,请参阅 Android 兼容性定义文档 (CDD)。
生成内核配置
对于具有极简 defconfig 的设备,您可以使用以下命令来启用选项:
ARCH=arch scripts/kconfig/merge_config.sh path/device_defconfig android/configs/android-base.cfg android/configs/android-recommended.cfg
这会生成一个.config 文件,您可以使用该文件来保存新的 defconfig 或编译一个启用 Android 功能的新内核。
启用 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
Seccomp-BPF 与 TSYNC
Seccomp-BPF 是一种内核安全技术,支持创建沙盒来限制进程可以进行的系统调用。TSYNC 功能可以实现从多线程程序中使用 Seccomp-BPF。这种能力仅限具有 seccomp 支持上游的架构:ARM、ARM64、x86 和 x86_64。
用于 ARM-32、X86、X86_64 的内核 3.10 向后移植
确保 Kconfig 中已启用 CONFIG_SECCOMP_FILTER=y
(截至 Android 5.0 CTS 已验证),然后择优挑选来自 AOSP kernel/common:android-3.10 存储区的以下变更:9499cd23f9d05ba159fac6d55dc35a7f49f9ce76..a9ba4285aa5722a3b4d84888e78ba8adc0046b28
- a03 a242 arch: Introduce smp_load_acquire(), smp_store_release()(a242 架构:引入 smp_load_acquire()、smp_store_release()),作者:Peter Zijlstra
- 987a0f1 introduce for_each_thread() to replace the buggy while_each_thread()(引入 for_each_thread() 以替换有问题的 while_each_thread()),作者:Oleg Nesterov
- 2a30a43 seccomp: create internal mode-setting function(seccomp:创建内部 mode-setting 函数),作者:Kees Cook
- b8a9cff seccomp: extract check/assign mode helpers(seccomp:提取检查/分配模式帮助程序),作者:Kees Cook
- 8908dde seccomp: split mode setting routines(seccomp:拆分模式设置例行程序),作者:Kees Cook
- e985fd4 seccomp: add "seccomp" syscall(seccomp:添加“seccomp”系统调用),作者:Kees Cook
- 9d0ff69 sched: move no_new_privs into new atomic flags(sched:将 no_new_privs 移至新的原子标志中),作者:Kees Cook
- b6a12bf seccomp: split filter prep from check and apply(seccomp:将过滤器准备工作从检查和应用流程中分离出来),作者:Kees Cook
- 61b6b88 seccomp: introduce writer locking(seccomp:引入写入者锁定),作者:Kees Cook
- c852ef7 seccomp: allow mode setting across threads(seccomp:允许跨线程模式设置),作者:Kees Cook
- f14a5db seccomp: implement SECCOMP_FILTER_FLAG_TSYNC(seccomp:实施 SECCOMP_FILTER_FLAG_TSYNC),作者:Kees Cook
- 9ac8600 seccomp: Replace BUG(!spin_is_locked()) with assert_spin_lock(seccomp:用 assert_spin_lock 替换 BUG(!spin_is_locked())),作者:Guenter Roeck
- 900e9fd seccomp: fix syscall numbers for x86 and x86_64(seccomp:修复 x86 和 x86_64 的系统调用号),作者:Lee Campbell
- a9ba428 ARM: add seccomp syscall(ARM:添加 seccomp 系统调用),作者:Kees Cook
用于 ARM-64 的内核 3.10 向后移植
确保 Kconfig 中已启用 CONFIG_SECCOMP_FILTER=y
(截至 Android 5.0 CTS 已验证),然后择优挑选来自 AOSP kernel/common:android-3.10 存储区的以下变更:
- cfc7e99e9 arm64: Add __NR_* definitions for compat syscalls(arm64:为兼容性系统调用添加 __NR_* 定义),作者:JP Abgrall
- bf11863 arm64: Add audit support(arm64:添加审计支持),作者:AKASHI Takahiro
- 3e21c0b arm64: audit: Add audit hook in syscall_trace_enter/exit()(arm64:审计:在 syscall_trace_enter/exit() 中添加审计钩),作者:JP Abgrall
- 9499cd2 syscall_get_arch: remove useless function arguments(syscall_get_arch:移除无用的函数参数),作者:Eric Paris
- 2a30a43 seccomp: create internal mode-setting function(seccomp:创建内部 mode-setting 函数),作者:Kees Cook
- b8a9cff seccomp: extract check/assign mode helpers(seccomp:提取检查/分配模式帮助程序),作者:Kees Cook
- 8908dde seccomp: split mode setting routines(seccomp:拆分模式设置例行程序),作者:Kees Cook
- e985fd4 seccomp: add "seccomp" syscall(seccomp:添加“seccomp”系统调用),作者:Kees Cook
- 9d0ff69 sched: move no_new_privs into new atomic flags(sched:将 no_new_privs 移至新的原子标志中),作者:Kees Cook
- b6a12bf seccomp: split filter prep from check and apply(seccomp:将过滤器准备工作从检查和应用流程中分离出来),作者:Kees Cook
- 61b6b88 seccomp: introduce writer locking(seccomp:引入写入者锁定),作者:Kees Cook
- c852ef7 seccomp: allow mode setting across threads(seccomp:允许跨线程模式设置),作者:Kees Cook
- f14a5db seccomp: implement SECCOMP_FILTER_FLAG_TSYNC(seccomp:实施 SECCOMP_FILTER_FLAG_TSYNC),作者:Kees Cook
- 9ac8600 seccomp: Replace BUG(!spin_is_locked()) with assert_spin_lock(seccomp:用 assert_spin_lock 替换 BUG(!spin_is_locked())),作者:Guenter Roeck
- 900e9fd seccomp: fix syscall numbers for x86 and x86_64(seccomp:修复 x86 和 x86_64 的系统调用号),作者:Lee Campbell
- a9ba428 ARM: add seccomp syscall(ARM:添加 seccomp 系统调用),作者:Kees Cook
- 4190090 ARM: 8087/1: ptrace: reload syscall number after secure_computing() check(ARM:8087/1:ptrace:在 secure_computing() 检查后重新加载系统调用号),作者:Will Deacon
- abbfed9 arm64: ptrace: add PTRACE_SET_SYSCALL(arm64:ptrace:添加 PTRACE_SET_SYSCALL),作者:AKASHI Takahiro
- feb2843 arm64: ptrace: allow tracer to skip a system call(arm64:ptrace:允许跟踪进程跳过系统调用),作者:AKASHI Takahiro
- dab1073 asm-generic: add generic seccomp.h for secure computing mode 1(asm-generic:为安全计算模式 1 添加常规 seccomp.h),作者:AKASHI Takahiro
- 4f12b53 add seccomp syscall for compat task(为兼容性任务添加 seccomp 系统调用),作者:AKASHI Takahiro
- 7722723 arm64: add SIGSYS siginfo for compat task(arm64:为兼容性任务添加 SIGSYS siginfo),作者:AKASHI Takahiro
- 210957c arm64: add seccomp support(arm64:添加 seccomp 支持),作者:AKASHI Takahiro