一、实验环境搭建
安装RISC-V编译器和工具链
1. 安装能够编译RISC-V目标代码的交叉编译器。可以通过官方RISC-V GNU工具链源代码进行编译安装或者使用已经构建好的工具链。如果你使用的是Linux系统,可以通过包管理器来安装他们。例如,在Ubuntu系统中,使用以下命令来安装:
sudo apt-get install gcc-riscv64-linux-gnu
2.如果构建好的RISC-V编译器和工具链在你的系统中不可用,那么就需要下载源代码来编译安装RISC-V编译器和工具链。
获取xv6源代码
1. 从MIT 6.828课程网站或者官方GitHub仓库获得xv6的源代码。
2. 基于RISCV版本的xv6:https://github.com/mit-pdos/xv6-riscv
安装QEMU模拟器
1. QEMU是一个通用的开源机器模拟器和虚拟化器。请确保安装了支持RISC-V的QEMU版本。
2. 一些Linux发行版可以直接通过包管理器来安装适当版本的QEMU。比如:
sudo apt-get install qemu-system-misc
编译xv6源代码
- 在xv6源代码目录下,通常有一个Makefile文件定义了如何构建系统。
- 在命令行使用以下命令编译。
cmake
在QEMU中运行xv6
- 使用QEMU来启动xv6。
make qemu
- 在QEMU中启动xv6后则可通过控制台与之进行交互。
测试和调试
- 在模拟环境中,运行xv6的用户程序,并进行开发、测试和调试。
以上是在x86的机器上构建RISC-V的xv6实验环境的主要步骤,涉及获取源代码、准备编译工具链、编译内核、以及在模拟器中运行和调试。请大家根据自己的系统配置和环境进行相应的调整和修改。如果上述步骤或命令有变化,建议查阅最新的官方xv6或RISC-V文档。
二、系统调用实验
添加并测试自定义系统调用
在RISC-V体系结构上运行的xv6操作系统中引入一个新的系统调用,该调用执行一个简单任务,比如返回系统中当前进程的数量。
实验目的
- 熟悉RISC-V体系结构。
- 理解xv6中系统调用的工作原理。
- 获得修改xv6源代码的经验。
实验步骤
Step 1: 修改用户代码
user/user.h
添加系统调用函数的定义
user/usys.pl
添加入口entry("procs")
Step 2: 修改内核代码
kernel/syscall.h 定义系统调用号
kernel/syscall.h syscalls函数指针数组中添加对应的函数
kernel/syspro.c 将系统调用与功能函数关联起来
kernel/pro.c 实现具体的系统调用函数功能
注意!!
要在kernel/defs.h中添加getprocs的函数声明
否则会报如下错误
Step 3: 编写应用工具
在user中新建文件,调用getprocs函数
Step 4: 修改Makefile
,将$U/_prosc\
添加到Makefile
的UPROGS
中
Step 5: make qemu
,然后测试
参考文章:
https://blog.csdn.net/ConstineWhy/article/details/123313378