kernel/proc.h:87:19: error: field 'lock' has incomplete type
87 | struct spinlock lock;
在vm.c文件中在#define "proc.h"前加上#define "spinlock.h";
'kernel_pagetable' undeclared (first use in this function); did you mean 'proc_pagetable'?
528 | w_satp(MAKE_SATP(kernel_pagetable));
在prc.c文件中写入extern pagetable_t kernel_pagetable;
error: implicit declaration of function 'walk' [-Werror=implicit-function-declaration] 167 | pte_t *pte = walk(p->kernel_pagetable, p->kstack, 0); | ^~~~ kernel/proc.c:167:16: error: initialization of 'pte_t *' {aka 'long unsigned int *'} from 'int' makes pointer from integer without a cast [-Werror=int-conversion]
这个是因为vm.c文件中walk函数没有在defs.h文件中定义,vm.c文件中已经写好了walk函数,在defs.h中加上即可。“不知道为什么没写上”
scause 0x000000000000000d
sepc=0x000000008000106a stval=0x00000000000007f8
panic: kerneltrap
我遇到这个情况是在proc.c/allocproc函数中将初始化内核页表代码段和分配进程内核物理空间代码段写反了。
panic: virtio_disk_intr status
原因在vm.c/kvmpa函数中,需要修改一行代码,将
pte = walk(kernel_pagetable, va, 0);修改为:pte = walk(myproc()->kernel_pagetable, va, 0);
比忘记加#include "proc.h"
proc.c文件开头需要加上extern pagetable_t kernel_pagetable;