调用一个syscall

BlueOS kernel offers two modes of invoking syscall.

  1. 软件中断

这通常见于大多数OS内核中,用于从用户空间切换到内核空间。

  1. 直接调用

在此模式下,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即可。