aboutsummaryrefslogtreecommitdiff
path: root/en/devices/architecture/kernel/reqs-interfaces.html
blob: 82349f7be58a2b6de6f480cd57ab5641d9d902a9 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
<html devsite>
  <head>
    <title>Interface Requirements</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>This page describes a subset of the Linux kernel interfaces on which Android
relies to function properly. The presence and correctness of these interfaces is
tested as part of the <a href="/devices/tech/vts/index.html">Vendor Test Suite
(VTS)</a>. This subset will grow over time to contain a larger portion of
Android kernel interfaces.</p>

<h2 id="system-calls">System calls</h2>
<p>System calls are expected to provide the same signatures and semantics as in
the upstream Linux kernel.</p>

<p>ARM64 system calls required by bionic per
<code>bionic/libc/SYSCALLS.txt</code>:</p>

<table>
<tr>
<td class="devsite-click-to-copy">accept4, acct, adjtimex, bind, brk, capget, capset, chdir, chroot, clock_adjtime, clock_getres, clock_gettime, clock_nanosleep, clock_settime, close, connect, delete_module, dup3, dup, epoll_create1, epoll_ctl, epoll_pwait, eventfd2, execve, exit, exit_group, faccessat, fadvise64, fallocate, fchdir, fchmodat, fchmod, fchownat, fchown, fcntl, fdatasync, fgetxattr, flistxattr, flock, fremovexattr, fsetxattr, fstat, newfstatat, fstatfs, fsync, ftruncate, getcpu, getcwd, getdents64, getegid, geteuid, getgid, getgroups, getitimer, getpeername, getpgid, getpid, getppid, getpriority, getresgid, getresuid, getrlimit, getrusage, getsid, getsockname, getsockopt, gettimeofday, getuid, getxattr, init_module, inotify_add_watch, inotify_init1, inotify_rm_watch, ioctl, kill, syslog, lgetxattr, linkat, listen, listxattr, llistxattr, lremovexattr, lseek, lsetxattr, madvise, mincore, mkdirat, mknodat, mlockall, mlock, mmap, mount, mprotect, mremap, msync, munlockall, munlock, munmap, nanosleep, openat, personality, pipe2, ppoll, prctl, pread64, preadv, prlimit64, process_vm_readv, process_vm_writev, pselect6, ptrace, pwrite64, pwritev, quotactl, readahead, readlinkat, read, readv, reboot, recvfrom, recvmmsg, recvmsg, removexattr, renameat, rt_sigaction, rt_sigpending, rt_sigprocmask, rt_sigqueueinfo, rt_sigsuspend, rt_sigtimedwait, sched_getaffinity, sched_getparam, sched_get_priority_max, sched_get_priority_min, sched_getscheduler, sched_rr_get_interval, sched_setaffinity, sched_setparam, sched_setscheduler, sched_yield, sendfile, sendmmsg, sendmsg, sendto, setdomainname, setfsgid, setfsuid, setgid, setgroups, sethostname, setitimer, setns, setpgid, setpriority, setregid, setresgid, setresuid, setreuid, setrlimit, setsid, setsockopt, set_tid_address, settimeofday, setuid, setxattr, shutdown, sigaltstack, signalfd4, socketpair, socket, splice, statfs, swapoff, swapon, symlinkat, sync_file_range, sync, sysinfo, tee, tgkill, timer_create, timer_delete, timerfd_create, timerfd_gettime, timerfd_settime, timer_getoverrun, timer_gettime, timer_settime, times, truncate, umask, umount2, uname, unlinkat, unshare, utimensat, vmsplice, wait4, waitid, write, writev</td>
</tr></table>

<p>ARM32 system calls required by bionic per
<code>bionic/libc/SYSCALLS.txt</code>:</p>

