C 无法将结构数组从用户空间传递到内核空间,然后再返回

C 无法将结构数组从用户空间传递到内核空间,然后再返回,c,struct,kernel,xv6,C,Struct,Kernel,Xv6,我正在尝试创建一个简单的顶级实用工具xv6。为此,我创建了一个系统调用,允许我访问内核空间。我遵循了许多关于如何创建系统调用的指南,我的代码编译时没有任何问题 当我尝试在qemu中运行top时,我的问题就存在了。每当我试图访问我的结构数组时,无论它是在内核还是在用户空间中,我都会遇到陷阱14错误 要稍微分解一下,我有一个top.c文件: ... int main(){ struct uproc table[MAX];//where MAX is defined as 10 if(!get

我正在尝试创建一个简单的顶级实用工具xv6。为此,我创建了一个系统调用,允许我访问内核空间。我遵循了许多关于如何创建系统调用的指南,我的代码编译时没有任何问题

当我尝试在qemu中运行top时,我的问题就存在了。每当我试图访问我的结构数组时,无论它是在内核还是在用户空间中,我都会遇到陷阱14错误

要稍微分解一下,我有一个
top.c
文件:

...
int main(){
  struct uproc table[MAX];//where MAX is defined as 10
  if(!getprocs(MAX, table))
     printf("YAY");
...
在sysproc.c中:

...
int
sys_getprocs(int max, struct uproc table[]){
    return gettable(table);
}
然后在procs.c

....
int gettable(struct uproc table[]){
    struct uproc u;
    struct proc *p;
    int i = 0;
    aquire(&ptable.lock);
    for(p->state.proc; p < &ptable.proc[NPROC];p++){
        if(//p->state is valid){
           u.state = p->state;
           ...
           table[i] = u;//where I get the trap 14 error
        }
    }
}
。。。。
int gettable(struct uproc表[]){
结构单元;
结构程序*p;
int i=0;
隔水层(可调节锁);
对于(p->state.proc;p<&ptable.proc[NPROC];p++){
如果(//p->状态有效){
u、 状态=p->state;
...
表[i]=u;//我在哪里得到陷阱14错误
}
}
}

同样,我的假设是,当我将表从用户传递到内核时,它会被破坏,但我不确定如何正确地传递它。

所有xv6
sys.*
函数都是无参数的。 阅读
argint
argstr
argptr
函数,了解如何从用户模式向内核传递参数