接口要求

本页介绍了 Android 正常运行所需的一系列 Linux 内核接口。供应商测试套件 (VTS) 会测试这些接口是否存在并正确无误。这些接口的数量将与日俱增,包含越来越多的 Android 内核接口。

系统调用

所有系统调用提供的签名和语义应与同一版本的上游 Linux 内核中的签名和语义相同。

prctl

除了用于受支持的内核版本的上游 prctl 指令外,Android 还依赖于其他 prctl 指令,这些指令的实现可以在 Android 通用内核中找到。

PR_SET_TIMERSLACK_PID
PR_SET_VMA

文件系统

Linux 内核可通过多个文件系统导出接口。Android 要求这些接口以相同的格式传递相同的信息,并且提供的语义与上游 Linux 内核中的语义相同。对于上游中不存在的接口,相应的行为将由对应的 Android 通用内核分支决定。

procfs

接口 说明
/proc/asound/ 用于显示当前已配置 ALSA 驱动程序列表的只读文件。
/proc/cmdline 只读文件,包含传递到内核的命令行参数。
/proc/config.gz 包含内核 build 配置的只读文件。
/proc/cpuinfo 包含架构对应的 CPU 详细信息的只读文件。
/proc/diskstats 用于显示块设备的 I/O 统计信息的只读文件。
/proc/filesystems 列出内核当前支持的文件系统的只读文件。
/proc/kmsg 实时显示内核信息的只读文件。
/proc/loadavg 用于显示特定时间段内平均 CPU 负载和 I/O 负载的只读文件。
/proc/meminfo 显示内存子系统详细信息的只读文件。
/proc/misc 列出在其他主要设备上注册的其他驱动程序的只读文件。
/proc/modules 包含已加载内核模块的相关信息的只读文件。
/proc/mounts 指向 /proc/self/mounts(一个只读文件,列出了已装载的文件系统的相关信息)的符号链接。
/proc/net 包含各种网络堆栈参数的目录。
/proc/net/xt_qtaguid/ 提供已标记的套接字相关信息的读写文件。
/proc/pagetypeinfo 包含页面分配器信息的只读文件。
/proc/stat 包含各种内核和系统统计信息的只读文件。
/proc/swaps 用于显示交换空间利用情况的只读文件。此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限
/proc/sys/abi/swp 用于确定已弃用 ARM 指令 SWP 的行为的读写文件。
/proc/sys/fs/pipe-max-size 用于报告单个管道缓冲区的大小上限(以字节为单位)的读写文件。
/proc/sys/fs/protected_hardlinks 读写文件,用于控制硬链接的创建行为。
/proc/sys/fs/protected_symlinks 用于控制符号链接的创建行为的读写文件。
/proc/sys/fs/suid_dumpable 读写文件,用于控制 SetUID 或其他受保护/被污染的二进制文件的内核转储模式。
/proc/sys/kernel/core_pattern 用于指定内核转储文件名模式的读写文件。
/proc/sys/kernel/core_pipe_limit 读写文件,用于定义多少并行崩溃进程可以同时传输给用户应用。
/proc/sys/kernel/dmesg_restrict 用于控制无特权的用户是否可以访问 dmesg 的读写文件。
/proc/sys/kernel/domainname 包含系统的 YP/NIS 域名的读写文件。
/proc/sys/kernel/hostname 用于确定系统的主机名的读写文件。
/proc/sys/kernel/hung_task_timeout_secs 读写文件,用于控制超时(用于确定任务何时变为无响应状态且应被视为挂起)。此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限
/proc/sys/kernel/kptr_restrict 读写文件,用于确定是否在 proc 文件及其他接口中输出内核指针。
/proc/sys/kernel/modules_disabled 用于控制是否可以加载内核模块的读写文件。
/proc/sys/kernel/panic_on_oops 用于控制出现异常状况时内核的行为的读写文件。
/proc/sys/kernel/perf_event_max_sample_rate 用于控制性能事件的采样率上限的读写文件。
/proc/sys/kernel/perf_event_paranoid 用于控制无特权用户对性能事件系统的使用情况的读写文件。
/proc/sys/kernel/pid_max 包含 PID 分配封装值的读写文件。
/proc/sys/kernel/random/boot_id 包含每次启动时的新随机 ID 的只读文件。
/proc/sys/kernel/randomize_va_space 用于确定系统的地址布局随机化政策的读写文件。
/proc/sys/kernel/sched_child_runs_first 读写文件,用于控制新复刻的任务在调度安排上是否优先于其父级任务。
/proc/sys/kernel/sched_latency_ns 读写文件,包含任务在被调度安排之前可能产生的最长延迟时间(以纳秒为单位)。
/proc/sys/kernel/sched_rt_period_us 读写文件,包含系统级 RT 执行限制使用的周期长度(以微秒为单位)。
/proc/sys/kernel/sched_rt_runtime_us 读写文件,包含系统可执行 RT 任务的时间长度(相对于 sched_rt_period_us)。
/proc/sys/kernel/sched_tunable_scaling 读写文件,用于控制调度程序是否应根据 CPU 数量自动调整 sched_latency_ns。
/proc/sys/kernel/sched_wakeup_granularity_ns 读写文件,包含任务 A 的虚拟运行时必须比任务 B 多出多少(以纳秒为单位),任务 B 才能抢占它的相关信息。
/proc/sys/kernel/sysrq 读写文件,用于控制允许通过 sysrq 键调用的函数。
/proc/sys/net/* 包含各种网络堆栈参数的目录。
/proc/sysrq-trigger 可用于启动 sysrq 函数的只写文件。
/proc/sys/vm/dirty_background_ratio 读写文件,包含后台内核刷写程序线程开始写出脏数据的页数,以占总可用内存(包括空闲页面和可回收页面)的百分比的形式表示。
/proc/sys/vm/dirty_expire_centisecs 读写文件,定义脏数据何时可以被内核刷写程序线程写出。
/proc/sys/vm/drop_caches 读写文件,可用于强制内核删除已清除的缓存。
/proc/sys/vm/extra_free_kbytes 读写文件,可用于保留启动后台回收 (kswapd) 的阈值和启动直接回收(通过分配进程)的阈值之间的额外可用内存。此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限
/proc/sys/vm/max_map_count 读写文件,包含进程可以具有的内存映射区域数上限。
/proc/sys/vm/mmap_min_addr 读写文件,用于确定可进行 mmap 调用的最小地址。
/proc/sys/vm/mmap_rnd_bits 读写文件,用于指定 mmap 调用的地址中的随机性程度。
/proc/sys/vm/mmap_rnd_compat_bits 读写文件,用于指定 mmap 调用的地址中的随机性程度。
/proc/sys/vm/overcommit_memory 确定内核虚拟内存记录模式的读写文件。
/proc/sys/vm/page-cluster 读写文件,用于控制一次可从交换中读取的连续页面数上限。
/proc/uid_cputime/remove_uid_range 只写文件,向其中写入数据时,会移除 /proc/uid_cputime/show_uid_stat 中显示的 UID。
/proc/uid_cputime/show_uid_stat 只读文件,包含 UID 进程在用户空间和内核空间中花费的时间。
/proc/uid_io/stats 只读文件,包含系统中每个 UID 的 I/O 统计信息列表
/proc/uid_procstat/set 只写文件,用于将 UID 配置为前台或后台。
/proc/uid_time_in_state 只读文件,包含每个 UID 的进程以每种可用频率执行的时间。此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限
/proc/uptime 显示系统运行时间的只读文件。
/proc/version 包含描述内核版本的字符串的只读文件。
/proc/vmallocinfo 只读文件,包含 vmalloc 进行分配的范围。
/proc/vmstat 只读文件,包含来自内核的虚拟内存统计信息。
/proc/zoneinfo 包含内存区域相关信息的只读文件。

dev

接口 说明
/dev/ashmem 匿名的共享内存设备文件。
/dev/binder Binder 设备文件。
/dev/hwbinder 硬件 binder 设备文件。
/dev/tun 通用 TUN/TAP 设备文件。
/dev/xt_qtaguid QTAGUID netfilter 设备文件。

sysfs

接口 说明
/sys/class/net/*/mtu 包含每个接口的最大传输单元的读写文件。
/sys/class/rtc/*/hctosys 只读文件,显示特定 rtc 是否在启动和恢复时提供系统时间。
/sys/devices/system/cpu/ 包含 CPU 配置和频率相关信息的目录。
/sys/kernel/wakeup_reasons 包含上次挂起时间和恢复原因的只读文件的目录。
/sys/power/state 用于控制系统休眠状态的读写文件。
/sys/power/wake_lock 包含有效唤醒锁定的读写文件。
/sys/power/wake_unlock 包含非有效唤醒锁定的读写文件。
/sys/power/wakeup_count 读写文件,可用于将系统置于休眠状态(同时将唤醒事件的并行就位考虑在内)。

selinuxfs

框架会将 selinuxfs 装载到 /sys/fs/selinux 中。

路径 说明
/sys/fs/selinux/checkreqprot 读/写文件,包含可用于确定如何在 mmapmprotect 调用中检查 SElinux 保护的二进制标记。
/sys/fs/selinux/null 供 SElinux 使用的读/写空设备。
/sys/fs/selinux/policy 只读文件,包含了二进制文件形式的 SElinux 政策。