1. openocd 是什么

​ openocd 是一个运行在 pc 机上开源的嵌入式调试软件,几乎统一了各大主流调试器,如 st-link、jlinlk、daplink 等等,一般芯片厂商都会原生选择 openocd 作为自己芯片的调试软件,然后配合自己芯片的调试器做到对芯片的调试能力。

2. 背景

​ 一般的开源项目都是在 linux 环境下开发的,可以在 linux 环境下安装相关依赖后,直接从源码编译为可执行文件使用,linux 的可执行文件为 elf 格式,而 windows 为 exe,这对 windows 环境就很不友好了,如果项目中需要修改源码,并且想在 windows 环境下使用,就必须使用 linux 的环境来编译出能在 windows 环境下使用的可执行文件 exe。

3. 可行性

​ 以上需求可通过 windows 环境下安装 Msys2 来在 win 下模拟一个 linux 环境,通过 Msys2 下的 pacman 工具可以很方便的安装各种依赖工具。也可以直接在 linux 环境下交叉编译出 exe。本文章采用后者,在 linux 下编译出 windows 版本的 openocd。通过这样的方式,让我们对开源软件以及 linux 环境进一步的理解。

4. 环境搭建

  1. 由于需要在 linux 上编译出能在 windows 环境下运行的软件,那么交叉编译工具链是必不可少的。由于 windows 下的集成开发环境已经帮我们做好了项目管理,通过点击按钮就能一键编译,而 linux 下则需要使用各种工具来构建整个项目,相关工具使用以下命令安装即可:

    apt-get install -y make
    apt-get install -y autoconf
    apt-get install -y pkg-config
    apt-get install -y automake
    apt-get install -y texinfo
    apt-get install -y mingw-w64
    apt-get install -y libtool
    
  2. 拉取源码
    由于 openocd 是运行在 pc 上的软件,想要与调试器通信,必须使用物理导线与 pc 连接,一般使用 usb 线,因此 openocd 需要依赖 usb 相关源码

    git clone https://github.com/openocd-org/openocd.git //拉取 openocd 源码
    git clone https://github.com/libusb/libusb.git // 拉取 libusb 源码
    git clone https://github.com/libusb/hidapi.git // 拉取 hidapi 源码
    

5. 交叉编译源码

  1. 交叉编译 libusb

    mkdir /usr/local/my_app/libusb
    ./bootstrap.sh
    ./configure --prefix=/usr/local/my_app/libusb --host=i686-w64-mingw32
    make -j4
    sudo make install
    

    可以通过 ./configure 文件根据输入的参数生成 makefile,在这一步骤指定软件的编译环境、运行环境。通过 ./configure --help 查看配置项信息,如下:
    这是我们需要关心的配置项,这里设置为安装的交叉编译工具链前缀 i686-w64-mingw32,在生成 Makefile 中会将编译器换为指定的编译器,如下
    上述成功后可到 /usr/local/my_app/libusb/bin 中查看 windows 下的 usb 动态库文件 .dll

  2. 交叉编译 hidapi

    同上即可

  3. 交叉编译 openocd

    导出环境变量,仅在当前 shell 中有效
    export LIBUSB1_CFLAGS="$LIBUSB1_CFLAGS -I/usr/local/libusb/include/libusb-1.0"
    export LIBUSB1_LIBS="$LIBUSB1_LIBS -L/usr/local/libusb/lib -lusb-1.0"
    export HIDAPI_CFLAGS="$HIDAPI_CFLAGS -I/usr/local/hidapi/include/hidapi"
    export HIDAPI_LIBS="$HIDAPI_LIBS -L/usr/local/hidapi/lib -lhidapi"./bootstrap
    mkdir /usr/local/my_app/openocd_win
    ./configure --enable-stlink --enable-jlink --enable-cmsis-dap --enable-cmsis-dap-v2 --prefix=/usr/local/openocd/ --host=i686-w64-mingw32 // 配置参数
    make -j4
    sudo make install
    

    同样 输入 ./configure --help 查看配置项,将上述 4个 路径导出到环境变量的目的是为了将这些路径添加到在生成的 Makefile 中,同样可通过如下配置项中选择:
    ./configure 之后,可以查看 makefile 是否配成了想要的配置,先查看编译工具链是否配置正确,如下:
    然后,查找 usb 库路径是否是我们交叉编译出来的路径,如下:
    然后执行 make -j4、sudo make install 安装即可

6. 验证

  1. 进入到 openocd 安装目录的 bin 文件下,可以看到成功生成了 exe,如下:
    ​ 可以看出,确实是 windows 环境下的软件。将 usb 动态库与 openocd 拿到 win 环境下即可,在 powershell 中执行该软件:

