1

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

增量号(3);

4

2 回答 2

0

在 sysproc.c 中,将函数声明为具有 void 参数。然后检索里面的参数。其余的,请遵循@Sravani 的答案。

int 
sys_incrementNum(void)
{
    int num;
    argint(0,&num); //retrieving first argument
    cprintf("%d - Inside system call!",num);
    return num + 1;
}
于 2021-12-29T20:07:41.220 回答
0

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

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

在 syscall.c 中:

extern int incrementNum(int);

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

在 syscall.h

#define SYS_incrementNum 22

在用户.h

int incrementNum(int);

在美国

SYSCALL(incrementNum);

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

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

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

incrementNum(3);
于 2017-11-18T07:52:14.757 回答