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 sys_setPriority(void){
     int priority, pid;
     if(argint(0, &priority) < 0){
      return -1;
     }//利用argint函数注明变量,用来功能函数的输入。
     if(argint(1, &pid) < 0){
      return -1;
     }
     return setPriority(priority, pid);
    }

至此,单参数的系统调用就完成了,在自己的用户程序中就可以调用了。但是注意调用的时候是要传入参数的。

猜你喜欢

转载自blog.csdn.net/weixin_43661569/article/details/106209137