0%

环境配置(下)

经过无数次尝试和重装,耗时近40个小时,终于探索出一条用vscode调试xv6的可行性道路

1.重装虚拟机

按照上一个说明的流程,安装一个新的虚拟机并记住它的名字。

换阿里源(这一步不知是否有实际意义)https://zhuanlan.zhihu.com/p/61228593

更新
$sudo apt update
$sudo apt upgrade

下载必要组件并解压
$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"
(若最后一步报错则去知乎看6.s081踩坑之旅)

编译,克隆源代码并初始运行
$make
$sudo make install
$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(如果报错就按它的指示去做)并获得地址名

在vscode中的ssh配置文件中加入以下东西:(或者修改)
Host 造一个名字
    HostName 输入你得到的地址
    User 用户名

在你的windows终端中跑一遍ssh检验是否能够连接虚拟机
ssh 用户名@虚拟机地址
如果无报错正常进行,如果有报错则检查虚拟机是否安装了支持ssh的远程组件(自行百度)
https://zhuanlan.zhihu.com/p/555214972

在vscode中远程连接虚拟机并输入两次密码

用vscode打开xv6-labs-2020文件目录并在目录下创建一个.vscode文件夹

在vscode远程ssh上下载c/c++debug组件

点击调试并根据指示生成tasks, launch文件

修改launch文件:
{
"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并祈祷

参考:bilibili Deniffer up主的视频与课程网站

3.打分

如果make grade失败并报错‘python’: No such file or directory,可以进行如下操作

查看已安装的python版本
python3 --version

查找python3的位置
whereis python3

为其创建连接符号
sudo ln -s /usr/bin/python3 /usr/bin/python