Author:师傅+Editor:Vite
经过无数次尝试和重装,耗时近40个小时,终于探索出一条用vscode调试xv6的可行性道路
1.重装虚拟机
按照上一个说明的流程,安装一个新的虚拟机并记住它的名字。记住账户名在下文统一用username指代账户名
一、更换/etc/apt/sources.list文件里的源
1. 备份源列表
Ubuntu配置的默认源并不是国内的服务器,下载更新软件都比较慢。首先备份源列表文件sources.list:
# 首先备份源列表 sudo cp /etc/apt/sources.list /etc/apt/sources.list_backup
2. 打开sources.list文件修改
选择合适的源,替换原文件的内容,保存编辑好的文件, 以阿里云更新服务器为例(可以分别测试阿里云、清华、中科大、163源的速度,选择最快的):
# 打开sources.list文件 sudo gedit /etc/apt/sources.list
编辑/etc/apt/sources.list文件, 在文件最前面添加阿里云镜像源:
# 阿里源 deb http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-security main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-updates main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-proposed main restricted universe multiverse deb-src http://mirrors.aliyun.com/ubuntu/ bionic-backports main restricted universe multiverse
3. 刷新列表
sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential
下载速度瞬间就起飞了。
2.配置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
接下来运行这条命令
$./configure --disable-kvm --disable-werror --prefix=/usr/local --target-list="riscv64-softmmu"
如果报这个错误:
ERROR: glib-2.48 gthread-2.0 is required to compile QEMU
解决方法为sudo apt install libglib2.0-dev
还可能报这个错误:
ERROR: pixman >= 0.21.8 not present. Please install the pixman devel package.
解决方法为sudo apt install libpixman-1-dev
之后编译,克隆源代码并初始运行
$make $sudo make install $cd ~ $git clone git://g.csail.mit.edu/xv6-labs-2020 $cd xv6-labs-2020 $git checkout util $make qemu
2. vscode远程调试
在vscode上安装remote ssh一系列扩展.
在虚拟机终端输入ifconfig(如果报错就按它的指示去做)并获得地址名得到inet值
在vscode中的ssh配置文件中加入以下东西:(或者修改)
Host 造一个名字(随便取) HostName 输入你得到的地址 User 用户名字(ubuntu的账户名字即为username)
在你的windows终端中跑一遍ssh检验是否能够连接虚拟机
打开cmd,输入以下命令
ssh username@<inet的地址>
若报以下错误
ssh: connect to host XX.XX.XX.XX port 22: Connection refused
需要开启ssh服务,重启ssh服务
sudo /etc/init.d/ssh start sudo /etc/init.d/ssh stop sudo /etc/init.d/ssh start
在vscode中远程连接虚拟机并输入两次密码
用vscode打开xv6-labs-2020文件目录并在目录下创建一个.vscode文件夹
手动新建一个launch.json文件,并把以下内容修改username后粘贴
{ "version": "0.2.0", "configurations": [ { "name": "(gdb) 启动", "type": "cppdbg", "request": "launch", "program": "/home/genesis/xv6-labs-2020/kernel/kernel",//你的kernel所在的目录 "args": [],//可以后续传参 "stopAtEntry": true,//支持断点调试 "cwd": "${fileDirname}", "miDebuggerServerAddress": "localhost:26000",//这是默认端口 "miDebuggerPath": "/usr/bin/gdb-multiarch",//x86环境支持组件 "environment": [], "externalConsole": false, "MIMode": "gdb", "setupCommands": [ { "description": "为 gdb 启用整齐打印", "text": "-enable-pretty-printing", "ignoreFailures": true } ], "logging":{ "engineLogging":true, "programOutput": true, } } ] }
修改gdbinit.teml.riscv:(最后一句支持更广泛的断点调试)
set confirm off set architecture riscv:rv64 target remote 127.0.0.1:1234 symbol-file kernel/kernel set disassemble-next-line auto set riscv use-compressed-breakpoints yes
在vscode终端启动qemu:
$make qemu-gdb
注释gdbinit文件(每次启动qemu都要修改,可以尝试优化):
set confirm off set architecture riscv:rv64 #target remote 127.0.0.1:26000 symbol-file kernel/kernel set disassemble-next-line auto set riscv use-compressed-breakpoints yes
按下两次f5并祈祷
参考教程:MIT 6S081 环境搭建指南 保姆级教学哔哩哔哩bilibili
mit6s081 通过vscode来debug kernel哔哩哔哩bilibili
3.打分
如果make grade失败并报错‘python’: No such file or directory,可以进行如下操作 查看已安装的python版本 python3 --version 查找python3的位置 whereis python3 为其创建连接符号 sudo ln -s /usr/bin/python3 /usr/bin/python