1 资源
- 1)OpenOCD 官网:https://openocd.org/
2)源码仓库:
- 3)OpenOCD Windows 发行版本下载:https://gnutoolchains.com/arm-eabi/openocd/
4)Windows 下编译 OpenOCD 参考:
2 MSYS2 安装
- 虽然官方说在 Windows 系统上使用 Cygwin、MinGW、MSYS2 都可以编译,但对我自己来说,只有在 MSYS2 上编译成功了。
2.1 MSYS2 介绍
1)MSYS2 介绍:
- 参考:https://blog.csdn.net/qq_36525177/article/details/115279468
- (1)Cygwin:根据将部分 Posix 调用转换成 Windows 的 API 调用,Cygwin 成为运行于 Windows 平台的 “POSIX 子系统”。
- (2)MinGW:取消了 Cygwin 的兼容层,直接调用 Windows API,因此它具有简单性和优异性能,但也缺少了某些 POSIX 功能。MinGW-w64 支持 64 位 Windows 系统。
- (3)MSYS:Minimal SYStem,在 Shell 中调用 MinGW 提供的工具。MSYS 只提供最基本的 POSIX API,兼容性较 Cygwin 差,但胜在轻量和执行效率。MSYS2 是其升级版。
2.2 MSYS2 安装与配置
- 1)官方安装教程:https://www.msys2.org/
2)安装结果:
3)修改镜像源:
vim /etc/pacman.d/mirrorlist.mingw32 # 打开该文件,添加: Server = https://mirrors.tuna.tsinghua.edu/msys2/mingw/i686/ vim /etc/pacman.d/mirrorlist.mingw64 # 打开该文件,添加: https://mirrors.tuna.tsinghua.edu.cn/msys2/mingw/x86_64/ vim /etc/pacman.d/mirrorlist.msys # 打开该文件,添加: https://mirrors.tuna.tsinghua.edu.cn/msys2/msys/$arch
4)选择 “MSYS2 MINGW64” 打开,安装编译 OpenOCD 的依赖:
# 更新系统文件 pacman -Syuu # 安装依赖关系 pacman -S libtool autoconf automake texinfo pkg-config make autogen git unzip bzip2 base-devel mingw-w64-x86_64-toolchain mingw-w64-x86_64-libusb mingw-w64-x86_64-libusb-compat-git mingw-w64-x86_64-hidapi mingw-w64-x86_64-libftdi mingw-w64-x86_64-arm-none-eabi-gcc mingw-w64-x86_64-capstone
3 编译 OpenOCD
3.1 下载 OpenOCD 源码
# 克隆代码
git clone https://git.code.sf.net/p/openocd/code openocd
# 克隆指定版本的代码
# git clone -b 2.20.3 --depth=1 https://git.code.sf.net/p/openocd/code openocd
# 进入目录
cd openocd
# OpenOCD,启动
./bootstrap
3.2 配置 OpenOCD
- 1)这里的 “--enable-ftdi” 对于我这里使用 CMSIS-DAP 来说是必须的,百度了一下好像是跟 USB 相关的东西。
mkdir openocd-clion-build
cd openocd-clion-build
../configure --enable-ftdi
2)编译目录可以选择成其它名称,我这里主要是为了用 CLion 打开源码时,项目名称能清晰明了点才这样命名的。至于为什么要在 CLion 中而不是 VSCode 中打开源码,主要是为了可以在下面这种情况时直接跳转:
retval = target->type->run_algorithm(target, num_mem_params, mem_params, num_reg_params, reg_param, entry_point, exit_point, timeout_ms, arch_info);
3.3 编译 OpenOCD
1)编译
# 编译与安装 make -j4 && make install # 查看编译后 openocd.exe 位置 whereis openocd # openocd: /mingw64/bin/openocd.exe # 查看编译 openocd 相关配置文件位置 find / -name openocd # /mingw64/share/openocd
2)开发驱动过程中可能需要频繁地编译测试,毕竟 15 年的代码,编译时间有点久。不过我发现有一个可以优化的地方:OpenOCD 支持的芯片越多,对应的配置文件也越多,每次 make install 时会拷贝大量的配置文件。所以我们修改 openocd-clion-build/Makefile 文件(大概 1500 行左右):
# command to find paths of script files, relative to TCL_PATH # TCL_FILES = find $(srcdir)/(TCL_PATH) -name '*.cfg' -o -name '*.tcl' -o -name '*.txt' | \ sed -e 's,^$(srcdir)/$(TCL_PATH),,' TCL_FILES = find $(srcdir)/(TCL_PATH) -name '*air*.cfg' -o -name '*.tcl' -o -name '*.txt' | \ sed -e 's,^$(srcdir)/$(TCL_PATH),,'
- 我这里的配置文件一般命名为 air105.cfg、air001.cfg,airm2m_air105.cfg 等等,所以上述的 find 命令的 -name 选项修改一下,只复制要用的文件即可。(当然为防止编译出错,首次编译时不要修改该文件)
3.4 打包
- 1)将下方的内容复制到 openocd-pack.sh 文件中,然后命令行执行 “sh openocd-pack.sh” 即可生成一个 openocd-0.12.0-rc.zip 压缩包。
#! /bin/bash
OBJ_DIR=openocd-0.12.0-rc
rm -rf ${OBJ_DIR}
mkdir ${OBJ_DIR}
mkdir ${OBJ_DIR}/bin
mkdir ${OBJ_DIR}/share
# 复制主程序
cp /mingw64/bin/openocd.exe ${OBJ_DIR}/bin/
# 复制一些依赖 DLL 文件
cp /mingw64/bin/libcapstone.dll ${OBJ_DIR}/bin/
cp /mingw64/bin/libftdi1.dll ${OBJ_DIR}/bin/
cp /mingw64/bin/libhidapi-0.dll ${OBJ_DIR}/bin/
cp /mingw64/bin/libusb-1.0.dll ${OBJ_DIR}/bin/
# 复制配置文件
cp /mingw64/share/openocd ${OBJ_DIR}/share/ -r
# 打 zip 包
zip -r ${OBJ_DIR}.zip ${OBJ_DIR}/
- 2)将 openocd-0.12.0-rc.zip 解压到指定目录,然后将该目录添加到环境变量中即可使用 OpenOCD。
4 附录1:CLion 打开源码
1)首先需要生成 Makefile 文件,因为要在 CLion 中将 OpenOCD 作为 Makefile 项目打开。源码根目录下直接输入命令:
./bootstrap ./configure --eable-ftdi # 也可以先创建 openocd-clion-build 目录,然后, cd openocd-clion-build ../configure --eable-ftdi
- 建议先创建 openocd-clion-build 目录,然后在该目录中进行编译。否则编译的中间文件将生成在源码目录中,非常影响观感。
- 2)使用 CLion 找到根目录下的 Makefile,并作为 “项目” 打开
3)打开 CLion 的 Settings -> Build, Execution, Deployment -> Makefile,如下配置:
- 以上三个地方的内容要清空。
- 4)我们使用 CLion 只是为了编写驱动方便,实际编译还是在 MSYS2 中进行的。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。