缘起,看了网上的操作系统课,大家都推荐xv6操作系统,因此想要使用MIT的xv6实验用来学习操作系统课程。

1 环境安装

环境安装是一个老大难的问题,20230621晚上开始安装 ,一直折腾到接近凌晨1点,仍然没有安装成功,第二天上午通过搜寻多个博客,最终安装成功。 遇到的两个问题比较棘手,一是使用apt install安装qemu失败,换成源码安装;二是安装riscv gdb,为了使用gdb调试。

基础环境准备
我的系统是Ubuntu 18.04
1 qemu(硬件模拟器): 在x86环境下模拟risc指令集
2 riscv-gnu-toolchain 编译器
3 xv6源码

1.1 第一个坑

使用apt install方式安装的qemu,没有qemu-riscv64这个环境 采用的方式,

在知乎搜索专栏,https://zhuanlan.zhihu.com/p/614193704
下载RISC-V工具链,没有下载源码编译,而是别人已经封装好的库

1.2 qemu源码编译

下载的是 qemu-7.2.0
cd qemu-7.2.0
执行下面的源码编译命令
./configure
make -j$(nproc)
sudo make install

编译完成之后qemu 安装包很大

6.7G	./qemu-7.2.0


可以清理qemu生成的build文件夹
cd qemu/build
make clean

1.3 安装xv6

在MIT课程的官网下载 git仓库
https://github.com/mit-pdos/xv6-riscv/blob/riscv/README

2 运行xv6

2.1 运行失败

本来想按照北大自学课程中的2020实验课来的

https://github.com/PKUFlyingPig/MIT6.S081-2020fall

结果,进入运行卡死不动。 通过查阅csdn博客发现,看了评论换了最新的2022版本的git仓库就可以了。 image.png

2.2 gdb调试xv6设置

这里安装riscv64-unknown-elf-gdb,也花费了很多一番功夫。

wget https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz

tar -xzvf riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz

mv riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14  riscv64-unknown-elf-toolchain

这一版本的预编译的gdb没有tui,不能使用layout split

可以选择
https://d2pn104n81t9m2.cloudfront.net/products/tools/

接着编辑~/.bashrc,加入下面的环境变变量

export PATH=~/Soft/riscv64-unknown-elf-toolchain/bin:$PATH

image.png

3 串联知识

通过这个xv6内核的学习,想要了解

  1. gdb的调试
  2. linux操作系统的启动过程
  3. xv6是如何调用第一个进程的。

学习资料

1 将MIT的课程进行了翻译,https://www.zhihu.com/column/c_1294282919087964160

参考

  1. https://blog.csdn.net/frost5/article/details/114933307
  2. [XV6操作系统代码阅读心得] (https://hehao98.github.io/posts/2019/03/xv6-1/)
  3. https://www.dingmos.com/index.php/category/MIT6-828/
  4. 安装riscv64-unknown-elf-gdb [https://blog.csdn.net/m0_43422086/article/details/125276723]
  5. 使用gdb调试xv6代码 [https://blog.csdn.net/yihuajack/article/details/116571913]
  6. xv6工具[https://1790865014.gitbook.io/ucore-step-by-step/intro/3_startdash]
  7. riscv预编译包[https://decaf-lang.github.io/minidecaf-tutorial/docs/step0/riscv_env.html]
  8. 实验记录[https://www.515code.com/posts/r1eiw7kt/]
  9. 哈工大xv6实验课 [http://hitsz-cslab.gitee.io/os-labs/lab4/part1/]