ubuntu配置xv6环境
Docker安装XV6环境
Windows/Ubuntu
- 打开Docker,打开CMD(windows)或者终端(mac),刷入以下命令拉取镜像。这个 images (400多MB)开箱即用,环境已经配置好了。
1 | #下载镜像 |
- 打开VScode,在扩展市场安装Docker插件,然后进入,右键对应容器,选择附加VisualStudioCode,然后vscode会自动挂载容器,会弹出一个新的窗口。
- 开始愉快的实验吧!
- 测试环境
1 | cd xv6-labs-2020 |
- 退出方式
1 | # 在另一个新开的终端执行 |
- 调试方法 GDB
1 | # 第一个 terminal |
Apple Chip
自己ubuntu容器中也可以这样子一键下载。
在docker中先拉取ubuntu 20.04的镜像,即如下命令,输入:
1 | docker pull ubuntu:20.04 |
在联网状态下,docker会拉取ubuntu:20。04image,可以输入docker images
查看images
接下来,我们就开始创建容器并且让这个ubuntu跑起来,这个ubuntu images只是最基本的镜像,损失了很多功能,但是之后可以自己往上面安装软件包,输入以下命令:
1 | docker run -itd --name MIT_6.s081 ubuntu:20.04 |
就会创建一个名为MIT_6.s081
的container,然后我们要在里面安装基本的软件
1 | apt update |
装了sudo的权限后(其实也可以不装),打开xv6的官网,复制以下链接,在docker的MIT_6.s081中安装必要依赖:
1 | sudo apt-get install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu |
安装完后,在root里面找个地方,clone下实验文件(2020版本的就行)
1 | git clone git://g.csail.mit.edu/xv6-labs-2020 |
在之后便是测试test
1 | # cd xv6-labs-2020 |
若是以上则可以认为是tesh成功了!
如何退出xv6kernel
回到 monitor 界面:ctrl + a,然后按 c ,即可退出 xv6 的 shell 界面,进入 QEMU 的 monitor 界面,输入 q 按回车即可退出 QEMU。
终止 QEMU 进程:ctrl + a,然后按 x,即可终止 QEMU 进程,回到 Shell 界面。
Ubuntu安装XV6环境
虚拟机安装
按照上一个说明的流程,安装一个新的虚拟机并记住它的名字。记住账户名在下文统一用username指代账户名,下面要更新下载源。
- 备份源列表
Ubuntu配置的默认源并不是国内的服务器,下载更新软件都比较慢。首先备份源列表文件sources.list:
1 | # 首先备份源列表 |
- 打开sources.list文件修改
选择合适的源,替换原文件的内容,保存编辑好的文件, 以阿里云更新服务器为例(可以分别测试阿里云、清华、中科大、163源的速度,选择最快的):
1 | # 打开sources.list文件 |
编辑**/etc/apt/sources.list**文件, 在文件最前面添加阿里云镜像源:
1 | # 阿里源 |
- 刷新列表
1 | sudo apt-get update |
下载速度瞬间就起飞了。
配置riscv+qemu+clone
//下载必要组件并解压
sudo apt install git build-essential gdb-multiarch qemu-system-misc gcc-riscv64-linux-gnu binutils-riscv64-linux-gnu libglib2.0-dev libpixman-1-dev gcc-riscv64-unknown-elf
wget https://download.qemu.org/qemu-5.1.0.tar.xz
tar xvf qemu-5.1.0.tar.xz
cd qemu-5.1.0
接下来运行这条命令
1 | ./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="riscv64-softmmu" |
如果报这个错误:
1 | ERROR: glib-2.48 gthread-2.0 is required to compile QEMU |
解决方法为sudo apt install libglib2.0-dev
还可能报这个错误:
1 | ERROR: pixman >= 0.21.8 not present. |
解决方法为sudo apt install libpixman-1-dev
之后编译,克隆源代码并初始运行
1 | make |
vscode远程调试
在vscode上安装remote ssh一系列扩展.
在虚拟机终端输入ifconfig(如果报错就按它的指示去做)并获得地址名得到inet值
在vscode中的ssh配置文件中加入以下东西:(或者修改)
1 | Host #造一个名字(随便取) |
在你的windows终端中跑一遍ssh检验是否能够连接虚拟机
打开cmd,输入以下命令
1 | ssh username@<inet的地址> |
若报以下错误
1 | ssh: connect to host XX.XX.XX.XX port 22: Connection refused |
需要开启ssh服务,重启ssh服务(这个报错还挺平凡的,重启下ssh服务一般就能解决)
1 | sudo /etc/init.d/ssh start |
在vscode中远程连接虚拟机并输入两次密码(在vscode里面远程连接至主机)
用vscode打开xv6-labs-2020文件目录并在目录下创建一个.vscode文件夹
手动新建一个launch.json文件,并把以下内容修改username后粘贴
1 | { |
修改gdbinit.teml.riscv:(最后一句支持更广泛的断点调试)(但目前断点调试好像不成功2023.12.8)
1 | set confirm off |
在vscode终端启动qemu:
1 | make qemu-gdb |
注释gdbinit文件(每次启动qemu都要修改,可以尝试优化):
1 | set confirm off |
按下两次f5并祈祷
参考教程:
Grade
如果make grade失败并报错‘
1 | 'python': No such file or directory, |
可以进行如下操作
//查看已安装的python版本
python3 --version
//查找python3的位置
whereis python3
//为其创建连接符号(注意观察路径,自己调整)
sudo ln -s /usr/bin/python3 /usr/bin/python