VSCode gdb 调试 qemu u-boot 的方法

news/2024/10/22 12:23:26/

前言

  • 最近使用 VS Code GDB 调试 qemu,有了一点收获,u-boot 编译后生成了一个 elf 文件:u-boot,是否也可以调试一下?

  • 为何需要 VS Code GDB 调试,直接 gdb 调试不就可以了吗?答案就是:VS Code 可以界面调试,命令行调试会枯燥很多

环境

  • 使用 qemu,就是不需要板子

  • win10 64位 VMware Workstation Pro 16

  • ubuntu 20.04

  • qemu (虚拟ARM开发板),qemu arm64 平台

  • u-boot : u-boot-2023.04

  • gcc 交叉编译工具链:gcc version 12.2.1 20230401

目标

  • 基于 qemu,VS Code GDB,界面调试 u-boot,了解 u-boot 的启动流程

  • qemu:不需要硬件电路板支持,当前一些启动初始化流程可能与实际电路板存在差异,所以目标就是摸清楚 u-boot 的启动流程,重在搞清楚 u-boot 启动与初始化流程。

  • VS Code,这里重在界面调试,类似于 eclipse 那样的,可以源码调试

  • GDB:是一个强大的调试工具

编译 u-boot

  • 配置文件:configs/qemu_arm64_defconfig

  • 生成配置:make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- qemu_arm64_defconfig

  • 【备注】:当前 u-boot-2023.04 ARM 与 ARM64 没有分开,所以 ARCH=arm,而不是 ARCH=arm64

  • 开始编译: make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-

  • 生成的产物: u-boot.bin:二进制文件, u-boot: elf 可执行文件,默认包含 debug 信息

配置 VS Code gdb

  • 当前 是 Win10 下 VS Code 通过 SSH 连接 VM虚拟机中的 ubuntu,如果本地是 ubuntu 系统,应该就不需要 SSH 远程连接

  • VS Code 安装 gdb 调试插件

在这里插入图片描述

  • 【备注】gdb 这个插件,好像不需要,确认下左边栏 是否有个 DEBUG 调试按钮吧,好像是 VS Code 自带的。

  • 配置 VS Code 调试:点击 【设置】的按钮,会提示选择某个调试器,这里随便选择一个,然后就会出现一个 .vscode/launch.json 文件

  • 修改 launch.json 文件内容如下

{"version": "0.2.0","configurations": [{"name": "uboot-debug","type": "cppdbg","request": "launch","miDebuggerServerAddress": "127.0.0.1:1234","miDebuggerPath": "/home/zhangsz/linux/tools/gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb","program": "${workspaceFolder}/u-boot","args": [],"stopAtEntry": true,"cwd": "${workspaceFolder}","environment": [],"externalConsole": false,"logging": {"engineLogging": false},"MIMode": "gdb",}]
}
  • 注意点一:"miDebuggerPath": "/home/zhangsz/linux/tools/gcc-linaro-12.2.1-2023.04-x86_64_aarch64-linux-gnu/bin/aarch64-linux-gnu-gdb",,这里设置 gcc gdb 的执行路径,全路径即可,这里的 gdb,来自 gcc version 12.2.1 20230401 交叉编译工具链

  • 注意点二:"program": "${workspaceFolder}/u-boot",,这里选择 u-boot,也就是 ELF 文件,而不是 u-boot.bin 二进制文件

  • 注意点三:"stopAtEntry": true,,这里选择 所有 的 执行 入口函数,都有断点停下来,否则可能 u-boot 无法调试

qemu 启动与调试脚本

  • qemu 启动脚本:qemu.sh,可以确认 u-boot 是否可以正常启动
#!/bin/bash
qemu-system-aarch64 -machine virt \-nographic \-m 512M \-cpu cortex-a57 \-kernel u-boot \
  • qemu 调试调试脚本,qemu-debug.sh,执行此脚本,可以进入 qemu 调试
#!/bin/bash
qemu-system-aarch64 -machine virt \-nographic \-m 512M \-cpu cortex-a57 \-kernel u-boot \-s -S

