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

news/2024/12/28 0:14:59/文章来源:https://www.cnblogs.com/chinasoft/p/18634026

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底层小工,欢迎关注,获取更多原创技术文章!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859399.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

中考阅读理解深入逻辑分析-006 A Streams Journey to the Sea 一条小溪通往大海的旅程

文章正文 A little stream ran down from a high mountain far, far away through many villages and forests, until it reached a desert. The stream then thought,“I’ve been through countless difficulties. I should have no problem crossing the desert!”But as sh…

2024-2025-1 20241322 《计算机基础与程序设计》第十四周学习总结

2024-2025-1 20241322 《计算机基础与程序设计》第十四周学习总结 作业信息这个作业属于哪个课程 https://edu.cnblogs.com/campus/besti/2024-2025-1-CFAP这个作业要求在哪里 https://www.cnblogs.com/rocedu/p/9577842.html#WEEK14这个作业的目标 自学教材《C语言程序设计》…

Chrome 或引入 Gemini AI 功能「Glic」,需访问麦克风;理想同学 App 即将上线支持语音交流、识物

开发者朋友们大家好:这里是 「RTE 开发者日报」 ,每天和大家一起看新闻、聊八卦。我们的社区编辑团队会整理分享 RTE(Real-Time Engagement) 领域内「有话题的 新闻 」、「有态度的 观点 」、「有意思的 数据 」、「有思考的 文章 」、「有看点的 会议 」,但内容仅代表编辑…

洛谷题单指南-线段树的进阶用法-P3834 【模板】可持久化线段树 2

原题链接:https://www.luogu.com.cn/problem/P3834 题意解读:静态区间第k小问题,可持久化线段树(也称为主席树)模版题。 解题思路: 一、朴素想法:如何求完整区间[1,n]第k小 1、权值线段树 设n个数构成序列a,b数组代表a中元素出现的次数,即b数组的构建方式为对每一个a[…

FTP一键安装脚本(linux版)

简述:linux版权限可能会不容易理解,可参考windwos做为基础。一、FTP(linux版) 1. ftp详解 简介: vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。 vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、…

React—01—基本学习,如何在html中直接使用react;

一、react的特点:<script>标签这里要加一个“text/babel”,babel才知道这个<script>标签里要解析js代码,否则babel不会启动。 React 组件是返回标签的 JavaScript 函数:哪个组件是通过改变 state 实现可响应的,或者哪个组件拥有 这个 state。 然后我们需要确定…

记录python+pyside+qml+qtcharts 使用,防踩坑

使用QML-qtquick 进行开发时,有个使用chart图表的需求,看了一大圈,网上都是qmake或是cmake来构建QTchart,用python开发也只搜到QtWidgets模块进行图表绘制。然而我对qtwidgets不是很了解,想要的是QML开发,在使用ChartView{}时一直闪退,没有效果。经历了苦苦搜寻,终于在 h…

制作了一款 pdf 转换图片的工具( csharp 版 )

在 Windsurf 的帮助下,制作了一款 windows 下的 pdf 转换图片(png/jpg/tif)工具。支持递归查找 pdf,一些配置给写死了,适合简单使用。 PDF 批量转图片工具 这是一个功能强大且易用的 PDF 转图片工具,专为批量处理 PDF 文件设计。它能够将 PDF 文件的每一页转换为高质量的…

C# WPF PrintDialog 打印(1)

参考“WPF 打印实例”的文章:https://www.cnblogs.com/gnielee/archive/2010/07/02/wpf-print-sample.html 测试程序: 首先打印Canvas效果:看起来似乎没问题,但是调整窗体尺寸遮挡部分元素:再打印Canvas效果:可以发现PrintVisual方法只打印了可见部分的元素,测试打印Dat…

CentOS8安装

安装方法跟Centos7无差异。 一、下载安装包镜像地址:https://mirrors.aliyun.com/centos-vault/centos/8.2.2004/isos/x86_64/?spm=a2c6h.25603864.0.0.1f647af6cvFFgO 二、安装操作系统 安装界面如下, 三、后续工作a、配置ip地址 [root@localhost ~]# cat /etc/sysconfi…

某视频tv app 签名算法分析

一、基本信息 分析工具:objection、frida 二、加解密分析 通过抓包发现请求体里有签名校验 sign ,并且响应体里返回的数据是密文,所以本次的目标就是破解签名 sign 以及响应包加密算法。2.1 请求签名 sign 从 sign 的数值长度上判断可能是 MD5,先使用 objection hook java.…