IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发工具 -> 从零开始使用Vscode调试XV6 -> 正文阅读

[开发工具]从零开始使用Vscode调试XV6

目录

参考:

0.系统要求:

1.下载源码

下载源码

看到shell即代表ok

退出方法

?2.compile_commands.json生成:便于调试

makefile的生成方法:安装compiledbhttps://github.com/nickdiego/compiledb.git

Cmake的生成方法

3. xv6的Makefile修改

关于? .gdbinit

4. 调试内核

开两个Terminal?

此时,在xv6-riscv目录下,执行make qemu-gdb?,进程会阻塞.

?配置.gdbinit让其在gdb启动的时候生效

5. 在vscode调试

配置tasks.json--->Terminal--->configure default build tasak

配置launch.json[用于调试]

如果一切顺利:将会这样


从零开始使用Vscode调试XV6 - 知乎

https://github.com/Aneureka/xv6-riscv

0.系统要求:

一天时间的教训---系统要ubuntu20.04的 ,用ubuntu18.04的搞了一天

1.下载源码

学习资源:Xv6 代码导读 (调试工具配置;调试系统调用执行) [南京大学2022操作系统-P18]_哔哩哔哩_bilibili

下载源码

  • git clone https://github.com/mit-pdos/xv6-riscv.git
  • cd xv6-riscv
  • 安装依赖

sudo apt install binutils-riscv64-linux-gnu
sudo apt install gcc-riscv64-linux-gnu
sudo apt install gdb-multiarch
sudo apt install qemu-system-misc u-boot-qemu qemu-utils

  • 报错:
a725@ubuntu:~/Desktop/xv6/xv6-riscv$ make qemu
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 1 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0
make: qemu-system-riscv64: Command not found
Makefile:164: recipe for target 'qemu' failed
make: *** [qemu] Error 127
解决方案:
  249  wget https://download.qemu.org/qemu-5.1.0.tar.xz
  251  tar -xvf qemu-5.1.0.tar.xz 
  253  cd qemu-5.1.0/
  275  ./configure --target-list=riscv64-softmmu,riscv64-linux-user
  276  sudo make -j8
  277  sudo make install


然后终端 输入 qemu-system-risv6 --version能打印即算ok

看到shell即代表ok

a725@ubuntu:~/Desktop/xv6/xv6-riscv$ make qemu
qemu-system-riscv64 -machine virt -bios none -kernel kernel/kernel -m 128M -smp 1 -nographic -drive file=fs.img,if=none,format=raw,id=x0 -device virtio-blk-device,drive=x0,bus=virtio-mmio-bus.0

xv6 kernel is booting

init: starting sh
$ ls
.              1 1 1024
..             1 1 1024
README         2 2 2226
cat            2 3 23896
echo           2 4 22720
forktest       2 5 13016
grep           2 6 27256
init           2 7 23816
kill           2 8 22696
ln             2 9 22648
ls             2 10 26144
mkdir          2 11 22800
rm             2 12 22784
sh             2 13 41792
stressfs       2 14 23792
usertests      2 15 156240
grind          2 16 37992
wc             2 17 25000
zombie         2 18 22168
console        3 19 0
$ 

退出方法

在 xv6 中按?Ctrl?+?a?,然后按?x?即可退出 xv6 系统。

?2.compile_commands.json生成:便于调试

makefile的生成方法:安装compiledbhttps://github.com/nickdiego/compiledb.git

  1. 针对makefile:? ?安装compiledb【git clone https://github.com/nickdiego/compiledb.git】来自动生成compile_commands.json

  2. sudo python3 setup.py install
  3. sh-completion/compiledb.bash文件的内容添加到.bashrc文件中。
  4. 然后在 xv6目录下 compiledb make 即可?,可看到生成的 compile_commands.json?

Cmake的生成方法

  • 如果用CMAKE,加上参数DCMAKE_EXPORT_COMPILE_COMMANDS即可生成
cmake -DCMAKE_EXPORT_COMPILE_COMMANDS=True ..

3. xv6的Makefile修改

  • 修改xv6文件夹的Makefie 的 -smp 为1 便于调试
  • 看Makefile来理解整个kernel的编译过程

make | less 或者 make | vim -

  • Makefile的宏定义不能定义到 vscode

bear make ,让 vscode的宏生效

关于? .gdbinit

  • gdb里面又gdb intit的配置,避免重复输入命令

4. 调试内核

开两个Terminal?

  • 此时,在xv6-riscv目录下,执行make qemu-gdb?,进程会阻塞.

  • 另开一个终端,在xv6-riscv目录下,执行gdb-multiarch kernel/kernel

?配置.gdbinit让其在gdb启动的时候生效

?按上图红色部分修改

5. 在vscode调试

配置tasks.json--->Terminal--->configure default build tasak


{
    "version": "2.0.0",
    "tasks": [
        {
            "label": "xv6build",
            "type": "shell",
            "isBackground": true,
            "command": "make qemu-gdb",
            "problemMatcher": [
                {
                    "pattern": [
                        {
                            "regexp": ".",
                            "file": 1,
                            "location": 2,
                            "message": 3
                        }
                    ],
                    "background": {
                        "beginsPattern": ".*Now run 'gdb' in another window.",
                        "endsPattern": "."
                    }
                }
            ],
            "group": {
                "kind": "build",
                "isDefault": true
            }
        }
    ]
}

配置launch.json[用于调试]

注意:由于有?"miDebuggerServerAddress": "127.0.0.1:26000", //所以需要吧.gdbinit 中 target remote xxxx:xx改为

@REM?target remote xxxx:xx

// xv6-riscv/.vscode/launch.json
{
    "version": "0.2.0",
    "configurations": [
        {
            "name": "xv6debug",
            "type": "cppdbg",
            "request": "launch",
            "program": "${workspaceFolder}/kernel/kernel",
            "stopAtEntry": true,
            "cwd": "${workspaceFolder}",
            "miDebuggerServerAddress": "127.0.0.1:26000", //见.gdbinit 中 target remote xxxx:xx
            "miDebuggerPath": "/usr/bin/gdb-multiarch", // which gdb-multiarch
            "MIMode": "gdb",
            "preLaunchTask": "xv6build"
        }
    ]
}

如果一切顺利:将会这样

  开发工具 最新文章
Postman接口测试之Mock快速入门
ASCII码空格替换查表_最全ASCII码对照表0-2
如何使用 ssh 建立 socks 代理
Typora配合PicGo阿里云图床配置
SoapUI、Jmeter、Postman三种接口测试工具的
github用相对路径显示图片_GitHub 中 readm
Windows编译g2o及其g2o viewer
解决jupyter notebook无法连接/ jupyter连接
Git恢复到之前版本
VScode常用快捷键
上一篇文章      下一篇文章      查看所有文章
加:2022-09-21 00:48:32  更:2022-09-21 00:49:23 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 -2024/12/28 18:29:41-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码
数据统计