调试方法

  • 执行 qemu-debug.sh,此时会卡住,也就是 qemu 处于【冻结】状态

  • 点击 调试图标的 【运行】按钮:

在这里插入图片描述

  • 进入调试界面:

在这里插入图片描述

  • 此时可以加断点进行调试,可以单步【F11】或者 【F10】进行调试

在这里插入图片描述

  • 如此, VS Code gdb 源码调试 u-boot 的环境搭建成功了

备注

  • 好像 u-boot 有一段 重定位的操作,经过重定位后, VS Code gdb 就无法正常加人断点了,也就是没有了调试符号与信息,这部分后续再梳理一下。

  • 当前的 VS Code gdb 界面源码调试 u-boot,可以从 reset 开始,单步【F11】配合【F10】与 手动断点,了解 u-boot 的第一阶段的启动流程,感觉对熟悉 u-boot 启动流程 还是有点用处。

小结

  • VS Code GDB 调试功能,感觉有点像专业的 Visual Studio 的感觉了,嵌入式软件可以调试,这本身就是一件好事,利于熟悉代码执行流程、问题定位等。

  • 调试过程中,有寄存器、局部变量、断点、【监视】watch 等窗口,可以观察程序执行的当前状态,很有用,至少比 gdb【命令行】调试起来舒服与高效


http://www.ppmy.cn/news/545804.html

相关文章

设计模式-工厂方法模式

​ 文章目录 发展:简单实现:命名不规范:可读性差可维护性差可扩展性差团队合作问题 除数不能为0问题:开闭原则问题:想象力创造力:首先是发现力:接下来是想象力:总结 大话设计模式这本书反反复复…

2023年如何选购一部4000元价位的笔记本电脑(附跳坑说明)

2023年如何选购一部4000元价位的笔记本电脑(附带坑的说明) 本文是一个快速指南,不包含选购中涉及的所有知识点,尤其是大量的具体硬件参数,内容主要关注在如何快速抓住自己真正的需求,快速筛选掉不匹配的型…

你真的会写 HelloWorld 吗?

目录 Hello World 写一个批处理命令行脚本 关于include 关于程序的入口 输出充定向 在内存的存储详情 WinHex工具介绍 初学C语言时,第一个程序一定是Hello World!。但是Hello World的具体实现细节你真的了解吗? Hello World C语言代码如下&#…

java replace会替换吗,java replace replaceAll 替换字符串的用法和区别实例

java replace replaceAll 是替换字符串最常用的方法,但实际上用法是有区别的,replace只能传字符不能传正则表达式,replaceAll 默认传入的就是正则表达式。下面是实例测试代码: public class TestDemo { public static void main(S…

Python学习笔记之常用操作符,条件分支和循环用法示例

本文实例讲述了Python常用操作符,条件分支和循环用法。分享给大家供大家参考,具体如下: #Pyhon常用操作符想要学习Python?Python学习交流群:973783996满足你的需求,资料都已经上传群文件,可以自行下载&…

新装mac系统finder不断重启

自从安装了新系统小牛,我被烦人finder重启问题折磨得不能正常工作了。终于找到解决方法。罪魁祸首就是kanbox,酷盘。卸载了以后一切ok。 sudo mv /Library/Application\ Support/KanBox /Library/Application\ Support/KanBox_bak

Postgresql学习笔记(1)

PostgreSQL In BigData BigSQL(整合了pg和hadoop的开源项目) :http://www.bigsql.org/se/ Hadoopdb(耶鲁大学开源项目)SQL to MapReduce to SQL :http://hadoopdb.sourceforge.net/guide/ http://db.cs.yale.edu/hadoo…

酷盘开放API

2019独角兽企业重金招聘Python工程师标准>>> <?php/** * 酷盘api */ class kupan {static $client_id4ca2c199a24ec9a3415f586c77dc****;static $client_secret44edbeca692b0818623476a9b232****;static $backurlhttp://www.baidu.com; static $code"5277…