RISC-V Syscall 系列 1:什么是 Syscall ?
什么是 Syscall ? Syscall 又称为系统调用,它是操作系统内核给用户态程序提供的一组 API,可以用来访问系统资源和内核提供的服务。比如用户态程序申请内存、读写文件等都需要通过 Syscall 完成。
通过 Linux 源码里可以看到 (include/linux/syscalls.h),大约有 400 多个 Syscall。其中一部分是兼容 POSIX 标准,另一些是 Linux 特有的。
如何调用 Syscall ? 应用程序想要调用 Syscall 有两种方式,分别是直接调用和使用 C 标准库。
直接调用 下面我们通过一段汇编代码来看看如何直接调用 Syscall。
.data msg: .ascii "Hello, world!\n" .text .global _start _start: li a7, 64 # linux write syscall li a0, 1 # stdout la a1, msg # address of string li a2, 14 # length of string ecall # call linux syscall li a7, 93 # linux exit syscall li a0, 0 # return value ecall # call linux syscall 上面的代码的功能是通过系统调用往标准输出上打印一串字符。