文章目录
-
- [build openocd on win10 + mysys2-mingw64](#build openocd on win10 + mysys2-mingw64)
- 概述
- 笔记
- 切到最后的发布分支
- 用mysys2-mingw64编译
- 将makefile工程导入EclipseCPP进行单步调试
- 修改工具链条
- 单步调试
- 备注
- 备注
- END
build openocd on win10 + mysys2-mingw64
概述
编译一个openocd的发布分支的代码,观摩一下。
笔记
切到最后的发布分支
先将代码切到当前最新的发布分支 v0.12.0-rc3
bash
git reset --hard HEAD
git clean -fdx
git fetch --all
git pull origin master
git status
再从迁出的v0.12.0-rc3分支建立新分支my_v0.12.0-rc3
bash
这部分都用sourcetree来操作
在v0.12.0-rc3右击,选择迁出,点击"是"
在从当前分支上建立新分支 my_v0.12.0-rc3
用mysys2-mingw64编译
如果运行./configrue,是没有这个命令的。
需要先安装这些工具
bash
pacman -S mingw-w64-x86_64-toolchain autoconf automake pkg-config make
pacman -S git gcc libtool
pacman -Ss libusb
pacman -Ss hidapi
pacman -S mingw-w64-x86_64-libusb mingw-w64-x86_64-hidapi
装好开发工具后,就可以编译了。
bash
./bootstrap
./configure --help // 查看可以enable的选项
// 根据自己的需要,填写configure的合规参数
./configure --enable-static=yes --enable-shared=no --enable-verbose --disable-werror --enable-doxygen-pdf --enable-stlink --enable-cmsis-dap-v2 --enable-cmsis-dap --enable-jlink --host=x86_64-w64-mingw32
将makefile 中的编译选项改为可调试
CFLAGS = -g -O0
将 C:\msys64\usr\bin 加入360木马查杀的信任区
make clean
make all
编译完成后, 生成./src/openocd.exe
将makefile工程导入EclipseCPP进行单步调试
打开EclipseCPP(D:\tools\eclipse\eclipse-embedcpp-2025-09-R-win32-x86_64\eclipse\eclipse.exe)
开一个空的工作区来实验。

导入工程


将makefile的工程目录选好就行,工具链选为MinGW GCC。

修改工具链条
openocd makefile原始编译时, 用的mysys2-mingw64.
在EclipseCPP中,工具链要改成一样的,否则编译效果和原始工程不一样。
在配置之间,可以先build工程,看控制台的提示,可以知道,是没有配置工具链

所以,要去配置工具链。
配置时,有个先后顺序,且必须要自己重新选一下mingw gcc工具链,即使显示的是mingw gcc工具链,也要重新选一下工具链,否则有些选项是灰的,不能勾选。

默认的这2个勾,是灰的,不能勾选!
要去重新选择一下工具链,将builer选为 "Autotools Makefile Generator"!

去环境页去确认一下mysys2-mingw64的路径是否正确。
如果path中没有或者不同我们本地装的mysys2-mingw64环境路径,需要自己修正成本地实际的mysys2-mingw64环境的路径。
如果不确定mysys2-mingw64装在哪里了,可以用编译时的mysys2-mingw64的命令行看一下。


现在再去看"C/C++ Build"页

将"使用默认的build command"和"自动产生Makefiles"的勾去掉,应用。
如果这2个勾不去掉,是无法使用makefile工程自己的makefile的!
现在就可以正常编译了
配好工具链之后,在EclipseCPP中的编译效果和mysys2-mingw64命令行中编译makefile的效果相同。
尝试编译一下。


因为工程我已经在mysys2-mingw64的命令行下编译过了,并没有变化,所以直接就编译过了。
但是,从提示信息看,已经走的是openocd工程的makefile.
单步调试

这个openocd的makefile工程,编译出的是./src/openocd.exe, 是个上位机程序。
就当作普通的C/C++程序来调试。


正式调试学习时,openocd启动时,要从命令行指定调试器配置文件和板子的MCU配置文件。如果是正式调试,可以填一下。
这里先不指定,就先试一下,能否进入编译好的openocd工程进行单步调试。


点击"debug", 就能开始调试了。
在调试开始后,可以看到make会先调用工程自己的makefile, 对工程编译一下。如果没配置工具链,过了这里就停了,不会再去调试。
所以,makefile工程导入EclipseCpp后,必须先将工具链配置好!

IDE提示,是否要切到调试界面,选择"切换"。
稍等一下,就可以进入源码调试了。
因为我们勾选了,调试开始后,停在main()入口。
所以,现在是在main()入口处断下来了。

现在就可以愉快的按F5/F6调试了。
尝试走几步。

单步调试没问题。
因为我们现在是在测试,没有指定openocd的命令行选项,最后会失败的。我们看一下,没几步。
如果要看程序的输出,在"调试控制台"中看,而不是在"控制台"


现在已经运行到main()的尾部上了,初步调试结束。
备注
头一次发现,EclipseCPP调试makefile工程这么好用。
以后如果想调试makefile工程,不用使用gdb, 而是导入EclipseCPP中,用图形化界面来单步调试和学习,美美的 😛
如果是调试固件工程,遇到了固件工程生成的elf有问题,或者openocd参数不知道怎么给定,还可以开2个EclipseCPP, 一个开openocd工程,一个开固件工程(固件工程调试时,不要选启动启动openocd). 那么固件工程开始调试后,连的就是我们在eclipseCPP中开的openocd工程,那就可以断下来本地socket通讯的处理, 看一下openocd怎么处理elf, 怎么响应openocd参数,如果固件工程给的东西不对,通过单步调试openocd工程,也能知道为啥不对.
固件工程的makefile工程导入EclipseCPP进行调试,已经做了笔记(debug - eclipseCPP + openocd + 引入arm-gcc makefile工程来单步调试).
备注
这个版本的编译参数编译出来的openocd.exe, 在带参数运行时,会崩溃。单步跟踪,发现是命令行参数给入后,分析命令行后,有空指针赋值。编译时,有85个警告。
但是这种导入上位机的makefile工程到eclipseCPP中的方法没有错,可用,也很好用。