gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 10:53:32 25 4
gpt4 key购买 nike

这是我的第一个问题,因此欢迎 build 性的批评:)

我正在努力向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*);

user.h:
int getpinfo(struct pstat*);

uss.S:
SYSCALL(getpinfo)

syscall.c:
[SYS_getpinfo] sys_getpinfo,

syscall.h:
#define SYS_getpinfo 22

谢谢阅读!

最佳答案

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

static int (*syscalls[])(void) = {

这意味着添加到此数组的所有函数指针都应返回int类型,并且不应包含参数。

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

修复该函数,使其不接收任何参数。如果确实需要用户空间中的参数来进行系统调用,则应使用户空间将其压入其用户堆栈,然后在sys_getpinfo包装器中从那里获取它。有关更多信息,请参见 this question

关于pointers - 不兼容的指针类型添加了系统调用xv6-使用在sysfunc.h中定义的一致返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54931289/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com