【发布时间】:2018-01-11 15:54:27
【问题描述】:
假设我有两个 STM32,我正在使用这个程序员 here。
我想同时连接它们并独立调试/刷新/迭代。
所以,我的设置如下:
硬件
PC |-> USB1 -> ST-LINK-Programmer1 -> STM32_Board1
|-> USB2 -> ST-LINK-Programmer2 -> STM32_Board2
SW
我通常用一块板做这件事的方式非常简单。
openocd -f config.cfg
这是我正在调用的配置文件:
source [find interface/stlink-v2.cfg]
transport select hla_swd
source [find target/stm32f4x.cfg]
reset_config none
然后,在另一个终端中,我像这样调用 arm-gdb:
arm-none-eabi-gdb build/FW.elf
在 ~/.gdbinit 中,我只有这一行:
target remote localhost:3333
什么不工作
这很明显...我为第一个 OpenOCD 使用端口 3333,但第二个实例尝试使用相同的端口并失败
Error: couldn't bind tcl to socket: Address already in use
我的尝试
我查看了文档 here,但没有看到如何在我的 config.cfg 文件中调用这些选项。
我也尝试将这些关于 tcl_port 和 gdb_port 的命令添加到实际的命令行参数中,例如
openocd -f config.cfg -c tcl_port 4444,但这也不起作用...套接字仍在使用中。
我真正的问题
这样做的正确方法是什么?在配置 openocd 以使其连接到正确的 OpenOCD 实例后,是否有任何陷阱处理 arm-none-eabi-gdb?
【问题讨论】:
-
配置文件具有您指出的端口号,我对从一台计算机到多个设备的两个或多个 openocd 会话没有任何问题。在这种情况下,我通常使用非 stlink,您要查找我们的可能有一个序列号或其他项目,您可以将每个配置文件用于与该特定调试器相关联的每个配置文件,这样配置文件会找到一个单一的设备.
-
我使用较旧的 ft2232 legacy,并且有 ft2232_serial、ft2232_desc 等,这些来自该设备的 ftdi eeprom 信息。 stlink 之类的其他东西希望也有类似的东西。
-
在 cfg 文件中
-
# 可选指定ST-LINK/V2 usb设备的序列号。 ST-LINK/V2 # 设备的序列号似乎带有不可读的字符。建议 ST-LINK/V2 # 固件版本 >= V2.J21.S4 以避免适配器序列号重置问题。 # 例如。 #hla_serial "\xaa\xbc\x6e\x06\x50\x75\xff\x55\x17\x42\x19\x3f"
-
是的,效果很好,不需要字符串的东西,只需输入从 lsusb -vvv hla_serial 123456789012334 获得的数字
标签: debugging arm gdb stm32 openocd