<table>
<tr>
<td class="devsite-click-to-copy">accept4, acct, adjtimex, arm_fadvise64_64, bind, brk, cacheflush, capget, capset, chdir, chroot, clock_adjtime, clock_getres, clock_gettime, clock_nanosleep, clock_settime, close, connect, delete_module, dup3, dup, epoll_create1, epoll_ctl, epoll_pwait, eventfd2, execve, exit, exit_group, faccessat, fallocate, fchdir, fchmodat, fchmod, fchownat, fchown32, fcntl64, fdatasync, fgetxattr, flistxattr, flock, fremovexattr, fsetxattr, fstat64, fstatat64, fstatfs64, fsync, ftruncate64, getcpu, getcwd, getdents64, getegid32, geteuid32, getgid32, getgroups32, getitimer, getpeername, getpgid, getpid, getppid, getpriority, getresgid32, getresuid32, ugetrlimit, getrusage, getsid, getsockname, getsockopt, gettimeofday, getuid32, getxattr, init_module, inotify_add_watch, inotify_init1, inotify_rm_watch, ioctl, kill, syslog, lgetxattr, linkat, listen, listxattr, llistxattr, _llseek, lremovexattr, lseek, lsetxattr, madvise, mincore, mkdirat, mknodat, mlockall, mlock, mmap2, mount, mprotect, mremap, msync, munlockall, munlock, munmap, nanosleep, openat, personality, pipe2, ppoll, prctl, pread64, preadv, prlimit64, process_vm_readv, process_vm_writev, pselect6, ptrace, pwrite64, pwritev, quotactl, readahead, readlinkat, read, readv, reboot, recvfrom, recvmmsg, recvmsg, removexattr, renameat, rt_sigaction, rt_sigpending, rt_sigprocmask, rt_sigqueueinfo, rt_sigsuspend, rt_sigtimedwait, sched_getaffinity, sched_getparam, sched_get_priority_max, sched_get_priority_min, sched_getscheduler, sched_rr_get_interval, sched_setaffinity, sched_setparam, sched_setscheduler, sched_yield, sendfile64, sendfile, sendmmsg, sendmsg, sendto, setdomainname, setfsgid, setfsuid, setgid32, setgroups32, sethostname, setitimer, setns, setpgid, setpriority, setregid32, setresgid32, setresuid32, setreuid32, setrlimit, setsid, setsockopt, set_tid_address, settimeofday, set_tls, setuid32, setxattr, shutdown, sigaction, sigaltstack, signalfd4, socketpair, socket, splice, statfs64, swapoff, swapon, symlinkat, sync_file_range2, sync, sysinfo, tee, tgkill, timer_create, timer_delete, timerfd_create, timerfd_gettime, timerfd_settime, timer_getoverrun, timer_gettime, timer_settime, times, truncate64, truncate, umask, umount2, uname, unlinkat, unshare, utimensat, vmsplice, wait4, waitid, write, writev</td>
</tr></table>

<p>The system calls listed below are made by bypassing bionic:</p>

<table>
  <tr>
   <th style="width:20%">All Architectures</th>
   <td>gettid, futex, clone, rt_sigreturn, rt_tgsigqueueinfo, restart_syscall,
getrandom, perf_event_open, syncfs, tkill, seccomp</td>
  </tr>
  <tr>
   <th>arm</th>
   <td>vfork, sigreturn, pipe, access, stat64, lstat64, open, getdents, eventfd,
epoll_wait, readlink, epoll_create, creat, unlink</td>
  </tr>
  <tr>
   <th>arm64</th>
   <td>pivot_root, ioprio_get, ioprio_set</td>
  </tr>
</table>

<aside class="note"><strong>Note:</strong> x86 and x86_64 system calls will be
added in a future release.</aside>

<h3 id="prctl">prctl</h3>
<p>In addition to the upstream <code>prctl</code> operations for supported
kernel versions, Android relies on additional <code>prctl</code> operations, the
implementation of which can be found in the android-common kernel.</p>

<pre class="prettyprint">
PR_SET_TIMERSLACK_PID
PR_SET_VMA
</pre>

<h2 id="filesystems">Filesystems</h2>
<p>The Linux kernel exports interfaces via several filesystems. Android expects
these interfaces to communicate the same information, in the same format, and
provide the same semantics as in the upstream Linux kernel. For interfaces that
do not exist upstream, the appropriate behavior is dictated by the corresponding
branch of the Android common kernel.</p>

