MIT 6.s081 实验环境搭建

发布时间 2023-07-01 16:22:23作者: zwyyy456

准备工作

Linux 系统,我是在实验室配的主机上装了 Debian Bookworm,然后mac 通过 ssh 连接上去进行操作,宿舍里则是使用的 wsl2,里面的发行版也是 Debian Bookworm。

开始配置

clone 源码

~/Documents/code/mit 目录下执行 git clone git://g.csail.mit.edu/xv6-labs-2021,将源码 clone 下来。并执行 git clone https://github.com/mit-pdos/xv6-riscv-book.git,这个是参考资料(即 PDF 对应的 Latex 源码)

前面 clone 下来的 repository 包含了多个分支,每个分支对应一个 Lab。

执行 cd xv6-labs-2021 && git checkout util,切换到 Lab Utilities 对应的 分支。

安装工具

执行以下两条命令:

$ 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

从而安装对应工具。

开始调试

这里会用到 tmux 的功能(非必需),在 util 分支下的 ~/Documents/code/mit/xv6-labs-2021 目录下,执行 make qemu-gdb, 然后先按 ctrl+b 再按 % 键,在 iterm2 的右侧创建一个新 panel,如图

4jr1zliCEksJax2

我们需要修改一下源文件,在 sh.c 中,在 $56$ 行附近,void runcmd(struct cmd *cmd) 之前添加 __attribute__((noreturn)) ,这样才能正常启动系统。

右侧的 panel 也切换到上述目录,然后运行 gdb-multiarch,之后会进入 gdb 终端命令界面,执行 set architecture riscv:rv64 以调试 RISCV 架构,然后执行 target remote localhost:26000(这里端口号要看 make qemu-gdb 的输出),从而调试 QEMU 中的 xv6 系统,执行 file kernel/kernel 命令说明我们要调试 kernel/kerel.c 编译生成的可执行文件 kernel

我们可以看一下 kernel.asm 的内容,如下图:

ij9Vt1Uf2cGwKQd

然后回到 GDB 对应的 panel,然后执行 b _entry,于是在 _entry 这里打了个断点。

说明我们调试 xv6 没什么问题了,亦说明环境已经配置好了。

之后,为了方便起见,我们可以在当前目录创建 .gdbinit,从而使得每次启动 GDB 都能执行 .gdbinit 中的命令,省得我们再一遍遍敲,.gdbinit 的内容如下:

set architecture riscv:rv64
target remote localhost:26000

然后在 ~/.config/gdb/gdbinit 文件中追加一行,内容为 add-auto-load-safe-path /home/zwyyy/Documents/code/mit/xv6-labs-2021/.gdbinit

之后就能直接 gdb-multiarch 调试 xv6 了。