我正在尝试创建一个简单的顶级实用程序 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
}
}
}
同样,我的假设是,当我将表从用户传递到内核时,它会被损坏,但话虽如此,我不确定如何正确传递它。