build openocd on win10 + mysys2-mingw64

文章目录

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中的方法没有错,可用,也很好用。

END

相关推荐
-水火-18 天前
【IDE】Linux下使用openocd烧录bin文件
linux·ide·openocd·bin
硬汉嵌入式21 天前
H7-TOOL高速DAPLINK使用pyOCD命令行操作说明
openocd·hid·pyocd·h7-tool·daplink·winusb
nh752710 个月前
(五)FT2232HL高速调试器之--三步实现STM32的VSCODE在线仿真工程搭建
ide·vscode·编辑器·openocd
CodingCos2 年前
【ARM Coresight OpenOCD 系列 1 -- OpenOCD 介绍】
arm开发·openocd