调用一个syscall
BlueOS kernel offers two modes of invoking syscall.
- 软件中断
这通常见于大多数OS内核中,用于从用户空间切换到内核空间。
- 直接调用
在此模式下,syscall处理程序通过函数调用直接调用。
在两种模式下,如果需要调用syscall,请使用blueos_scal crate中的bk_syscall!宏。例如,
use blueos_scal::bk_syscall;
use blueos_header::syscalls::NR::{Read};
fn read_something(fd: i32, buf: *mut i8, len: usize) -> i32 {
bk_syscall!(Read, buf, len) as i32
}
切换到另一种模式时无需更改代码。默认使用SWI模式。如需使用直接调用模式,只需在构建内核时传入--cfg direct_syscall_handler即可。