跳转到内容

系统调用参考

OpenOS 采用 Channel/Handle 模型,共实现 44 个系统调用。以下是完整的系统调用表。

来自 kernel/src/syscall/number.rs

pub const SYS_CHANNEL_CREATE: u64 = 0x01;
pub const SYS_CHANNEL_SEND: u64 = 0x02;
pub const SYS_CHANNEL_RECEIVE: u64 = 0x03;
pub const SYS_CHANNEL_CALL: u64 = 0x04;
pub const SYS_CHANNEL_REPLY: u64 = 0x05;
pub const SYS_HANDLE_CLOSE: u64 = 0x10;
pub const SYS_HANDLE_DUPLICATE: u64 = 0x11;
pub const SYS_HANDLE_TRANSFER: u64 = 0x12;
pub const SYS_PROCESS_CREATE: u64 = 0x30;
pub const SYS_PROCESS_START: u64 = 0x31;
pub const SYS_PROCESS_EXIT: u64 = 0x32;
pub const SYS_PROCESS_WAIT: u64 = 0x33;
pub const SYS_BRK: u64 = 0x34; // 设置堆边界
pub const SYS_MMAP: u64 = 0x35; // 内存映射
pub const SYS_MUNMAP: u64 = 0x36; // 取消映射
pub const SYS_THREAD_CREATE: u64 = 0x40;
pub const SYS_THREAD_EXIT: u64 = 0x41;
pub const SYS_THREAD_YIELD: u64 = 0x42;
pub const SYS_SOCKET: u64 = 0xA0; // 创建套接字
pub const SYS_BIND: u64 = 0xA1; // 绑定地址
pub const SYS_LISTEN: u64 = 0xA2; // 监听连接
pub const SYS_ACCEPT: u64 = 0xA3; // 接受连接
pub const SYS_CONNECT: u64 = 0xA4; // 连接远程
pub const SYS_SENDTO: u64 = 0xA5; // 发送到指定地址
pub const SYS_RECVFROM: u64 = 0xA6; // 从指定地址接收
pub const SYS_CLOSE_SOCK: u64 = 0xA7; // 关闭套接字
pub const SYS_DNS_RESOLVE: u64 = 0xA8; // DNS 解析
pub const SYS_PORT_IN: u64 = 0xB0; // 读取 I/O 端口
pub const SYS_PORT_OUT: u64 = 0xB1; // 写入 I/O 端口
pub const SYS_MMIO_MAP: u64 = 0xB2; // 映射 MMIO 内存
pub const SYS_MMIO_UNMAP: u64 = 0xB3; // 取消 MMIO 映射
pub const SYS_IRQ_WAIT: u64 = 0xB4; // 等待 IRQ
pub const SYS_FS_UNLINK: u64 = 0xC0; // 删除文件
pub const SYS_FS_RENAME: u64 = 0xC1; // 重命名文件
pub const SYS_FS_MKDIR: u64 = 0xC2; // 创建目录
pub const SYS_FS_RMDIR: u64 = 0xC3; // 删除目录
pub const SYS_FS_STAT: u64 = 0xC4; // 获取文件状态
pub const SYS_FS_READDIR: u64 = 0xC5; // 读取目录条目
pub const SYS_EVENT_CREATE: u64 = 0xF2;
pub const SYS_EVENT_SIGNAL: u64 = 0xF3;
pub const SYS_EVENT_WAIT: u64 = 0xFB;
pub const SYS_EVENT_DESTROY: u64 = 0xFC;
pub const SYS_ENDPOINT_REGISTER: u64 = 0xF5;
pub const SYS_ENDPOINT_DISCOVER: u64 = 0xF6;
pub const SYS_FS_OPEN: u64 = 0xF7;
pub const SYS_FS_READ: u64 = 0xF8;
pub const SYS_FS_WRITE: u64 = 0xF9;
pub const SYS_FS_CLOSE: u64 = 0xFA;
pub const SYS_FS_SEEK: u64 = 0xFF; // 文件定位
pub const SYS_NET_SEND: u64 = 0xFD;
pub const SYS_NET_RECEIVE: u64 = 0xFE;
pub const SYS_CONSOLE_WRITE: u64 = 0xF0;
pub const SYS_CONSOLE_READ: u64 = 0xF4;
pub const SYS_SLEEP: u64 = 0xF1;

RAX = 系统调用号
RDI = 参数 1
RSI = 参数 2
RDX = 参数 3
R10 = 参数 4
R8 = 参数 5
R9 = 参数 6
返回值:
RAX = 结果(正数)或错误码(负数)

错误码:

-1 = EINVAL(无效参数)
-2 = ENOENT(未找到)
-3 = EPERM(权限不足)
-4 = ENOMEM(内存不足)
-5 = EBUSY(资源忙)
-6 = EPIPE(Channel 已关闭)
-7 = EAGAIN(会阻塞)
-8 = ETIME(超时)
-9 = EFAULT(错误指针)
-10 = ENOSYS(未知系统调用)

类别数量状态
Channel5已完成
Handle3已完成
Process7已完成
Thread3已完成
Socket9已完成
硬件访问5已完成
文件系统元数据6已完成
事件4已完成
服务发现2已完成
文件系统 I/O5已完成
网络2已完成
调试3已完成
总计54