Gdb无法连接到stm32上的OpenOCD

时间:2019-05-06 07:13:29

标签: gdb stm32 openocd

尝试在STM32L476 Nucleo-64板上调试示例眨眼代码,但gdb无法连接到OpenOCD(连接几乎立即断开,并显示错误)。我到处都读了很多文章,但是没有一个人提供帮助。尝试使用-c向OpenOCD添加命令,但不更改行为。

我的代码在Eclipse的Release和Debug配置中都进行编译。我可以使用拖放操作来刷新bin文件(该开发板具有内置的STLink插件),并且代码在开发板上可以完美运行(LED闪烁)。

使用以下版本在Centos7上进行交叉编译:

  • 工具链(gdb):gcc-arm-none-eabi-8-2018-q4-major
  • OpenOCD:0.10.0-11-20190118-1134

由于使用eclipse无效,因此我尝试了命令行

(我不是这种环境下的经验丰富的开发人员,因此我找不到比stm32l4discovery.cfg更靠近我的stm32l476板的配置文件,请让我知道使用它是否可能有问题)

./bin/openocd -f scripts/board/stm32l4discovery.cfg -c "init"

开始,

GNU MCU Eclipse 64-bit Open On-Chip Debugger 0.10.0+dev-00462-gdd1d90111 (2019-01-18-11:37)
Licensed under GNU GPL v2
For bug reports, read
    http://openocd.org/doc/doxygen/bugs.html
Info : The selected transport took over low-level target control. The results might differ compared to plain JTAG/SWD
adapter speed: 500 kHz
adapter_nsrst_delay: 100
none separate
srst_only separate srst_nogate srst_open_drain connect_deassert_srst
Info : clock speed 500 kHz
Info : STLINK V2J28M17 (API v2) VID:PID 0483:374B
Info : Target voltage: 3.244386
Info : stm32l4x.cpu: hardware has 6 breakpoints, 4 watchpoints
Info : Listening on port 3333 for gdb connections
Info : Listening on port 6666 for tcl connections
Info : Listening on port 4444 for telnet connections

然后启动GDB:

./arm-none-eabi-gdb ~/eclipse-workspace/test-blink-led/Debug/test-blink-led.elf

然后在gdb中运行以下命令:

(gdb) target remote localhost:3333
Remote debugging using localhost:3333
Remote connection closed

它显示gdb连接立即断开,OpenOCD提示以下错误:

Info : accepting 'gdb' connection on tcp/3333
target halted due to debug-request, current mode: Thread 
xPSR: 0x01000000 pc: 0x080022e6 msp: 0x20017ff8
Info : device id = 0x10076415
Warn : STM32 flash size failed, probe inaccurate - assuming 1024k flash
Info : flash size = 1024kbytes
Error: auto_probe failed
Error: Connect failed. Consider setting up a gdb-attach event for the target to prepare target for GDB connect, or use 'gdb_memory_map disable'.
Error: attempted 'gdb' connection rejected
Error: jtag status contains invalid mode value - communication failure
Polling target stm32l4x.cpu failed, trying to reexamine
Examination failed, GDB will be halted. Polling again in 100ms

因此,那些每天都在类似平台上进行操作的极客,谁能帮助我,告诉我我在哪里做错了。缺少任何编译时标志是否可能导致此问题?

我现在要挠头几天,所以请让我告诉您。

2 个答案:

答案 0 :(得分:0)

原因之一可能是您的STLINK固件看起来很旧(日志显示为STLINK V2J28M17)。我建议下载STSW-LINK007应用程序以升级固件。该软件是一个多平台Java应用程序。在Debian GNU / Linux中它可以完美地工作。

当前,我使用另一个gdb服务器texane/stlink来完成GDB的调试任务,而在某些Nucleo和自定义板上也没有任何问题。我使用target extended-remote命令加入服务器的端口。也许您也可以尝试在OpenOCD下使用此命令进行连接。

答案 1 :(得分:0)

尝试 telnet本地主机4444

它为我工作,而3333却没有