我正在尝试创建一个系统调用,它将增加一个添加到 cpu 结构中的数字。但是我相信一个系统调用必须是无效的,所以我如何在调用它时传递一个值。
增量号(3);
在 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;
}
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);