【MIT 6.S081】实验环境配置

麻省理工学院 PDOS 实验室开设的本科生的操作系统课程,基于 RISC-V 开发了一个教学用操作系统 xv6,前身是 MIT 著名的课程 6.828

资源汇总

2021年秋MIT 6.S081官网:教材与lab都可以查到

2020秋中英字幕课程

课程中文翻译

xv6中文文档

linux系统配置

我用的是Windows的子系统WSL,子系统是Ubuntu-20.04,配置可以参考我的博客:WSL激活安装与迁移盘操作,用虚拟机之类的也是可以的,此处省略

XV6lab系统

环境配置

若是刚启动的系统,别忘了进行

1
2
sudo apt-get update
sudo apt-get upgrade

官网的方法WSL只需一条指令:

1
sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu

从Github下载

我clone的是2021版的lab

1
git clone git://g.csail.mit.edu/xv6-labs-2021

切换到文件夹,并切换到lab分支

1
2
cd xv6-labs-2021
git checkout util

编译qemu

接上面,输入:

1
make qemu

结果应是很长的一大段,后面一段意思很明确,这样就算正确启动了:

退出:ctrl a + x

VSCode配置

为了能在WSL中使用VSCode编写代码(远程连接),以及使用VSCode debug(gdb配置)

VSCode远程连接WSL

需要安装VSCode里的一个插件:

安装完成后,目录到在先前的xv6-labs-2021文件夹,输入code .,注意点前面有个空格,意思是在这个文件夹启动VSCode,如果是第一次启动会有一些简单的安装,完成后再次输入code .,便在windows系统下启动了一个VSCode窗口,并在远程资源管理器可以看到成功连接的界面:

如果遇到code指令不存在的问题,指令没输错的话,windows下也是会报这个错的,可以查找网上资料如何解决code指令不存在,应该是VSCode的旧版本缺一个指令,新版本/旧版本安装指令后,没有添加到环境变量(安装的文件夹下的bin文件夹)

VSCode配置qemu的gdb调试

普通gdb调试

在目录下执行以下指令:

1
make qemu-gdb

另开一个终端,输入以下指令:

1
gdb-multiarch kernel/kernel

结果会出现一大段字和gdb的界面,字里有一个warning,我不知道是否需要,但是网友的教程把它修改掉了,执行以下指令(退出qemu和gdb后),其中xxx是自己文件夹的路径:

1
echo "add-auto-load-safe-path xxx/xv6-labs-2021/.gdbinit" >> "xxx/.gdbinit"

配置VSCode

远程启动VSCode后,添加插件:

创建.vscode文件夹,添加文件launch.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
{
"version": "0.2.0",
"configurations": [
{
"name": "xv6debug",
"type": "cppdbg",
"request": "launch",
"program": "${workspaceFolder}/kernel/kernel",
"stopAtEntry": true,
"cwd": "${workspaceFolder}",
"miDebuggerServerAddress": "127.0.0.1:26000", //见.gdbinit 中 target remote xxxx:xx
"miDebuggerPath": "/usr/bin/gdb-multiarch", // which gdb-multiarch
"MIMode": "gdb",
"preLaunchTask": "xv6build"
}
]
}

其中miDebuggerServerAddress一项的内容,在目录下有一个.gdbinit文件,里面有"target remote …",打开这个文件复制来地址后,将这一行注释掉(添加@REM):

1
@REM target remote 127.0.0.1:26000

再添加文件tasks.json

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
{
"version": "2.0.0",
"tasks": [
{
"label": "xv6build",
"type": "shell",
"isBackground": true,
"command": "make qemu-gdb",
"problemMatcher": [
{
"pattern": [
{
"regexp": ".",
"file": 1,
"location": 2,
"message": 3
}
],
"background": {
"beginsPattern": ".*Now run 'gdb' in another window.",
"endsPattern": "."
}
}
]
}
]
}

这样就可以在VSCode里运行qemu的gdb调试了!