关于gdb:gdbopenocdstlink调试MCU

48次阅读

共计 1990 个字符,预计需要花费 5 分钟才能阅读完成。

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/

摘自:https://os.iot.10086.cn/oneos-doc-2.0/components/debug/OpenOCD/

正文完
 0