| <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> |