Skip to main content

Command Palette

Search for a command to run...

ArchLinux 搭建 MIT 6.S081 环境

Published
•1 min read•View as Markdown

环境搭建

最近打算通过MIT 6.s081深入学习下操作系统,因为我自己本身使用的是ArchLinux,所以就不用通过服务器或者虚拟机的方式搭建环境了,直接在本机终端上运行就行了。其实Arch上环境搭建比较简单,官网就有。

mit 6.s081官网

只需要一步就能安装好。

sudo pacman -S riscv64-linux-gnu-binutils riscv64-linux-gnu-gcc riscv64-linux-gnu-gdb qemu-arch-extra

但是好像并不管用,安装完之后,运行make qemu会卡住,具体原因可能是qemu版本太高了吧。这里只需要使用使用pacman安装时不安装qemu-arch-extra就行了。

sudo pacman -S riscv64-linux-gnu-binutils riscv64-linux-gnu-gcc riscv64-linux-gnu-gdb

然后使用官网的教程安装qemu5.1版本。

下载qemu5.1源码,源码可以随便放。

$ wget https://download.qemu.org/qemu-5.1.0.tar.xz
$ tar xf qemu-5.1.0.tar.xz

编译即可。

$ cd qemu-5.1.0
$ ./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="riscv64-softmmu"
$ make
$ sudo make install

再次进入到xv6项目下运行make qemu应该就行了。

关于项目调试

直接在项目目录下运行make qemu-gdb,然后在开另一个终端进入项目目录运行riscv64-linux-gnu-gdb,不出意外的话应该会有警告。

warning: File "你的项目目录/.gdbinit" auto-loading has been declined by your `auto-load safe-path' set to "$debugdir:$datadir/auto-load".

而且想要列出代码也会提示我们没有导入可执行文件

这是因为我们需要连接make qemu-gdb命令运行时所启动的gdbserver,端口号没修改过的话应该是26000。而连接gdbserver的配置文件位于你的项目目录/.gdbinit中,上面的警告就是说由于你的 GDB 配置中 auto-load safe-path 选项的限制,加载被拒绝了,所以就连不上gdbserver。.gdbinit 文件如下:

set confirm off
set architecture riscv:rv64
target remote 127.0.0.1:26000
symbol-file kernel/kernel
set disassemble-next-line auto

解决办法如下:

  1. 解决方案一

    在$HOME/.gitinit中添加如下设置(如果没有就创建一个)

     set auto-load safe-path /home/ce/workspace/xv6-labs-2020 #这里换成你的项目目录
    
  2. 解决方案二

    直接将你项目目录下的.gdbinit文件拷贝到$HOME/下:

     cp /home/ce/workspace/xv6-labs-2020/.gdbinit ~/
    
  3. 解决方案三

    在运行riscv64-linux-gnu-gdb 命令是指定配置文件

     riscv64-linux-gnu-gdb -x .gdbinit # 你需要在项目目录执行
    

再次启动调试make qemu-gdb ,并在另一个终端运行riscv64-linux-gnu-gdb (第三种方法运行riscv64-linux-gnu-gdb -x .gdbinit) 注意上面两个命令都需要在项目目录运行。此时在gdb调试程序中输入l若列出了程序,应该就是成功了。