xv6-riscv开发调试环境搭建(vscode+ubuntu)

vscode+ubuntu22

ubuntu远程环境

1.安装必要依赖,保证xv6-riscv项目可以运行

这步比较容易

安装gdb调试工具

从以下网址下载,上传到远程Ubuntu主机

https://github.com/sifive/freedom-tools/releases
https://static.dev.sifive.com/dev-tools/freedom-tools/v2020.12/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14.tar.gz

然后:

sudo mkdir -p /opt/riscv
sudo tar -xzf riscv64-unknown-elf-toolchain-*.tar.gz -C /opt/riscv --strip-components=1
echo 'export PATH=/opt/riscv/bin:$PATH' >> ~/.bashrc
source ~/.bashrc

验证安装

riscv64-unknown-elf-gcc --version
riscv64-unknown-elf-gdb --version

xv6文件改动

.gdbinit.tmpl-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

去掉第三行和第四行,修改为:

set confirm off
set architecture riscv:rv64

set disassemble-next-line auto
set riscv use-compressed-breakpoints yes
如果是阿里云主机,勿忘防火墙放行25000端口或者26000端口
vscode的C/C++ (by Microsoft)插件也需要安装到远程ubuntu主机上

windows+vscode端

本地 VSCode 必备插件

在 VSCode 安装:

  • Remote - SSH
  • C/C++ (by Microsoft)
  • CodeLLDB(可选)
  • Native Debug(可选)

远程打开 xv6 项目(把远程的xv6项目同步到本地)

  1. 在 VSCode 打开命令面板(Ctrl+Shift+P)

  2. 选择:

    Remote-SSH: Connect to Host...
    
  3. 连接你的云主机。

  4. 打开 xv6-riscv 项目所在目录。

在 VSCode 中创建调试配置

在项目根目录创建(或编辑) .vscode/launch.json

{
  "version": "0.2.0",
  "configurations": [
      {
          "name": "debug xv6",
          "type": "cppdbg",
          "request": "launch",
          "program": "${workspaceFolder}/kernel/kernel",
          // "program": "${workspaceFolder}/user/_ls",
          "args": [],
          "stopAtEntry": true,
          "cwd": "${workspaceFolder}",
          "miDebuggerServerAddress": "localhost:25000",
          "miDebuggerPath": "/opt/riscv/bin/riscv64-unknown-elf-gdb",
          "environment": [],
          "externalConsole": false,
          "MIMode": "gdb",
          "setupCommands": [
              {
                  "description": "pretty printing",
                  "text": "-enable-pretty-printing",
                  "ignoreFailures": true
              }
          ],
          "logging": {
              // "engineLogging": true,
              // "programOutput": true,
          }
      }
  ]
}

如果想要调试内核则:

"program": "${workspaceFolder}/kernel/kernel",

如果想要调试用户程序则:

"program": "${workspaceFolder}/user/_ls",

调试流程

  1. 在 VSCode 中,终端执行:

    make clean
    make qemu-gdb
    

    让 QEMU 进入等待调试状态。

  2. 在 VSCode “运行与调试”面板选择:

    Debug xv6 (remote QEMU)
    

    然后点 ▶️ 启动调试。

  3. main.ctrap.c 等地方设置断点。

  4. 现在你可以:

    • 单步执行(F10 / F11)
    • 查看寄存器、堆栈
    • 调用栈浏览

参考

https://www.cnblogs.com/KatyuMarisaBlog/p/13727565.html
https://karthikv1392.github.io/cs3301_osn/slides/Tutorials/xv6_debug_vscode.pdf

调试技巧

可以先单cpu运行,修改makefile

qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 1 -nographic 

可以不启动时钟中断,kernel/start.c

// timerinit();  // 注释掉或暂时禁用

mkfs.c的调试

在图形界面的ubuntu宿主机上安装vscode,并打开xv6项目。

配置.vscode/launch.json

{
    "version": "0.2.0",
    "configurations": [
      {
        "name": "Debug mkfs",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/mkfs/mkfs",
        "args": ["fs.img",
        "user/_init",
        "user/_sh",
        "user/_cat",
        "user/_echo",
        "user/_ls"],
        "stopAtEntry": true,
        "cwd": "${workspaceFolder}",
        "environment": [],
        "externalConsole": true,
        "MIMode": "gdb",
        "miDebuggerPath": "/usr/bin/gdb"
      }
    ]
  }
  

修改makefile(加了-g选项,生成调试符号表)

mkfs/mkfs: mkfs/mkfs.c $K/fs.h $K/param.h
	gcc -Wno-unknown-attributes -I. -o mkfs/mkfs mkfs/mkfs.c

mkfs/mkfs: mkfs/mkfs.c $K/fs.h $K/param.h
	gcc -Wno-unknown-attributes -g -I. -o mkfs/mkfs mkfs/mkfs.c

运行make qemu编译

然后在vscode中启动调试。

mkfs.c的作用

使用宿主机即linux文件系统调用生成xv6格式的文件系统fs.img,并将所有的用户程序写入。然后qemu将其模拟成一个块设备。

然后内核启动后,通过virtio-blk driver(bio.c,virtio_disk.c),读写fs.img

qemu-system-riscv64 -drive file=fs.img,format=raw
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值