gdb+openocd+stlink调试MCU

1.前言

当我们遇到问题的时候,可以加打印信息追踪流程,但更有效的方式是:调试。如果你使用的是keil,可以借助stlink或者jlink进行调试。如果你是使用的gnu工具链,硬件支持jlink,那么我们可以借助gdb+jlink的方式进行调试;如果我们硬件支持的是stlink,则可以借助gdb+openocd+stlink进行调试。

2.使用GDB调试OneOS

GDB,全称GNU Project debugger,是UNIX及UNIX-like下的强大调试工具,同时也支持对嵌入式系统进行调试。对嵌入式系统进行调试时,是以远程调试的方式进行的,调试环境的软硬件连接如下:

在上图的结构中,支持嵌入式芯片调试的GDB Server有多款,这里主要介绍OpenOCD和J-Link GDB Server。

  • J-Link GDB Server由SEGGER公司推出,仅支持使用Jlink作为调试适配器进行调试

  • OpenOCD,全称Open On-Chip Debugger,是一款针对嵌入式芯片调试的开源软件,支持市面上大多数的调试适配器,例如stlink、DAPlink、Jlink等。OpenOCD支持GDB查看RTOS线程,OneOS已对其进行了适配。使用OpenOCD作为GDB Server,可以查看OneOS所有线程的调用栈和栈上的临时变量,对于调试,能提供更多的信息

3.gdb结合stlink调试

这里以万耦开发板stm32f401-vet-oneos为例演示调试过程,由于OpenOCD配合Jlink使用时,需要将Jlink的驱动切换成通用usb驱动(OpenOCD不支持Jlink的原生驱动,如果需要,可以使用zadig这款开源软件将Jlink驱动切换成WinUSB或libusb),为了方便起见,在使用OpenOCD调试时,调试适配器选择stlink。

3.1 获取OpenOCD

下载预编译的Windows版本请点击OpenOCD下载

3.2 目录结构

OpenOCD编译后的二进制文件目录结构如下:

3.2 添加环境变量

OPENOCD_BIN_PATH="D:\Program\openocd\bin"
OPENOCD_SCRIPT_PATH="D:\Program\openocd\share\openocd\scripts"

3.3 配置文件oneos.cfg

在stm32f401-vet-oneos工程目录下创建配置文件oneos.cfg,文件内容如下:

# this need match your debug adaptor and target device
source [find interface/stlink-v2.cfg]
source [find target/stm32f4x.cfg]

# config openocd support OneOS
$_TARGETNAME configure -rtos oneos

# halt target after gdb attached
$_TARGETNAME configure -event gdb-attach { halt }

3.4 启动openOCD

在OneOS-Lite代码根目录运行OneOS-Cube,执行如下命令:

%OPENOCD_BIN_PATH%\openocd.exe -c "gdb_port 5000" -s %OPENOCD_SCRIPT_PATH% -f .\projects\stm32f401-vet-oneos\oneos.cfg

运行成功后的界面如下,此时OpenOCD已配置完成:

4 启动gdb调试

在OneOS-Lite代码根目录下运行OneOS-Cube,执行如下命令运行GDB

arm-none-eabi-gdb.exe .\out\stm32f401-vet-oneos\oneos.elf

在GDB命令行交互界面中执行如下命令连接GDB Server,其中:5000是GDB Server的tcp端口号,对应上面OpenOCD运行时指定的gdb_port(如果使用J-Link GDB Server,则端口选择上面显示的2331)

target remote localhost:5000

连接成功后,GDB命令行交互界面如下

5.开始调试OneOS-Lite

  • 查看当前线程调用栈和临时变量

  • 查看所有正在运行的线程(J-Link GDB Server不支持此命令)

  • 切换到其他线程并查看调用栈与临时变量(J-Link GDB Server不支持此命令)

  • 打断点

b entry

  • 重新加载

load

更多的GDB用法,请查看官方文档。

6.关注&&联系

gitee: https://gitee.com/cmcc-oneos/OneOS-Lite

docs: https://oneos-lite.com/

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: OpenOCDGDB是嵌入式开发中使用的重要工具。OpenOCD是一个开放源代码的调试和编程工具,用于连接和控制嵌入式设备的调试接口。GDB则是GNU调试器,用于调试程序。 OpenOCD可以提供对嵌入式设备的低级别硬件访问,允许我们在设备上烧录程序和访问寄存器。它可以在设备上启动GDB服务器,并将设备连接到主机。我们可以使用GDB在主机上编写、调试和优化程序,并使用OpenOCD将程序上传到设备中。 通过OpenOCD,我们能够访问嵌入式设备上的所有资源,包括CPU、寄存器、存储器、调试接口等。GDB则提供了一个交互式的命令行界面,可以用于单步执行代码、查看变量、内存和寄存器的值、设置断点和监视点等调试操作。 OpenOCDGDB可以共同使用,以提供完整的嵌入式调试工具链。在开发嵌入式系统时,我们可以使用GDB编写和调试程序,并通过OpenOCD将程序上传到设备中进行测试和验证。这种工作流程可以提高开发效率,减少错误,并节省开发时间和成本。 ### 回答2: OpenOCDGDB 是两种常用的嵌入式开发调试工具。 OpenOCD 是一款支持多种芯片体系结构的开源调试和编程工具,它可以连接到不同的调试适配器,例如 J-Link、ST-LINK、CMSIS-DAP 等。通过 OpenOCD,我们可以在嵌入式系统上执行调试命令,例如读取寄存器的值、在 Flash 中下载程序、启动或停止运行等。 GDB(GNU Debugger)是一个强大的命令行调试器,它支持多种体系结构和编程语言,并且可以与多种编程工具和 IDE 集成。GDB 可以识别多种调试器协议,并进行远程调试,它允许我们在嵌入式系统上调试代码,并且可以与 OpenOCD 集成使用。 OpenOCDGDB 通常一起使用,通过 OpenOCD 连接到调试适配器,然后使用 GDB 发送调试命令到 OpenOCD,这样我们就可以在嵌入式系统上执行调试命令来调试代码了。在调试中,我们可以设置断点、单步执行、查看变量、观察程序状态等,这些调试功能可以帮助我们快速定位代码中的问题并进行调试和优化。 ### 回答3: OpenOCD是一个用于嵌入式系统的开源调试工具。它与GDB一起使用,允许程序员在嵌入式平台上调试它们的代码。 GDB是一个基于命令行的调试器,可以通过与OpenOCD结合使用来调试嵌入式程序。GDB允许程序员通过设置断点、单步执行、查看变量值等操作来调试程序。 OpenOCD的作用是将GDB和目标设备之间建立连接。OpenOCD通过JTAG或SWD接口连接到目标设备,与GDB建立TCP/IP连接。这使得GDB可以通过OpenOCD向目标设备发送指令来控制程序的执行。 OpenOCD还提供了许多其他功能,例如烧录固件和读取/写入目标设备上的寄存器值。这些功能使得OpenOCD及其与GDB的结合具有广泛的应用场景。 总之,OpenOCDGDB是嵌入式系统开发中不可或缺的工具。它们结合使用可以帮助程序员快速而准确地调试嵌入式代码。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值