Lab1 系统调用&&测试程序
1)在mod.rs添加系统调用
/kernel/src/syscall/mod.rs
SYS_ADD =>{
// 这里应该对传入的参数进行合法性检查
let a = args[0] ;
let b = args[1] ;
Ok(a + b)
}
SYS_ADD需要是一个整数,整数大小为系统调用号
/kernel/src/arch/x86_64/syscall/nr.rs
我看很多系统调用都把系统定义号放在这里
添加测试程序
在/user/apps中cargo new test_SYS_ADD
注意:在 test_SYS_ADD要把libc添加为依赖项
use std::ffi::CString;
use libc::{
syscall, SYS_exit};
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
let num1 = args[1].parse::<i32>().unwrap();
let num2 = args[2].parse::<i32>().unwrap(); unsafe {
// 使用 syscall 来调用系统调用 888
let result: i32 = syscall(888, num1, num2) as i32;
println!("syscall(SYS_ADD): ADD {} + {} = {}", num1, num2,result);
// 使用 assert 来验证返回结果
assert_eq!(result, num1 + num2, "System call returned incorrect result!");
println!("System call returned correct result: {}", result);
}
}
编写玩测试程序后make build编译,再运行
结果
root@DragonOS:/$ test_SYS_ADD 32 45
[ WARN ] (src/syscall/mod.rs:876) SYS_POLL has not yet been implemented
[ WARN ] (src/syscall/mod.rs:899) SYS_SIGALTSTACK has not yet been impled
syscall(SYS_ADD): ADD 32 + 45 = 77