xv6创建有参数的系统调用

xv6操作系统创建一个有参数的的系统调用。
对于无参数的系统调用,有很多教程,我也发现了很多。但是对于有参数的,很那找到。这里我写明关键字-“带参数”,希望帮助到大家。如果代码有错误,敬请指正。

1.实验环境

1. Ubuntu 15.5虚拟机
2. qemu虚拟环境
3. xv6操作内核

2.创建步骤

我以 int set_priority(int priority,int pid)为例。
1. 在proc.c中完成功能函数,格式类如 int set_priority(int priority,int pid){.......}
2. 在user.h中和defs.h中注明用户接口,格式类如 int set_priority(int priority,int pid)
3. 在syscall.h中声明系统标识,格式类如 #define SYS_setpriority 24
4. 在syscall.c中声明系统标识和系统调用得关系,格式类如 extern int set_priority(void)以及[SYS_set_priority] sys_set_priority。在这里系统调用中要求填void
5. 最关键的一步,在sysproc.c中声明系统调用和功能函数的关联,格式类如:

int 
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
xv6 中添加系统调用需要进行以下步骤: 1. 在 `syscall.h` 文件中添加系统调用号。具体来说,你需要在 `SYS_hoge` 列表中添加一个新的系统调用号,其中 `hoge` 是你的系统调用的名称。例如,如果你的系统调用名称是 `mycall`,则可以在 `syscall.h` 文件中添加以下代码: ``` #define SYS_mycall 22 ``` 2. 在 `syscall.c` 文件中添加系统调用的具体实现。具体来说,你需要在 `syscalls[]` 数组中添加一个新的结构体,其中包含你的系统调用的名称和具体的实现函数。例如,如果你的系统调用名称是 `mycall`,则可以在 `syscall.c` 文件中添加以下代码: ``` static int sys_mycall(void) { // 在这里编写你的系统调用的具体实现 return 0; } static struct { int nargs; int (*func)(void); } syscalls[] = { { 0, sys_fork }, { 1, sys_exit }, { 0, sys_wait }, { 1, sys_pipe }, { 4, sys_read }, { 4, sys_write }, { 2, sys_close }, { 1, sys_mycall }, // 添加新的系统调用 }; ``` 3. 在 `user.h` 文件中添加用户空间的系统调用函数声明。具体来说,你需要添加一个新的函数声明,其中包含你的系统调用的名称和参数。例如,如果你的系统调用名称是 `mycall`,则可以在 `user.h` 文件中添加以下代码: ``` int mycall(void); ``` 4. 在用户程序中调用你的系统调用。具体来说,你可以在用户程序中调用你的系统调用函数,例如: ``` #include "user.h" int main(int argc, char *argv[]) { mycall(); // 调用你的系统调用 exit(); } ``` 5. 在内核态的系统调用函数中添加系统调用的具体实现。具体来说,你需要在 `syscall()` 函数中添加一个新的 `case` 分支,其中包含你的系统调用的具体实现。例如,如果你的系统调用名称是 `mycall`,则可以在 `syscall()` 函数中添加以下代码: ``` case SYS_mycall: argint(0, &arg1); // 在这里调用你的系统调用的具体实现 return 0; ``` 6. 最后,重新编译 xv6 并运行你的用户程序。在 xv6 的命令行下输入你的程序名称即可运行。例如,如果你的用户程序名称是 `myprog`,则可以通过输入 `myprog` 命令来运行它,其中包含了你的系统调用调用

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值