Pointers 添加系统调用xv6的指针类型不兼容--使用sysfunc.h中定义的一致返回类型

Pointers 添加系统调用xv6的指针类型不兼容--使用sysfunc.h中定义的一致返回类型,pointers,compiler-errors,system-calls,incompatibletypeerror,xv6,Pointers,Compiler Errors,System Calls,Incompatibletypeerror,Xv6,这是我的第一个问题,欢迎提出建设性的批评: 我正在努力向xv6添加系统调用。我以前做过,但我从未遇到过这个特定的错误。我得到的错误是: kernel/syscall.c:106:16: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] [SYS_getpinfo] sys_getpinfo, 我在谷歌上搜索了一下,问题可能是我没有在通常应该是sysfunc.h的地

这是我的第一个问题,欢迎提出建设性的批评:

我正在努力向xv6添加系统调用。我以前做过,但我从未遇到过这个特定的错误。我得到的错误是:

kernel/syscall.c:106:16: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
 [SYS_getpinfo] sys_getpinfo,
我在谷歌上搜索了一下,问题可能是我没有在通常应该是sysfunc.h的地方定义我的系统调用,或者我在其中一个定义中使用了不同的返回类型。问题是,我已经检查并重新检查了返回类型,并且在我能想到的任何地方都添加了系统调用,我仍然得到这个错误

我想知道是否有一种方法可以直接转换指针类型?不管怎样,如果你知道为什么这种情况还在发生,或者如何解决它,我会非常感激

下面是我定义系统调用的所有地方:

sysproc.c:

int sys_getpinfo(struct pstat* p){
    //implementation
}
sysfunc.h:

int sys_getpinfo(struct pstat*);
用户.h:

int getpinfo(struct pstat*);
usys.S:

SYSCALL(getpinfo)
syscall.c:

[SYS_getpinfo] sys_getpinfo,
static int (*syscalls[])(void) = {
syscall.h:

#define SYS_getpinfo 22

谢谢你的阅读

syscalls静态数组在syscall.c中定义如下:

[SYS_getpinfo] sys_getpinfo,
static int (*syscalls[])(void) = {
这意味着添加到此数组的所有函数指针都应返回int类型,并且不应期望参数

您实现的新sys函数与上面的不匹配,因为您已经定义了它,所以它需要一个结构指针的参数

修复函数,使其不会接收任何参数。如果确实需要用户空间中的参数来实现系统调用,那么应该让用户空间将其推送到其用户堆栈,并在sys_getpinfo包装器中从那里获取它。有关如何操作的更多信息,请参阅