Skip to content

Latest commit

 

History

History
executable file
·
99 lines (93 loc) · 5.32 KB

2023S.md

File metadata and controls

executable file
·
99 lines (93 loc) · 5.32 KB

安装

  1. 运行一遍 rCore-Tutorial-Code-2023S ch9
  2. 根据这 个diff 文件修 改代码,然后进入 user 目录,根据这 个diff 文件修 改代码,然后再跑一遍,确保能正常运行
  3. 下载 SiFive 提供 的risc-v 工具链。 下载后将该文件复制到 home 目录下并解压. 将其中的 bin/文件夹加入环境变量.
  4. cd ..../your_dir/ && git clone https://github.com/chenzhiy2001/code-debug.git && cd code-debug/ && npm install (确保您已经安装了较新版本的 npm)
  5. 打开 vscode,打开 your_dir/code-debug/文件夹.
  6. 切换到br-chenzhiy2001-hardcode-for-2023S分支,然后将 code-debug/src/frontend/extension.ts 中的 16 行改成您要 debug 的 rCore 的位置,比如 os.homedir() + "/rCore-Tutorial-Code-2023S", 再npm install.
    1. 如果您不想这么做,而是想留在master分支,那么请参照这里.
  7. 保存,然后按 f5,会弹出一个新的 vscode 窗口. 在新窗口中打开 rCore-Tutorial-Code-2023S/
  8. 在 .vscode 文件夹中添加 launch.json 文件,并输入以下内容(注意有三 处${userHome}/your/path/to/rCore-Tutorial-Code-2023S要修改成你的 rCore 的位置),保存后再编译运 行一遍 rCore,然后按 F5 就可以启动 gdb 并调试。
    //launch.json
    {
        "version": "0.2.0",
        "configurations": [
            {
                "type": "gdb",
                "request": "launch",
                "name": "Attach to Qemu",
                "executable": "${userHome}/your/path/to/rCore-Tutorial-Code-2023S/os/target/riscv64gc-unknown-none-elf/release/os", //修改${userHome}/your/path/to/
                "target": ":1234",
                "remote": true,
                "cwd": "${workspaceRoot}",
                "valuesFormatting": "parseText",
                "gdbpath": "riscv64-unknown-elf-gdb", //如果GDB并没有正常启动,可以尝试改成绝对路径(如“/home/username/riscv64-unknown-elf-toolchain-10.2.0-2020.12.8-x86_64-linux-ubuntu14/bin”)
                "showDevDebugOutput":true,
                "internalConsoleOptions": "openOnSessionStart",
                "printCalls": true,
                "stopAtConnect": true,
                "qemuPath": "qemu-system-riscv64",
                "qemuArgs": [
                    "-M",
                    "128m",
                    "-machine",
                    "virt",
                    "-bios",
                    "${userHome}/your/path/to/rCore-Tutorial-Code-2023S/bootloader/rustsbi-qemu.bin",//修改${userHome}/your/path/to/
                    "-display",
                    "none",
                    "-device",
                    "loader,file=${userHome}/your/path/to/rCore-Tutorial-Code-2023S/os/target/riscv64gc-unknown-none-elf/release/os.bin,addr=0x80200000",//修改${userHome}/your/path/to/
                    "-drive",
                    "file=${userHome}/your/path/to/rCore-Tutorial-Code-2023S/user/target/riscv64gc-unknown-none-elf/release/fs.img,if=none,format=raw,id=x0",//修改${userHome}/your/path/to/
                    "-device",
                    "virtio-blk-device,drive=x0",
                    "-device",
                    "virtio-gpu-device",
                    "-device",
                    "virtio-keyboard-device",
                    "-device",
                    "virtio-mouse-device",
                    "-serial",
                    "stdio",
                    "-s",
                    "-S"
                ]
            },
        ]
    }
    

使用

  1. 等一会,喝杯水,直到 DEBUG CONSOLE 不再刷新内容
  2. 按 TERMINAL 可以切换到终端输出
  3. 按下清除所有断点(removeAllCliBreakpoints)按钮,在右上角,🗑 垃圾桶图标
  4. 按下设置内核入口(setKernelInBreakpoints)按钮
  5. 按下出口断点(setKernelOutBreakpoints)按钮
  6. 设置你想要的内核代码和用户程序代码的断点(推荐在 main.rs 的trap::init()设置一个,在 ch9b_initproc.rs 的println!("aaaa")语句设置一个,如果不行的话设置在fn main() -> i32 {处)
  7. 按 continue 按钮(|▷)开始运行 rCore-Tutorial.接下来不停按|▷就行了.
    1. 当运行到位于内核出口的断点时,插件会自动切换到用户态的断点
    2. 在用户态程序中如果想观察内核内的执行流,可以点击gotokernel按钮,然后点击继续按钮,程序会停在 内核的入口断点,这时,可以先把内核出口断点设置好(点击setKernelOutBreakpoints按钮),接下来 ,可以在内核态设置断点,点击继续,运行到内核的出口断点之后,会回到用户态。

硬编码数据修改

改成一个 vscode 设置选项可能更方便,欢迎 pr:

  1. code-debug/src/mibase.ts
    1. 1255 行,65 改成 79
    2. 1264 行和 343 行,135 改成 148
    3. 1281 行,30 改成 43
  2. code-debug/src/frontend/extension.ts
    1. 15 行 initproc 改成 ch9b_initproc
    2. 16 行改成您要 debug 的 rCore 的位置,比如 os.homedir() + "/rCore-Tutorial-Code-2023S"