交叉编译 openocd相关推荐

  1. openocd目录_OpenOCD的调试

    Openocd的调试步骤 1.前言 本文档仅用于学习参考.对本文档作者保留所有权利. 联系邮箱:yarakyoung@qq.com 2.工具 本文使用的软.硬件工具如下: 目标开发板:ST SPEAr ...

  2. jlink怎么调试linux程序_【转】ubuntu linux下openocd + gdb-insight 用Jlink调试arm程序

    openocd版本为svn 1214,insight版本为6.8 开发环境为ubuntu-8.04 包都升级到最新.2008.12.8 板子为自己设计的LPC2294的板子,BANK0 为SST39V ...

  3. RISC-V GNU Toolchain及交叉编译

    交叉编译 想要理解riscv gnu Toolchain的作用,首先要了解交叉编译的概念.我们平时常见的架构有Intel的X86架构.龙芯处理器的MIPS架构.苹果A系列处理器的ARM架构等. 交叉编 ...

  4. HUAWEI 擎云L420 折腾记 (搭建arm gcc、openocd 雅特力 MCU开发环境)

    HUAWEI 擎云L420 折腾记 前言 1. java 环境 2. python 3. C++/C 4. arm-gcc-none-eabi mcu开发 5. 雅特力修改的atlink版 openo ...

  5. OpenOCD的调试

    1.工具 本文使用的软.硬件工具如下: 目标开发板:ST SPEAr310 EVB 2.0 (官网www.st.com)及其交叉编译环境. 仿真器:OpenJTAG(官网www.100ask.net) ...

  6. Ubuntu 环境下交叉编译运行正点原子的程序

    Ubuntu 环境下交叉编译运行正点原子的程序 在校学生,求职过程中对方要求在Ubuntu环境下交叉编译stm32的程序,我觉得很有意思,因为之前就听说过可以在Linux环境下运行stm32的程序,因 ...

  7. OpenOCD 通过 JTAG 调试树莓派

    硬件环境 Linux 主机 + JLink v8 + 树莓派 OpenOCD 简介 OpenOCD(Open On-Chip Debugger)开源片上调试器,是一款开源软件,旨在提供针对嵌入式设备的 ...

  8. Golang的交叉编译问题

    参考:Golang交叉编译各个平台的二进制文件 - Go语言中文网 - Golang中文社区 (studygolang.com).也谈Go的可移植性 | Tony Bai 今天准备将一个在Mac上开发 ...

  9. Linux 交叉编译简介

    Linux 交叉编译简介 主机,目标,交叉编译器 主机与目标 编译器是将源代码转换为可执行代码的程序.像所有程序一样,编译器运行在特定类型的计算机上,输出的新程序也运行在特定类型的计算机上. 运行编译 ...

最新文章

  1. OPENCV计算图片间转换关系
  2. frame,iframe,frameset用法和区别
  3. nodejs linux 32位下载安装,Linux32位怎么装nodejs?
  4. win2003 IIS6,能访问html页 但是不能访问aspx页解决办法汇总
  5. 利用Sqoop将MySQL海量测试数据导入HDFS和HBase
  6. 简单理解Tomasulo算法与重加载缓冲区
  7. springboot---mybits整合
  8. 【西安石油大学主办|IEEE CPS出版】2020智能控制、测量与信号处理国际学术会议诚邀您投稿参会!...
  9. 史上最拉风年货?苏宁门店私人飞机开售 网友:这个真香不了吧
  10. 在 GitHub 上创建一个 Swift 包:其实一点也不简单
  11. Java和python哪个好,学哪个有用。
  12. 生信-使用NCBI进行目的基因的引物设计
  13. MATLAB中simulink的模糊PID控制
  14. Webots舵轮使用纯追踪算法
  15. 「Thymeleaf页面在浏览器加载不出来」
  16. POI 自定义16进制颜色导出
  17. 二叉树任意两点间最短路径(利用栈-找公共祖先,不需要建立二叉树)
  18. 通九省,枢纽之地...
  19. C/C++中,数组作为函数参数传入
  20. XXX高校信息安全服务解决方案

热门文章

  1. Tyk-Hybrid模式安装—抽象方法论,重用它
  2. 什么是IATF16949体系
  3. 基于最大相关最小冗余的特征选择方法MRMR
  4. 魔都私人定制轰趴-云端少女住在云顶别墅
  5. 友盟微信登录失败Unable to find explicit activity class
  6. laravel foreach循环
  7. 5G R18在讲些什么?
  8. 算法工程师 面试题与解答
  9. python翻转函数_Python翻转单词顺序
  10. git更换远程仓库步骤