当前位置: 代码网 > it编程>编程语言>其他编程 > VSCode gdb 调试 qemu u-boot 的方法详解

VSCode gdb 调试 qemu u-boot 的方法详解

2024年06月01日 其他编程 我要评论
前言最近使用 vs code gdb 调试 qemu,有了一点收获,u-boot 编译后生成了一个 elf 文件:u-boot,是否也可以调试一下?为何需要 vs code gdb 调试,直接 gdb

前言

  • 最近使用 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【命令行】调试起来舒服与高效

到此这篇关于vscode gdb 调试 qemu u-boot 的方法的文章就介绍到这了,更多相关vscode gdb 调试 qemu u-boot内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)

相关文章:

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论

验证码:
Copyright © 2017-2026  代码网 保留所有权利. 粤ICP备2024248653号
站长QQ:2386932994 | 联系邮箱:2386932994@qq.com