1
头图

1 资源

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 中进行的。

送南阳马生序
7 声望3 粉丝

余之业有不精、德有不成,非天质之卑,则心不若他之专耳,岂他人之过哉!