os/kernel/syscall/
mod.rs

1//! 系统调用模块
2//!
3//! 提供系统调用的实现
4
5#![allow(dead_code)]
6mod cred;
7mod fcntl;
8mod fs;
9pub mod io;
10mod ioctl;
11mod ipc;
12mod mm;
13mod network;
14mod signal;
15mod sys;
16mod task;
17mod util;
18
19use core::ffi::{c_char, c_int, c_uint, c_ulong, c_void};
20
21use crate::{
22    impl_syscall,
23    uapi::{
24        fs::LinuxStatFs,
25        futex::RobustListHead,
26        iovec::IoVec,
27        resource::{Rlimit, Rusage},
28        signal::{SigInfoT, SignalAction},
29        sysinfo::SysInfo,
30        time::{Itimerval, TimeSpec},
31        types::{SigSetT, SizeT, StackT},
32        uts_namespace::UtsNamespace,
33    },
34    vfs::Stat,
35};
36use cred::*;
37use fcntl::*;
38use fs::*;
39use io::*;
40use ioctl::*;
41use ipc::*;
42use mm::*;
43use network::*;
44use signal::*;
45use sys::*;
46use task::*;
47
48// 系统调用实现注册
49// 分类顺序与 arch/riscv/syscall/syscall_number.rs 保持一致
50
51// 文件系统/目录操作 (Filesystem/Directory Operations)
52impl_syscall!(sys_getcwd, getcwd, (*mut u8, usize));
53
54// Epoll & Duplication
55impl_syscall!(sys_dup, dup, (usize));
56impl_syscall!(sys_dup3, dup3, (usize, usize, u32));
57impl_syscall!(sys_fcntl, fcntl, (usize, i32, usize));
58impl_syscall!(sys_ioctl, ioctl, (i32, u32, usize));
59
60// 文件/目录创建与链接 (File/Directory Creation and Linking)
61impl_syscall!(sys_mknodat, mknodat, (i32, *const c_char, u32, u64));
62impl_syscall!(sys_mkdirat, mkdirat, (i32, *const c_char, u32));
63impl_syscall!(sys_unlinkat, unlinkat, (i32, *const c_char, u32));
64impl_syscall!(
65    sys_symlinkat,
66    symlinkat,
67    (*const c_char, i32, *const c_char)
68);
69
70// 挂载/文件系统信息 (Mount/Filesystem Info)
71impl_syscall!(sys_statfs, statfs, (*const c_char, *mut LinuxStatFs));
72
73// 文件大小/权限/所有权 (File Size/Permissions/Ownership)
74impl_syscall!(sys_faccessat, faccessat, (i32, *const c_char, i32, u32));
75impl_syscall!(sys_chdir, chdir, (*const c_char));
76impl_syscall!(sys_fchmodat, fchmodat, (i32, *const c_char, u32, u32));
77impl_syscall!(sys_fchownat, fchownat, (i32, *const c_char, u32, u32, u32));
78
79// 文件描述符操作 (File Descriptor Operations)
80impl_syscall!(sys_openat, openat, (i32, *const c_char, u32, u32));
81impl_syscall!(sys_close, close, (usize));
82impl_syscall!(sys_pipe2, pipe2, (*mut i32, u32));
83impl_syscall!(sys_getdents64, getdents64, (usize, *mut u8, usize));
84impl_syscall!(sys_lseek, lseek, (usize, isize, usize));
85
86// I/O 操作 (Input/Output Operations)
87impl_syscall!(sys_read, read, (usize, *mut u8, usize));
88impl_syscall!(sys_write, write, (usize, *const u8, usize));
89impl_syscall!(sys_readv, readv, (usize, *const IoVec, usize));
90impl_syscall!(sys_writev, writev, (usize, *const IoVec, usize));
91impl_syscall!(sys_pread64, pread64, (usize, *mut u8, usize, i64));
92impl_syscall!(sys_pwrite64, pwrite64, (usize, *const u8, usize, i64));
93impl_syscall!(sys_preadv, preadv, (usize, *const IoVec, usize, i64));
94impl_syscall!(sys_pwritev, pwritev, (usize, *const IoVec, usize, i64));
95impl_syscall!(sys_sendfile, sendfile, (usize, usize, *mut i64, usize));
96impl_syscall!(
97    sys_pselect6,
98    pselect6,
99    (usize, usize, usize, usize, usize, usize)
100);
101impl_syscall!(sys_ppoll, ppoll, (usize, usize, usize, usize));
102
103// 文件元数据与同步 (File Metadata and Synchronization)
104impl_syscall!(
105    sys_readlinkat,
106    readlinkat,
107    (i32, *const c_char, *mut u8, usize)
108);
109impl_syscall!(
110    sys_newfstatat,
111    newfstatat,
112    (i32, *const c_char, *mut Stat, u32)
113);
114impl_syscall!(sys_fstat, fstat, (usize, *mut Stat));
115impl_syscall!(sys_sync, sync, ());
116impl_syscall!(sys_fsync, fsync, (usize));
117impl_syscall!(sys_fdatasync, fdatasync, (usize));
118
119// 定时器 (Timers)
120impl_syscall!(
121    sys_utimensat,
122    utimensat,
123    (i32, *const c_char, *const TimeSpec, u32)
124);
125
126// 进程与控制 (Process and Control)
127impl_syscall!(sys_exit, exit, (c_int));
128impl_syscall!(sys_exit_group, exit_group, noreturn, (c_int));
129impl_syscall!(sys_set_tid_address, set_tid_address, (*mut c_int));
130
131// 同步/休眠 (Synchronization/Sleeping)
132impl_syscall!(sys_nanosleep, nanosleep, (*const TimeSpec, *mut TimeSpec));
133impl_syscall!(
134    sys_futex,
135    futex,
136    (*mut u32, c_int, u32, *const TimeSpec, *mut u32, u32)
137);
138impl_syscall!(
139    sys_set_robust_list,
140    set_robust_list,
141    (*const RobustListHead, SizeT)
142);
143impl_syscall!(
144    sys_get_robust_list,
145    get_robust_list,
146    (c_int, *mut *mut RobustListHead, *mut SizeT)
147);
148impl_syscall!(sys_getitimmer, getitimer, (c_int, *mut Itimerval));
149impl_syscall!(
150    sys_setitimmer,
151    setitimer,
152    (c_int, *const Itimerval, *mut Itimerval)
153);
154
155// POSIX 定时器 (POSIX Timers)
156impl_syscall!(sys_clock_settime, clock_settime, (c_int, *const TimeSpec));
157impl_syscall!(sys_clock_gettime, clock_gettime, (c_int, *mut TimeSpec));
158impl_syscall!(sys_clock_getres, clock_getres, (c_int, *mut TimeSpec));
159impl_syscall!(sys_syslog, syslog, (i32, *mut u8, i32));
160
161// 信号 (Signals)
162impl_syscall!(sys_kill, kill, (c_int, c_int));
163impl_syscall!(sys_tkill, tkill, (c_int, c_int));
164impl_syscall!(sys_tgkill, tgkill, (c_int, c_int, c_int));
165impl_syscall!(sys_sigaltstack, signal_stack, (*const StackT, *mut StackT));
166impl_syscall!(sys_rt_sigsuspend, rt_sigsuspend, (*const SigSetT, c_uint));
167impl_syscall!(
168    sys_rt_sigaction,
169    rt_sigaction,
170    (c_int, *const SignalAction, *mut SignalAction)
171);
172impl_syscall!(
173    sys_rt_sigprocmask,
174    rt_sigprocmask,
175    (c_int, *const SigSetT, *mut SigSetT, c_uint)
176);
177impl_syscall!(sys_rt_sigpending, rt_sigpending, (*mut SigSetT, c_uint));
178impl_syscall!(
179    sys_rt_sigtimedwait,
180    rt_sigtimedwait,
181    (*const SigSetT, *mut SigInfoT, *const TimeSpec, c_uint)
182);
183impl_syscall!(sys_rt_sigreturn, rt_sigreturn, noreturn, ());
184
185// 进程属性 (Process Attributes)
186impl_syscall!(sys_reboot, reboot, (c_int, c_int, c_int, *mut c_void));
187impl_syscall!(sys_setgid, setgid, (u32));
188impl_syscall!(sys_setuid, setuid, (u32));
189impl_syscall!(sys_setresuid, setresuid, (u32, u32, u32));
190impl_syscall!(sys_getresuid, getresuid, (*mut u32, *mut u32, *mut u32));
191impl_syscall!(sys_setresgid, setresgid, (u32, u32, u32));
192impl_syscall!(sys_getresgid, getresgid, (*mut u32, *mut u32, *mut u32));
193impl_syscall!(sys_setsid, setsid, ());
194impl_syscall!(sys_setpgid, set_pgid, (c_int, c_int));
195
196// 系统信息 (System Information)
197impl_syscall!(sys_uname, uname, (*mut UtsNamespace));
198impl_syscall!(sys_sethostname, set_hostname, (*const c_char, usize));
199impl_syscall!(sys_getrlimit, getrlimit, (c_int, *mut Rlimit));
200impl_syscall!(sys_setrlimit, setrlimit, (c_int, *const Rlimit));
201impl_syscall!(sys_umask, umask, (u32));
202impl_syscall!(sys_getpid, get_pid, ());
203impl_syscall!(sys_getppid, get_ppid, ());
204impl_syscall!(sys_getpgid, get_pgid, (c_int));
205impl_syscall!(sys_getuid, getuid, ());
206impl_syscall!(sys_geteuid, geteuid, ());
207impl_syscall!(sys_getgid, getgid, ());
208impl_syscall!(sys_getegid, getegid, ());
209impl_syscall!(sys_gettid, gettid, ());
210impl_syscall!(sys_sysinfo, sysinfo, (*mut SysInfo));
211
212// 网络 (Networking/Sockets)
213impl_syscall!(sys_socket, socket, (i32, i32, i32));
214impl_syscall!(sys_bind, bind, (i32, *const u8, u32));
215impl_syscall!(sys_listen, listen, (i32, i32));
216impl_syscall!(sys_accept, accept, (i32, *mut u8, *mut u32));
217impl_syscall!(sys_connect, connect, (i32, *const u8, u32));
218impl_syscall!(sys_getsockname, getsockname, (i32, *mut u8, *mut u32));
219impl_syscall!(sys_getpeername, getpeername, (i32, *mut u8, *mut u32));
220impl_syscall!(
221    sys_sendto,
222    sendto,
223    (i32, *const u8, usize, i32, *const u8, u32)
224);
225impl_syscall!(
226    sys_recvfrom,
227    recvfrom,
228    (i32, *mut u8, usize, i32, *mut u8, *mut u32)
229);
230impl_syscall!(sys_setsockopt, setsockopt, (i32, i32, i32, *const u8, u32));
231impl_syscall!(
232    sys_getsockopt,
233    getsockopt,
234    (i32, i32, i32, *mut u8, *mut u32)
235);
236
237// 进程创建/执行 (Process Creation/Execution)
238impl_syscall!(
239    sys_clone,
240    clone,
241    (
242        c_ulong,     // flags (a0)
243        c_ulong,     // stack (a1)
244        *mut c_int,  // parent_tid (a2)
245        *mut c_void, // tls (a3)
246        *mut c_int   // child_tid (a4)
247    )
248);
249impl_syscall!(
250    sys_execve,
251    execve,
252    (*const c_char, *const *const c_char, *const *const c_char)
253);
254
255// 网络/I/O (续)
256impl_syscall!(sys_accept4, accept4, (i32, *mut u8, *mut u32, i32));
257
258// 进程与控制 (续)
259impl_syscall!(sys_wait4, wait4, (c_int, *mut c_int, c_int, *mut Rusage));
260impl_syscall!(
261    sys_prlimit,
262    prlimit,
263    (c_int, c_int, *const Rlimit, *mut Rlimit)
264);
265
266// 内存管理 (Memory Management)
267impl_syscall!(sys_brk, brk, (usize));
268impl_syscall!(sys_mmap, mmap, (*mut c_void, usize, i32, i32, i32, i64));
269impl_syscall!(sys_munmap, munmap, (*mut c_void, usize));
270impl_syscall!(sys_mprotect, mprotect, (*mut c_void, usize, i32));
271
272// 文件系统同步 (续)
273impl_syscall!(sys_syncfs, syncfs, (usize));
274
275// 调度 (续)
276impl_syscall!(
277    sys_renameat2,
278    renameat2,
279    (i32, *const c_char, i32, *const c_char, u32)
280);
281
282// 挂载/文件系统操作 (Mount/Filesystem Operations)
283impl_syscall!(sys_umount2, umount2, (*const c_char, i32));
284impl_syscall!(
285    sys_mount,
286    mount,
287    (
288        *const c_char,
289        *const c_char,
290        *const c_char,
291        u64,
292        *const c_void
293    )
294);
295
296// 随机数与内存文件
297impl_syscall!(sys_getrandom, getrandom, (*mut c_void, SizeT, c_uint));
298
299// 获取网络接口地址列表 (非标准系统调用)
300impl_syscall!(sys_getifaddrs, getifaddrs, (*mut *mut u8));
301impl_syscall!(sys_freeifaddrs, freeifaddrs, (*mut u8));
302
303// 扩展系统调用 (Extended/Legacy)
304impl_syscall!(sys_send, send, (i32, *const u8, usize, i32));
305impl_syscall!(sys_recv, recv, (i32, *mut u8, usize, i32));
306impl_syscall!(sys_seteuid, seteuid, (u32));
307impl_syscall!(sys_setegid, setegid, (u32));