6.s081 lab3遇到的一些小问题

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;

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值