xv6 是一个用于教育目的的简单 Unix 操作系统,基于 Unix 第六版(Version 6, V6)开发,运行在 RISC-V 处理器上。它由麻省理工学院(MIT)开发,用于操作系统课程(Operating System Engineering[1])教学,帮助学生理解操作系统的基本概念和实现原理。
最近我突发奇想,想再研究一遍操作系统 xv6 。当即打开电脑,根据官方教程一通安装,成功启动 xv6 ,过程非常顺利!最大的感受就是,现在安装 xv6 依赖的软件真是太简单了,真是学习操作系统最好的时候。
学习过程往往需要一个梯子,xv6 是最好的学习操作系统的梯子,毫无疑问。我希望我的这个系列文章,也成为一个好的梯子,给想学习操作系统的同学足够的帮助。
第一步-安装依赖
在早些年,要想运行 xv6 可太难了,经常会碰到各种各样的问题。但是现在按照官方的安装教程[2],非常顺利。 如果我说请点开另外的链接来查找安装指令,可太令人恼火了。所以我汇总在这里:
- ? Linux-Ubuntu24 及以后的版本
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
- ? Windows-使用 WSL2
sudo apt-get update && sudo apt-get upgrade
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu
- ? MacOS
# 安装MacOS上的XCode开发工具
xcode-select --install
# 安装Homebrew
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# 安装riscv编译工具链
brew tap riscv/riscv
brew install riscv-tools
# 安装CPU模拟器平台QEMU,模拟RISC-V处理器。
brew install qemu
第二步-下载源代码
下载源码需要用到 git 工具,源代码分为三个部分
- ? xv6 的源代码 git clone https://github.com/mit-pdos/xv6-riscv.git
- ? xv6 的教材 git clone https://github.com/mit-pdos/xv6-riscv-book.git
- ? xv6 的实验代码 git clone git://g.csail.mit.edu/xv6-labs-2024
我们进入xv6-riscv 文件夹,输入 make qemu ,如果出现如下画面,说明我们的环境搭建成功了,并且成功运行了 xv6 操作系统。
官方没有说清楚的内容
1. 如何退出 xv6
这是很多初学者非常容易遇到的不值得卡住的困难:如何退出 xv6。资料会告诉我们按下 Ctrl + a x。但是注意了,这存在重大歧义。 实际上,这个快捷键对应三个步骤:
- ? 同时按下 Ctrl 和 a 键;
- ? 同时放松 Ctrl 和 a 键;
- ? 单独按下 x 键。 如果这个提示对你有帮助,就请给我点个赞吧。
2. 如何配置官方推荐的 Debug 工具——GDB
第一步,如果你使用的是 Linux 或者 Window,这里没有什么问题。但是如果你使用的是 MacOS,你会遇到没有 GDB 的情况,请不要慌张,我们只需要安装一下它:
brew install riscv64-elf-gdb
第二步,我们配置 GDB,让它能够自动读取 xv6 项目文件夹下的 GDB 的配置文件。
mkdir -p ~/.config/gdb # 在用户配置目录下创建gdb文件夹
touch ~/.config/gdb/gdbinit # 创建用户个人的gdb全局配置文件
echo 'set auto-load safe-path /' > ~/.config/gdb/gdbinit # 允许GDB自动加载配置文件
第三步,在 xv6-riscv 文件夹下,调用 make qemu-gdb 来编译可 Debug 的 xv6 操作系统镜像。我们可以看到,make 同时生成了镜像文件 fs.img 和 针对这个项目 gdb 配置文件 .gdbinit。
编译
第四步,在保持第三步的 terminal 不变的情况下,打开一个新的 terminal,调用 gdb 来进入 debug 界面。
- ? Linux 或者 Windows:gdb-multiarch
- ? MacOS: riscv64-elf-gdb
GDB调试
小结
我们提炼总结一下上面的内容。我们一共安装了四个内容,它们的依赖关系是这样的:首先下载 XV6 源码,然后调用 Risc-V 编译工具编译成二进制文件,然后使用 Qemu 模拟器运行二进制文件,最后调用 GDB 调试工具调试 Qemu。
工具依赖关系
引用链接
[1] Operating System Engineering: https://pdos.csail.mit.edu/6.828/2024/index.html
[2] 官方的安装教程: https://pdos.csail.mit.edu/6.828/2024/tools.html