参考:
Connect gdb to ip instead of localhost to debug from WSL2
在linux下搭建STM32的开发环境,通常会用到 openocd 去连接到外部的调试器,如 J-Link,CMSIS-DAP,再提供网路端口给gdb。但由于现阶段 WSL2 访问外部的 USB 设备会存在不足,且WSL2 默认采用了一个NAT网络,如果想要把 WSL2 中的服务直接暴露出来,就不得不考虑做端口转发等问题。
但是 WSL2 给我们留了一条后路,那就是允许在 WSL 里执行 .exe 文件。
下载文首 "参考" 项中的 openocd-org 的 openocd 工具,见图1,这里是第一个,我们将其下载到 windows 电脑上。解压后在源文件 bin 目录下会存在 openocd.exe 文件,为了方便,我们将其路径加入到 windows 的环境变量中。加入成功后,无论在 PowersShell 还是 WSL2 中,都可以快捷 tab 得到 openocd.exe 的工具。
图1
关于 openocd 如何去连接外部调试器,详见文首 "参考" 项的 "linux下STM32开发环境的搭建" 一文。按照文中关于 opeocd 去连接外部调试器的操作,实验使用图1中的 openocd.exe 是可以正常连接到外部调试器,我这里用的是 CMSIS-DAP,如图2。
图2
但是,在 WSL2 中使用 gdb 去连接图2所示的 3333 端口时,会连接不上,提示超时失败,见图3。关于 gdb 的简单介绍和使用,详见文首 "参考" 项的 "linux下STM32开发环境的搭建" 一文。
图3
见图3,这里为什么是 172.31.192.1,这个得在 WSL2 下查看 /etc/resolv.conf 文件,里面的 nameserver 变量记载的就是 WSL2 的 DNS 客户机配置 IP。这个也是我们需要在 gdb 连接 openocd 提供端口时所使用到的 IP,见图4。
图4
回到图3,解决 WSL2 下 gdb 因连接超时连接不上的办法可以详见文首 "参考" 项的 "Connect gdb to ip instead of localhost to debug from WSL2"。这里只提取并记录下解决办法,如图5,在使用openocd时加上 -c "bindto 0.0.0.0"。
图5
再按照图3所示操作使用 gdb 去连接目标板就可以正常连接,且实验调试正常,见图6。
图6