本帖最后由 cx1524 于 2024-1-26 11:24 编辑
# 向openocd添加新设备——以APM32F035为例
## 序言 在项目中需要用到openocd对APM32F035进行烧录,但openocd暂没有APM32F035的官方支持,因此需要向openocd中添加新设备APM32F035,,在查阅资料后整理出了一份在openocd上适配新设备的方法并在此记录。我对openocd了解尚浅,故望在此抛砖引玉,文中如有错误的地方,还望各位大佬斧正。
向openocd中添加新设备需要重新对openocd进行编译,我采用的是Linux交叉编译的方式进行Windows版本openocd程序编译。openocd的编译流程已在其官方的Readme文档中给出了详细的指示,我在此仅是简述其流程,其官方文档地址为:https://github.com/openocd-org/openocd/blob/master/README
## 搞定编译环境
在Linux上编译openocd需要先安装以下依赖:
- autoconf
- automake
- git
- libtool
- make
- mingw-w64
- pkg-config
- texinfo
以 Ubuntu 为例,使用以下命令安装所需依赖:
sudo apt update
sudo apt install autoconf automake git libtool make minge-w64 pkg-congig texinfo
同时, 为了支持调试接口CMSIS-DAP, 还会使用到libusb和hidapi的动态库, 这两个动态库可以通过编译它们的源码获得。
先用git拉取openocd、libusb和hidapi的源码:
mkdir Build
cd Build
mkdir Source
cd Source
git clone https://github.com/libusb/libusb.git libusb
git clone https://github.com/libusb/hidapi.git hidapi
git clone git://git.code.sf.net/p/openocd/code openocd
编译libusb,并将安装路径定为 ${HOME}/Build/libusb(可以在用户根目录下找到该文件夹)
./bootstrap.sh
./configure --prefix=${HOME}/Build/libusb --host=i686-w64-mingw32
make -j4
make install
安装完成后可在${HOME}/Build/libusb/bin/目录下找到libusb.dll文件
编译hidapi:
./bootstrap
./configure --prefix=${HOME}/Build/hidapi --host=i686-w64-mingw32
make -j4
make install
安装完成后可在${HOME}/Build/hidapi/bin/目录下找到hidapi.dll文件
> 在编译apihid-10.1时, 可能需要删除configure.ac中的第16行宏检查, 在autoconf2.7后`AC_CONFIG_MACRO_DIR([m4])`只能调用一次
## 编译openocd
在openocd中添加新设备, 需要进行以下步骤:
- 向~/src/flash/nor/中添加flash.c文件表示Flash的下载方式;
- 向~/src/flash/nor/drivers.h中全局声明flash;
- 向~/src/flash/nor/drivers.c中添加flash;
- 向~/src/flash/nor/Makefile.am中增加对flash的编译;
- 向~/tcl/target/中添加芯片的cfg文件。
flash文件一般都会写成某种类型的通用形式,多种设备可以使用一个flash文件,针对flash的声明与添加与编译同理。(可参考stm32f1x.c与stm32f2x.c进行改写,或直接使用它们)
> 如果直接复用stm32f1x.c或stm32f2x.c,则可跳过上述步骤1、2、3、4
搞定源文件与cfg文件,就可以开始编译openocd了,这里采用的是原生编译方式:
cd到openocd目录下,然后
./bootstrap
./configure --prefix=${HOME}/Build/openocd --host=i686-w64-mingw32
make -j4
make install
编译完成就可以在${HOME}/Build/openocd/bin/中找到openocd.exe文件。
因为需要支持CMSIS-DAP,还需要将libusb-1.0和hidapi的dll文件复制进openocd的bin目录中
cp ${HOME}/Build/libusb/bin/libusb-1.0.dll ${HOME}/Build/openocd/bin
cp ${HOME}/Build/hidapi/bin/libhidapi-0.dll ${HOME}/Build/openocd/bin
完成后进行tar打包,
tar -vcf openocd.tar ${HOME}/Build/openocd
gzip openocd.tar
至此openocd编译完成,可以将压缩得到的openocd.tar.gz复制进Windows环境下测试了。
|