<h3 id="procfs">procfs</h3>
<table>
  <tr>
   <th>Path</th>
   <th>Description</th>
  </tr>
  <tr>
   <td><code>/proc/cmdline</code></td>
   <td>Read-only file containing command line arguments passed to the kernel.
   </td>
  </tr>
  <tr>
   <td><code>/proc/config.gz</code></td>
   <td>Read-only file containing kernel build configuration.</td>
  </tr>
  <tr>
   <td><code>/proc/cpuinfo</code></td>
   <td>Read-only file containing architecture-specific CPU details.</td>
  </tr>
  <tr>
   <td><code>/proc/kmsg</code></td>
   <td>Read-only file showing kernel messages in real time.</td>
  </tr>
  <tr>
   <td><code>/proc/meminfo</code></td>
   <td>Read-only file showing memory subsystem details.</td>
  </tr>
  <tr>
   <td><code>/proc/modules</code></td>
   <td>Read-only file containing information about loaded kernel modules.</td>
  </tr>
  <tr>
   <td><code>/proc/mounts</code></td>
 <td>Symlink to <code>/proc/self/mounts</code>, which is a read-only file
 listing information about the mounted filesystems.</td>
  </tr>
  <tr>
   <td><code>/proc/net/xt_qtaguid/ctrl</code></td>
   <td>Read-write file providing information about tagged sockets.</td>
  </tr>
  <tr>
   <td><code>/proc/self/maps</code></td>
   <td>Read-only file containing the currently mapped memory regions and
   permissions.</td>
  </tr>
  <tr>
   <td><code>/proc/stat</code></td>
   <td>Read-only file containing various kernel and system statistics.</td>
  </tr>
  <tr>
   <td><code>/proc/sys/kernel/kptr_restrict</code></td>
   <td>Read-write file that determines whether kernel pointers are printed in
   <code>proc</code> files and other interfaces.</td>
  </tr>
  <tr>
   <td><code>/proc/sys/kernel/randomize_va_space</code></td>
   <td>Read-write file that determines the address layout randomization policy
   for the system.</td>
  </tr>
  <tr>
   <td><code>/proc/sys/vm/mmap_min_addr</code></td>
   <td>Read-write file that determines the minimum address than can be
   <code>mmap</code>'d.</td>
  </tr>
  <tr>
   <td><code>/proc/sys/vm/mmap_rnd_bits</code></td>
   <td>Read-write file that specifies the amount of randomness in
   <code>mmap</code>'d addresses.</td>
  </tr>
  <tr>
   <td><code>/proc/sys/vm/mmap_rnd_compat_bits</code></td>
   <td>Read-write file that specifies the amount of randomness in
   <code>mmap</code>'d addresses.</td>
  </tr>
  <tr>
   <td><code>/proc/sys/vm/overcommit_memory</code></td>
   <td>Read-write file that determines the kernel virtual memory accounting
   mode.</td>
  </tr>
  <tr>
   <td><code>/proc/uid_cputime/remove_uid_range</code></td>
   <td>Write-only file that, when written, removes UIDs from being shown in
   <code>/proc/uid_cputime/show_uid_stat</code>.</td>
  </tr>
  <tr>
   <td><code>/proc/uid_cputime/show_uid_stat</code></td>
   <td>Read-only file containing the time a UID's processes spent in user and
   kernel space.</td>
  </tr>
  <tr>
   <td><code>/proc/version</code></td>
   <td>Read-only file containing a string describing the kernel version.</td>
  </tr>
  <tr>
   <td><code>/proc/vmallocinfo</code></td>
   <td>Read-only file containing <code>vmalloc</code>'d ranges.</td>
  </tr>
  <tr>
   <td><code>/proc/zoneinfo</code></td>
   <td>Read-only file containing information about memory zones.</td>
  </tr>
</table>

<h3 id="dev">dev</h3>

<table>
  <tr>
   <th>Path</th>
   <th>Description</th>
  </tr>
  <tr>
   <td><code>/dev/ashmem</code></td>
   <td>Anonymous shared memory device file.</td>
  </tr>
  <tr>
   <td><code>/dev/binder</code></td>
   <td>Binder device file.</td>
  </tr>
  <tr>
   <td><code>/dev/hwbinder</code></td>
   <td>Hardware binder device file.</td>
  </tr>
  <tr>
   <td><code>/dev/tun</code></td>
   <td>Universal TUN/TAP device file.</td>
  </tr>
  <tr>
   <td><code>/dev/xt_qtaguid</code></td>
   <td>QTAGUID netfilter device file.</td>
  </tr>
</table>

<h3 id="sysfs">sysfs</h3>
<table>
  <tr>
   <th>Path</th>
   <th>Description</th>
  </tr>
  <tr>
   <td><code>/sys/devices/system/cpu/online</code></td>
   <td>Read-only file showing ranges of CPUs that are currently online.</td>
  </tr>
  <tr>
   <td><code>/sys/kernel/wakeup_reasons/last_resume_reason</code></td>
   <td>Read-only file showing a textual description of why the system exited the
   last instance of suspend.</td>
  </tr>
  <tr>
   <td><code>/sys/devices/system/cpu/kernel_max</code></td>
   <td>Read-only file showing the maximum CPU index supported by the kernel.
   </td>
  </tr>
</table>

<h3 id="selinuxfs">selinuxfs</h3>
<p>The framework mounts <code>selinuxfs</code> at <code>/sys/fs/selinux</code>.
</p>

<table>
  <tr>
   <th>Path</th>
   <th>Description</th>
  </tr>
  <tr>
   <td><code>/sys/fs/selinux/checkreqprot</code></td>
   <td>Read/write file containing a binary flag that determines how selinux
   protections are checked on <code>mmap</code> and <code>mprotect</code> calls.
   </td>
  </tr>
  <tr>
   <td><code>/sys/fs/selinux/null</code></td>
   <td>Read/write null device for use by selinux.</td>
  </tr>
  <tr>
   <td><code>/sys/fs/selinux/policy</code></td>
   <td>Read-only file containing the selinux policy in binary form.</td>
  </tr>
</table>

<aside class="note"><strong>Note:</strong> For details on SELinux in Android
8.0, see <a href="/security/selinux/images/SELinux_Treble.pdf">SELinux for
Android 8.0</a>.</aside>

  </body>
</html>