blob: 4bd688dd6fa96e4fb8bb1db9f9800d97f8b4d650 [file] [log] [blame]
<html devsite><head>
<title>接口要求</title>
<meta name="project_path" value="/_project.yaml"/>
<meta name="book_path" value="/_book.yaml"/>
</head>
<body>
<!--
Copyright 2017 The Android Open Source Project
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License.
-->
<p>本页介绍了 Android 正常运行所需的一系列 Linux 内核接口。<a href="/devices/tech/vts/index.html">供应商测试套件 (VTS)</a> 会测试这些接口是否存在并正确无误。这些接口的数量将与日俱增,包含越来越多的 Android 内核接口。</p>
<h2 id="system-calls">系统调用</h2>
<p>所有系统调用提供的签名和语义应与同一版本的上游 Linux 内核中的签名和语义相同。</p>
<h3 id="prctl">prctl</h3>
<p>除了用于受支持的内核版本的上游 <code>prctl</code> 指令外,Android 还依赖于其他 <code>prctl</code> 指令;这些指令的实现可以在 android-common 内核中找到。</p>
<pre class="prettyprint">
PR_SET_TIMERSLACK_PID
PR_SET_VMA
</pre>
<h2 id="filesystems">文件系统</h2>
<p>Linux 内核可通过多个文件系统导出接口。Android 要求这些接口以相同的格式传递相同的信息,并且提供的语义与上游 Linux 内核中的语义相同。对于上游中不存在的接口,相应的行为将由对应的 Android 通用内核分支决定。</p>
<h3 id="procfs">procfs</h3>
<table>
<tbody><tr>
<th>接口</th>
<th>说明</th>
</tr>
<tr>
<td>/proc/asound/</td>
<td>用于显示当前已配置 ALSA 驱动程序列表的只读文件。</td>
</tr>
<tr>
<td>/proc/cmdline</td>
<td>包含传递到内核的命令行参数的只读文件。
</td>
</tr>
<tr>
<td>/proc/config.gz</td>
<td>包含内核编译配置的只读文件。</td>
</tr>
<tr>
<td>/proc/cpuinfo</td>
<td>包含架构对应的 CPU 详细信息的只读文件。</td>
</tr>
<tr>
<td>/proc/diskstats</td>
<td>用于显示块设备的 I/O 统计信息的只读文件。</td>
</tr>
<tr>
<td>/proc/filesystems</td>
<td>列出内核当前支持的文件系统的只读文件。</td>
</tr>
<tr>
</tr><tr>
<td>/proc/kmsg</td>
<td>实时显示内核信息的只读文件。</td>
</tr>
<tr>
<td>/proc/loadavg</td>
<td>用于显示特定时间段内平均 CPU 负载和 I/O 负载的只读文件。</td>
</tr>
<tr>
<td>/proc/meminfo</td>
<td>显示内存子系统详细信息的只读文件。</td>
</tr>
<tr>
<td>/proc/misc</td>
<td>列出在其他主要设备上注册的其他驱动程序的只读文件。</td>
</tr>
<tr>
<td>/proc/modules</td>
<td>包含已加载内核模块的相关信息的只读文件。</td>
</tr>
<tr>
<td>/proc/mounts</td>
<td>指向 <code>/proc/self/mounts</code>(一个只读文件,列出了已装载的文件系统的相关信息)的符号链接。</td>
</tr>
<tr>
<td>/proc/net</td>
<td>包含各种网络堆栈参数的目录。</td>
</tr>
<tr>
<td>/proc/net/xt_qtaguid/</td>
<td>提供已标记的套接字相关信息的读写文件。</td>
</tr>
<tr>
<td>/proc/pagetypeinfo</td>
<td>包含页面分配器信息的只读文件。</td>
</tr>
<tr>
<td>/proc/stat</td>
<td>包含各种内核和系统统计信息的只读文件。</td>
</tr>
<tr>
<td>/proc/swaps</td>
<td>用于显示交换空间利用情况的只读文件。<strong>此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限</strong></td>
</tr>
<tr>
<td>/proc/sys/abi/swp</td>
<td>用于确定已弃用 ARM 指令 SWP 的行为的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/fs/pipe-max-size</td>
<td>用于报告单个管道缓冲区的大小上限(以字节为单位)的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/fs/protected_hardlinks</td>
<td>用于控制硬链接的创建行为的读写文件。
</td>
</tr>
<tr>
<td>/proc/sys/fs/protected_symlinks</td>
<td>用于控制符号链接的创建行为的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/fs/suid_dumpable</td>
<td>读写文件,用于控制 SetUID 或其他受保护/被污染的二进制文件的内核转储模式。</td>
</tr>
<tr>
<td>/proc/sys/kernel/core_pattern</td>
<td>用于指定内核转储文件名模式的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/core_pipe_limit</td>
<td>读写文件,用于定义多少并行崩溃进程可以同时传输给用户应用。</td>
</tr>
<tr>
<td>/proc/sys/kernel/dmesg_restrict</td>
<td>用于控制无特权的用户是否可以访问 dmesg 的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/domainname</td>
<td>包含系统的 YP/NIS 域名的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/hostname</td>
<td>用于确定系统的主机名的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/hung_task_timeout_secs</td>
<td>读写文件,用于控制超时(用于确定任务何时变为无响应状态且应被视为挂起)。<strong>此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限</strong></td>
</tr>
<tr>
<td>/proc/sys/kernel/kptr_restrict</td>
<td>决定内核指针是否印在 <code>proc</code> 文件和其他接口中的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/modules_disabled</td>
<td>用于控制是否可以加载内核模块的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/panic_on_oops</td>
<td>用于控制出现异常状况时内核的行为的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/perf_event_max_sample_rate</td>
<td>用于控制性能事件的采样率上限的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/perf_event_paranoid</td>
<td>用于控制无特权用户对性能事件系统的使用情况的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/pid_max</td>
<td>包含 PID 分配封装值的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/random/boot_id</td>
<td>包含每次启动时的新随机 ID 的只读文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/randomize_va_space</td>
<td>用于确定系统的地址布局随机化政策的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/kernel/sched_child_runs_first</td>
<td>读写文件,用于控制新派生的任务在调度安排上是否优先于其父级任务。</td>
</tr>
<tr>
<td>/proc/sys/kernel/sched_latency_ns</td>
<td>读写文件,包含任务在被调度安排之前可能产生的最长延迟时间(以纳秒为单位)。</td>
</tr>
<tr>
<td>/proc/sys/kernel/sched_rt_period_us</td>
<td>读写文件,包含系统级 RT 执行限制使用的周期长度(以微秒为单位)。</td>
</tr>
<tr>
<td>/proc/sys/kernel/sched_rt_runtime_us</td>
<td>读写文件,包含系统可执行 RT 任务的时间长度(相对于 sched_rt_period_us)。</td>
</tr>
<tr>
<td>/proc/sys/kernel/sched_tunable_scaling</td>
<td>读写文件,用于控制调度程序是否应根据 CPU 数量自动调整 sched_latency_ns。</td>
</tr>
<tr>
<td>/proc/sys/kernel/sched_wakeup_granularity_ns</td>
<td>读写文件,包含任务 A 的虚拟运行时必须比任务 B 多出多少(以纳秒为单位),任务 B 才能抢占它的相关信息。</td>
</tr>
<tr>
<td>/proc/sys/kernel/sysrq</td>
<td>读写文件,用于控制允许通过 sysrq 键调用的函数。</td>
</tr>
<tr>
<td>/proc/sys/net/*</td>
<td>包含各种网络堆栈参数的目录。</td>
</tr>
<tr>
<td>/proc/sysrq-trigger</td>
<td>可用于启动 sysrq 函数的只写文件。</td>
</tr>
<tr>
<td>/proc/sys/vm/dirty_background_ratio</td>
<td>读写文件,包含后台内核刷写程序线程开始写出脏数据的页数,以占总可用内存(包括空闲页面和可回收页面)的百分比的形式表示。</td>
</tr>
<tr>
<td>/proc/sys/vm/dirty_expire_centisecs</td>
<td>读写文件,定义脏数据何时可以被内核刷写程序线程写出。</td>
</tr>
<tr>
<td>/proc/sys/vm/drop_caches</td>
<td>读写文件,可用于强制内核删除已清除的缓存。</td>
</tr>
<tr>
<td>/proc/sys/vm/extra_free_kbytes</td>
<td>读写文件,可用于保留启动后台回收 (kswapd) 的阈值和启动直接回收(通过分配进程)的阈值之间的额外可用内存。<strong>此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限</strong></td>
</tr>
<tr>
<td>/proc/sys/vm/max_map_count</td>
<td>读写文件,包含进程可以具有的内存映射区域数上限。</td>
</tr>
<tr>
<td>/proc/sys/vm/mmap_min_addr</td>
<td>读写文件,用于确定可进行 <code>mmap</code> 调用的最小地址。</td>
</tr>
<tr>
<td>/proc/sys/vm/mmap_rnd_bits</td>
<td>读写文件,用于指定 <code>mmap</code> 调用的地址中的随机性程度。</td>
</tr>
<tr>
<td>/proc/sys/vm/mmap_rnd_compat_bits</td>
<td>读写文件,用于指定 <code>mmap</code> 调用的地址中的随机性程度。</td>
</tr>
<tr>
<td>/proc/sys/vm/overcommit_memory</td>
<td>确定内核虚拟内存记录模式的读写文件。</td>
</tr>
<tr>
<td>/proc/sys/vm/page-cluster</td>
<td>读写文件,用于控制一次可从交换中读取的连续页面数上限。</td>
</tr>
<tr>
<td>/proc/uid_cputime/remove_uid_range</td>
<td>只写文件,向其中写入数据时,会移除 <code>/proc/uid_cputime/show_uid_stat</code> 中显示的 UID。</td>
</tr>
<tr>
<td>/proc/uid_cputime/show_uid_stat</td>
<td>只读文件,包含 UID 进程在用户空间和内核空间中花费的时间。</td>
</tr>
<tr>
<td>/proc/uid_io/stats</td>
<td>只读文件,包含系统中每个 UID 的 I/O 统计信息列表</td>
</tr>
<tr>
<td>/proc/uid_procstat/set</td>
<td>只写文件,用于将 UID 配置为前台或后台。</td>
</tr>
<tr>
<td>/proc/uid_time_in_state</td>
<td>只读文件,包含每个 UID 的进程以每种可用频率执行的时间。<strong>此文件是可选的;只有在该文件存在时,系统才会在 VTS 中验证其内容和权限</strong></td>
</tr>
<tr>
<td>/proc/uptime</td>
<td>显示系统运行时间的只读文件。</td>
</tr>
<tr>
<td>/proc/version</td>
<td>包含描述内核版本的字符串的只读文件。</td>
</tr>
<tr>
<td>/proc/vmallocinfo</td>
<td>包含 <code>vmalloc</code> 进行分配的范围的只读文件。</td>
</tr>
<tr>
<td>/proc/vmstat</td>
<td>包含来自内核的虚拟内存统计信息的只读文件。
</td>
</tr>
<tr>
<td>/proc/zoneinfo</td>
<td>包含内存区域相关信息的只读文件。</td>
</tr>
</tbody></table>
<h3 id="dev">dev</h3>
<table>
<tbody><tr>
<th>接口</th>
<th>说明</th>
</tr>
<tr>
<td>/dev/ashmem</td>
<td>匿名的共享内存设备文件。</td>
</tr>
<tr>
<td>/dev/binder</td>
<td>Binder 设备文件。</td>
</tr>
<tr>
<td>/dev/hwbinder</td>
<td>硬件 binder 设备文件。</td>
</tr>
<tr>
<td>/dev/tun</td>
<td>通用 TUN/TAP 设备文件。</td>
</tr>
<tr>
<td>/dev/xt_qtaguid</td>
<td>QTAGUID netfilter 设备文件。</td>
</tr>
</tbody></table>
<h3 id="sysfs">sysfs</h3>
<table>
<tbody><tr>
<th>接口</th>
<th>说明</th>
</tr>
<tr>
<td>/sys/class/net/*/mtu</td>
<td>包含每个接口的最大传输单元的读写文件。</td>
</tr>
<tr>
<td>/sys/class/rtc/*/hctosys</td>
<td>只读文件,显示特定 rtc 是否在启动和恢复时提供系统时间。</td>
</tr>
<tr>
<td>/sys/devices/system/cpu/</td>
<td>包含 CPU 配置和频率相关信息的目录。</td>
</tr>
<tr>
<td>/sys/kernel/ipv4</td>
<td>用于配置 TCP 套接字缓冲区大小的读写文件的目录。</td>
</tr>
<tr>
<td>/sys/kernel/wakeup_reasons</td>
<td>包含上次暂停时间和恢复原因的只读文件的目录。</td>
</tr>
<tr>
<td>/sys/power/state</td>
<td>用于控制系统休眠状态的读写文件。</td>
</tr>
<tr>
<td>/sys/power/wake_lock</td>
<td>包含有效唤醒锁定的读写文件。</td>
</tr>
<tr>
<td>/sys/power/wake_unlock</td>
<td>包含非有效唤醒锁定的读写文件。</td>
</tr>
<tr>
<td>/sys/power/wakeup_count</td>
<td>读写文件,可用于将系统置于休眠状态(同时将唤醒事件的并行就位考虑在内)。</td>
</tr>
</tbody></table>
<h3 id="selinuxfs">selinuxfs</h3>
<p>该框架会将 <code>selinuxfs</code> 装载到 <code>/sys/fs/selinux</code> 中。
</p>
<table>
<tbody><tr>
<th>路径</th>
<th>说明</th>
</tr>
<tr>
<td>/sys/fs/selinux/checkreqprot</td>
<td>读/写文件,包含可用于确定如何在 <code>mmap</code><code>mprotect</code> 调用中检查 SElinux 保护的二进制标记。
</td>
</tr>
<tr>
<td>/sys/fs/selinux/null</td>
<td>供 SElinux 使用的读/写空设备。</td>
</tr>
<tr>
<td>/sys/fs/selinux/policy</td>
<td>只读文件,包含了二进制文件形式的 SElinux 政策。</td>
</tr>
</tbody></table>
<aside class="note"><strong>注意</strong>:要详细了解 Android 8.0 中的 SELinux,请参阅 <a href="/security/selinux/images/SELinux_Treble.pdf">SELinux for Android 8.0</a></aside>
</body></html>