不兼容的指针类型添加系统调用 xv6 -- 使用一致的 return 类型,在 sysfunc.h 中定义
Incompatible pointer type adding system call xv6 -- using consistent return type, defined in sysfunc.h
这是我的第一个问题,欢迎建设性的批评:)
我正在努力添加对 xv6 的系统调用。我以前做过这个,但我从来没有 运行 进入这个特定的错误。我得到的错误:
kernel/syscall.c:106:16: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
[SYS_getpinfo] sys_getpinfo,
我用谷歌搜索了一下,看起来问题应该是我没有在我应该定义的地方定义我的系统调用(通常 sysfunc.h),或者我使用了不同的 return 输入定义之一。问题是,我检查并重新检查了 return 类型,并在我能想到的所有地方添加了系统调用,但我仍然收到此错误。
我想知道是否有办法只转换指针类型?无论如何,如果您知道为什么仍然会发生这种情况,或者如何解决它,我将不胜感激。
这里是我定义系统调用的地方:
sysproc.c:
int sys_getpinfo(struct pstat* p){
//implementation
}
sysfunc.h:
int sys_getpinfo(struct pstat*);
user.h:
int getpinfo(struct pstat*);
usys.S:
SYSCALL(getpinfo)
syscall.c:
[SYS_getpinfo] sys_getpinfo,
syscall.h:
#define SYS_getpinfo 22
感谢阅读!
系统调用静态数组定义如下(在syscall.c):
static int (*syscalls[])(void) = {
这意味着添加到此数组的所有函数指针都应return int 类型并且不应期望参数。
您实现的新 sys 函数与上面的不匹配,因为您已经定义了它,所以它需要结构指针的参数。
修复函数,使其不再接收任何参数。如果您确实需要来自用户 space 的参数用于系统调用实现,您应该让用户 space 将其推送到其用户堆栈并在 sys_getpinfo 包装器中从那里获取它。请参阅 了解更多信息。
这是我的第一个问题,欢迎建设性的批评:)
我正在努力添加对 xv6 的系统调用。我以前做过这个,但我从来没有 运行 进入这个特定的错误。我得到的错误:
kernel/syscall.c:106:16: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types]
[SYS_getpinfo] sys_getpinfo,
我用谷歌搜索了一下,看起来问题应该是我没有在我应该定义的地方定义我的系统调用(通常 sysfunc.h),或者我使用了不同的 return 输入定义之一。问题是,我检查并重新检查了 return 类型,并在我能想到的所有地方添加了系统调用,但我仍然收到此错误。
我想知道是否有办法只转换指针类型?无论如何,如果您知道为什么仍然会发生这种情况,或者如何解决它,我将不胜感激。
这里是我定义系统调用的地方:
sysproc.c:
int sys_getpinfo(struct pstat* p){
//implementation
}
sysfunc.h:
int sys_getpinfo(struct pstat*);
user.h:
int getpinfo(struct pstat*);
usys.S:
SYSCALL(getpinfo)
syscall.c:
[SYS_getpinfo] sys_getpinfo,
syscall.h:
#define SYS_getpinfo 22
感谢阅读!
系统调用静态数组定义如下(在syscall.c):
static int (*syscalls[])(void) = {
这意味着添加到此数组的所有函数指针都应return int 类型并且不应期望参数。
您实现的新 sys 函数与上面的不匹配,因为您已经定义了它,所以它需要结构指针的参数。
修复函数,使其不再接收任何参数。如果您确实需要来自用户 space 的参数用于系统调用实现,您应该让用户 space 将其推送到其用户堆栈并在 sys_getpinfo 包装器中从那里获取它。请参阅