首页 > 系统相关 >RISC-V篇-VSCode+qemu+gdb可视化调试Linux Kernel

RISC-V篇-VSCode+qemu+gdb可视化调试Linux Kernel

时间:2024-12-26 19:08:01浏览次数:3  
标签:Kernel kernel VSCode symbol RISC gdb qemu 调试

https://zhuanlan.zhihu.com/p/4185359719

 

本文发布于微信公众号:Linux底层小工,欢迎关注,获取更多原创技术文章!

“VSCode+qemu+gdb调试OpenSBI确实很爽,那怎能少了调试kernel呢~~”

01 VScode调试MMU开启之前的kernel

有了调试OpenSBI的基础,再调试kernel,那设置相当简单了,如果你还没看过VSCode调试OpenSBI,请先查看另一篇文章:《VSCode+qemu+gdb可视化调试OpenSBI》

现在让我们来配置调试kerenl,先在VSCode中远程打开kernel目录

然后点击debug图标:

然后点击create a launch.json file:

选择Node.js:

然后输入如下内容:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
    "name": "kernel-before-mmu-debug",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/vmlinux",
        "args": [],
        "stopAtEntry": true,
        "stopAtConnect": true,
        "cwd": "${workspaceFolder}",
        "postRemoteConnectCommands": [
          {
          "description": "remove symbol file",
          "text": "symbol-file"
          }
          {
          "description": "add symbol file",
          "text": "add-symbol-file vmlinux 0x80202000 -s .head.text 0x80200000 -s .init.text 0x80c00000 -s .rodata 0x81000000"
          }
        ],
        "MIMode": "gdb",
        "miDebuggerPath":"/usr/bin/gdb-multiarch",
        "miDebuggerServerAddress": "localhost:1234"
    }
  ]
}

注意,其中的program就是vmlinux的路径,还有postRemoteConnectCommands要在连接之后先使用symbol-file命令将vscode启动gdb时默认加载的symbol清除掉,然后再使用add-symbol-file命令将各个段的symbol添加到指定位置(这些位置怎么计算来的,请观看RISC-V篇-qemu+gdb调试Linux kernel源码),否则后面debug时会有问题,比如,设置断点,会命中多个地址等

现在可以在VSCode中调试了,先在VSCode中打开终端,并启动qemu:

然后分别点击debug按钮,Start Debugging按钮:

启动debug之后,如下图:

现在打开head.S文件,可以直接在代码的左侧点击设置断点,或者在DEBUG CONSOLE下输入 -exec b xxx 设置断点,如下图,左侧红色的小点就是设置的断点:

点击countinue按钮运行:

就会命中断点,左侧还提供了非常丰富的信息:

02 VScode调试MMU开启之后的kernel

有了以上的基础,调试MMU开启之后的kernel就很简单了,只需修改launch.json的配置如下:

{
  // Use IntelliSense to learn about possible attributes.
  // Hover to view descriptions of existing attributes.
  // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387
  "version": "0.2.0",
  "configurations": [
    {
    "name": "kernel-before-mmu-debug",
        "type": "cppdbg",
        "request": "launch",
        "program": "${workspaceFolder}/vmlinux",
        "args": [],
        "stopAtEntry": true,
        "stopAtConnect": true,
        "cwd": "${workspaceFolder}",
        "MIMode": "gdb",
        "miDebuggerPath":"/usr/bin/gdb-multiarch",
        "miDebuggerServerAddress": "localhost:1234"
    }
  ]
}

对的,你没有看错,就是删除postRemoteConnectCommands字段即可

启动qemu,启动debugger,设置断点,continue运行,与上面都一样的,这里就省略了,最终运行到start_kernel的效果如下:

其他操作留给你自己探索去吧~~

最后,不得不说,VSCode是真强大啊,再安装上vim插件,用vim命令,简直爽到飞起

俗话说,磨刀不误砍柴工,关于环境设置这一块,其实就是在磨刀,不过截至目前,我感觉环境设置已经基本ok了,对以后的效率会有很大的提升,后面会更多的专注于RISC-V知识的学习了,包括spec文档,代码等~~

敬请期待!!!

如果你觉得本文对你有帮助,请点赞,关注~

本文发布于微信公众号:Linux底层小工,欢迎关注,获取更多原创技术文章!

