mini-riscv-os/01-HelloOs/Makefile 代码语言:javascript 代码运行次数:0 运行 AI代码解释 CC = riscv64-unknown-elf-gcc CFLAGS = -nostdlib -fno-builtin -mcmodel=medany -march=rv32ima -mabi=ilp32 QEMU = qemu-system-riscv32 QFLAGS = -nographic -smp 4 -machine virt -bios none OBJDUMP = ...
每个RISC-V CPU有一组控制寄存器,用于内核写入这些寄存器告诉CPU如何处理陷阱,并且内核可以读取这些寄存器查明以发生的陷阱。 RISC-V CPU除了32个通用寄存器外,还有一些特殊控制寄存器 32个通用寄存器 callee:在函数调用的时候不会保存 caller:在函数调用的时候会保存 特殊控制寄存器(与trap有关): riscv.h中有所定义,...
A RISCV32IMAC Emulator emulatorriscvu-bootriscv32opensbixv6-riscv UpdatedNov 7, 2022 C yixuaz/6.1810-2023 Star4 xv6 riscv completing all the MIT optional challenges xv6-osxv6-pagingmit6828xv6-riscvmit61810xv6-tcpxv6-threadxv6-signalxv6-procfs ...
感觉RISCV手册里用的也比较乱,下面我写的内容就是中断是指外中断(I/O、时钟、设备等),异常就指内中断(系统调用、缺页错误等),然后合称的话就是中断和异常。 2、中断和异常处理相关寄存器 如下所示是RISCV手册上给出的解释,我对其在几个再说明下。 mie:中的每一位对应下面RISC-V 异常和中断原因表中的一个...
BUILDING AND RUNNING XV6 You will need a RISC-V "newlib" tool chain from https://github.com/riscv/riscv-gnu-toolchain, and qemu compiled for riscv64-softmmu. Once they are installed, and in your shell search path, you can run "make qemu". ...
xv6陷阱处理分四个阶段进行:RISC-V CPU采取的硬件操作,为内核C代码做准备的一些汇编指令,决定如何处理陷阱的C函数,以及系统调用或设备驱动程序服务例程。虽然三种陷阱类型之间的通用性表明内核可以用单个代码路径处理所有的陷阱,但事实证明,为三种不同的情况使用单独的代码是很方便的:来自用户空间的陷阱、来自内核空间的...
其中的两个uvmunmap释放pte映射(避免后续uvmfree的时候意外释放trampoline和trapframe的物理内存),并不释放物理页,因为trampoline是整个操作系统共享的不需要释放,而trapframe是用户态和内核态转换时的用到的存储区域,十分重要,同样不会释放(关于trapframe和trampoline的详细说明可以查阅book-riscv)。最后的uvmfree则是释放...
プロセッサエミュレータです。xv6-publicはx86(32bit)とかRISC-Vで動くので、最近のCPUだと動作しません。そのため、プロセッサエミュレータを使ってx86(32bit)とかを動かします。 brew install qemu これでインストールできるはず。
理解寄存器ra,它在函数调用结束后保存返回地址。使用指令i r ra或p /x $ra可以查看其值。进一步通过auipc和jalr指令理解函数跳转,它们用于远地址的函数调用,适应RISC-V指令的32位限制。实验中的问题包括:识别保存函数参数的寄存器(a0:格式字符串,a1:12,a2:13),在汇编代码中找到main函数中的...
这次实验不能像做前三次实验一样吃老本莽过去了,需要提前阅读 xv6 book 的 Scheduling 一章。但还没看过 Interrupts and device drivers 和 Locking 这两章...