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.c 或 trap.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
相关推荐
技术人生0012 小时前
VMware Workstation 安装 Ubuntu 24.04 LTS 完整教程
运维·服务器·ubuntu
风华同学4 小时前
vscode远程连接
ide·vscode·编辑器
wdfk_prog5 小时前
Wi-Fi Direct教程 01:在 Ubuntu 搭建双 mac80211_hwsim + wpa_supplicant 2.12
linux·运维·服务器·ubuntu·ros·wifi-direct
sunoo-2295 小时前
【嵌入式 ARM 学习第十二天】SPI 裸机驱动 + I2C 触摸屏驱动 + 三大串行协议深度对比
arm开发·笔记·vscode·学习·imx6ull
kiss strong6 小时前
idea显示前进后退按钮
java·ide·intellij-idea
wdfk_prog6 小时前
Wi-Fi Direct教程 02:从 wpa_cli main() 到 P2P_FIND——用源码注释追踪 CLI 控制命令发送
运维·服务器·网络·网络协议·ubuntu·p2p·wifi-direct
skywalk81636 小时前
Deepseek harness的4种模式 配置文件内容
linux·人工智能·ubuntu·deepseek·harness
ShuiShenHuoLe7 小时前
Visual Studio 2022 Community 下载指南
ide·visual studio
A7bert7777 小时前
【SAM3部署至AGX Orin】环境配置→模型部署→问题记录
c++·人工智能·深度学习·ubuntu
倔强的小石头_8 小时前
Ubuntu部署Prometheus与Alertmanager:systemd配置、告警对接及cpolar远程访问
数据库·ubuntu·prometheus