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
相关推荐
love530love2 小时前
用自然语言让 AI Agent 卸载软件 —— 以卸载 Visual Studio 2026 为例
ide·人工智能·windows·agent·visual studio·ai agent·marvis
HAPPY酷3 小时前
【ROS2】 Conda 环境搭建(命令行版)
linux·运维·python·ubuntu·机器人·conda
落寞的电源7 小时前
使用Visual Studio SDK制作GLSL词法着色插件
ide·visual studio
fenghx25810 小时前
仅用于个人记录:火狐有网,Vscode的codex连不上
vscode·编辑器
LL34363810 小时前
2026最新5款AI编程工具平替实测|终端与IDE vibe coding迭代优缺点深度对比
ide·ai编程
00后程序员张10 小时前
iOS 打包方式汇总 从 Xcode Archive 到轻量级工具链的 IPA 构建
ide·vscode·ios·objective-c·个人开发·swift·敏捷流程
Balabala噗11 小时前
VScode接入MiniMax流程
ide·vscode·编辑器
醉熏的石头1 天前
Ubuntu 中的编程语言(中)
linux·ubuntu·scala
bukeyiwanshui1 天前
20260622 安装配置ubuntu
linux·运维·ubuntu
AI的探索之旅1 天前
从 Ubuntu 14.04 到 24.04:TI AM335x 开发环境完整迁移与 Agent 接管方案
linux·数据库·嵌入式硬件·ubuntu·postgresql