标签:Kernel,kernel,VSCode,symbol,RISC,gdb,qemu,调试
From: https://www.cnblogs.com/chinasoft/p/18634026

相关文章

  • VScode中C/C++调试文件配置
    VScode中C/C++调试文件配置//launch.json{"version":"2.0.0","configurations":[{"name":"C/C++:gcc.exebuildanddebugactivefile",//调试配置名称"type":"......
  • GO 学习笔记之五 编程(三)单元测试 ( VSCODE工具运行 )
    一、目的   当本地写好了一个go文件之后,希望通过单元测试来验证写的go文件中代码逻辑是否正确,减少后期发现问题成本。本案例介绍如何在VSCODE工具中触发执行和单点debug执行单元测试函数(注意:VSCODE工具有一个致命不好的点就是慢)二、编写单元测试  假设:当前业务逻辑go......
  • 仓颉语言开发环境搭建 —— VSCode篇
    VSCode中搭建仓颉语言运行环境1.仓颉语言简介仓颉编程语言是一款面向全场景智能的新一代编程语言,主打原生智能化、天生全场景、高性能、强安全。主要应用于鸿蒙原生应用及服务应用等场景中,为开发者提供良好的编程体验。是一门静态强类型语言,分为通用版和鸿蒙版,适用于服务......
  • VScode中配置ESlint+Prettier详细步骤(图文详情)
    VScode中配置ESlint+Prettier详细步骤(图文详情)前置环境:node18.19.0vite3.2.11vue3.2.47本文将不在演示vue3基础工程创建,如果还没有vue3项目工程请参考文章:Vite创建Vue3工程并引入ElementPlus(图文详细)本文的ESlint+Prettier版本:ESlint8.57.1Prettier3.2.51ed......
  • js压缩代码还原的vscode插件
    1.Prettier-Codeformatter:Prettier是一个非常流行的代码格式化工具,支持多种语言,包括JavaScript。它可以按照预设的规则自动格式化你的代码。对于压缩的代码,它能够很好地展开并格式化。2.Beautify:Beautify插件专为美化HTML,CSS,和JavaScript代码而设计。你可......
  • vscode怎么连接远程服务器使用jupyter和pycharm?安装了jupyter插件为什么还是打不开jup
    本文主要从下面三个方面进行1.vscode的优势2.怎么安装并配置vscode3.怎么使用jupyter和pycharm4.我遇到的问题(已解决)(1)显示你即将连接到不受visualstudiocode版本(2)解决安装了jupyter插件但是还是打不开.ipynb文件无法打开笔记本编辑器类型为"jupyter-notebook"的资源......
  • VSCode配置启动Vue项目
    VSCode配置启动Vue项目|Id|Title|DateAdded|SourceUrl|PostType|Body|BlogId|Description|DateUpdated|IsMarkdown|EntryName|CreatedTime|IsActive|AutoDesc|AccessPermission||-------------|-------------|-------------|-------------|--......
  • 定制最小linux系统 - 4: 使用vscode单步调试
    内核毕竟是一个很大的工程,有时看得一头雾水,如果能单步调试的话,对于理解可能有亿点帮助.下面一步步搭建qemu+vscode环境对内核进行单步调试.第一步编译内核定制最小linux系统-1:编译linux内核-CSDN博客https://blog.csdn.net/weixin_46766770/article/details/1......
  • 在openEuler RISC-V上无痛部署Solidity
     近几年区块链很火,随着各国政府对加密技术的监管政策不断变化和BTC的暴涨,越来越多人对这项去中心化的技术充满着期待。这次我用openEuler24.09RISC-V的远程机器尝试编译了Solidity项目,发现过程比较顺畅,于是记录下来,后面有机会我也多多探讨区块链在RISC-V的可能性。 gitclo......
  • YOLOv11模型改进-模块-引入多尺度大核注意力Multi-scale Large Kernel Attention
            MLKA的提出源于图像超分辨率任务的挑战性,该任务需重建低质量图像缺失的高频信息,但因LR与HR图像对应关系复杂,寻找像素相关性困难。此前模型扩展容量的方法增加了训练负担和数据收集成本,而采用的注意力机制无法同时获取局部与长距离信息且感受野固定。受视......