接口要求
接口要求
本页介绍了 Android 正常运行所需的一系列 Linux 内核接口。供应商测试套件 (VTS) 会测试这些接口是否存在并正确无误。这些接口的数量将与日俱增,包含越来越多的 Android 内核接口。
系统调用
所有系统调用提供的签名和语义应与同一版本的上游 Linux 内核中的签名和语义相同。
prctl
除了用于受支持的内核版本的上游 prctl
指令外,Android 还依赖于其他 prctl
指令;这些指令的实现可以在 android-common 内核中找到。
PR_SET_TIMERSLACK_PID
PR_SET_VMA
文件系统
Linux 内核可通过多个文件系统导出接口。Android 要求这些接口以相同的格式传递相同的信息,并且提供的语义与上游 Linux 内核中的语义相同。对于上游中不存在的接口,相应的行为将由对应的 Android 通用内核分支决定。
procfs
接口 | 说明 |
---|---|
/proc/asound/ | 用于显示当前已配置 ALSA 驱动程序列表的只读文件。 |
/proc/cmdline | 包含传递到内核的命令行参数的只读文件。 |
/proc/config.gz | 包含内核编译配置的只读文件。 |
/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/ipv4 | 用于配置 TCP 套接字缓冲区大小的读写文件的目录。 |
/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 | 读/写文件,包含可用于确定如何在 mmap 和 mprotect 调用中检查 SElinux 保护的二进制标记。 |
/sys/fs/selinux/null | 供 SElinux 使用的读/写空设备。 |
/sys/fs/selinux/policy | 只读文件,包含了二进制文件形式的 SElinux 政策。 |