如何将值传递给系统调用XV6

时间:2017-10-22 04:30:06

标签: xv6

我正在尝试创建一个系统调用,该调用将增加添加到cpu结构中的数字。但是我认为sys调用必须是无效的,所以如何在调用它时传入一个值。

incrementNum(3);

1 个答案:

答案 0 :(得分:0)

Xv6有自己的函数,用于将参数从用户空间传递到内核空间(系统调用)。您可以使用argint()在系统调用中检索整数参数,并使用argstr()来检索字符串参数。

传递参数可以通过传统方式完成,但是要检索参数,必须使用这些方法。在你的情况下:

在syscall.c中:

extern int incrementNum(int);

static int (*syscalls[])(void) = {
...
[SYS_incrementNum]  sys_incrementNum,
};

在syscall.h中

#define SYS_incrementNum 22

在user.h中

int incrementNum(int);

在Usys.S

SYSCALL(incrementNum);

在sysproc.c中(您要在其中检索参数)

int 
sys_incrementNum(int num)
{
    argint(0,&num); //retrieving first argument
    cprintf("%d - Inside system call!",num);
}

现在可以通过以下方式调用系统调用:

incrementNum(3);