如何在Windows环境下编译OpenOCD

1. 安装Cygwin

Windows环境下编译OpenOCD可以是在MinGW-w64/MSYS或Cygwin下,这里选择Cygwin,下载安装Cygwin。

2. 进入OpenOCD源代码目录

打开Cygwin,进入OpenOCD源代码目录,例如代码放在D:\Temp\OpenOCD\openocd-code下,在Cygwin中的路径如下:

/cygdrive/d/Temp/OpenOCD/openocd-code

3. 执行bootstrap

先要安装dos2unix工具包,重新点击Cygwin安装包,点击dos2unix安装这个工具包。

执行./bootstrap,提示:

./bootstrap: Error: libtool is required

 和安装dos2unix的方式一样安装libtool。

继续提示错误,安装automake(选没版本号的那个)

./bootstrap: line 29: aclocal: command not found

继续提示错误,安装pkg-config。

 It is usually defined in file pkg.m4 provided by package pkg-config.
configure.ac:32: the top level
autom4te-2.71: error: /usr/bin/m4 failed with exit status: 1
aclocal-1.16: error: autom4te failed with exit status: 1

接下来可能会因为网络问题失败,多试几次。

提示错误:

Submodule path 'src/jtag/drivers/libjaylink': checked out '0d23921a05d5d427332a1
42d154c213d0c306eb1'
./autogen.sh: line 20: $'\r': command not found
./autogen.sh: line 23: $'\r': command not found
./autogen.sh: line 35: syntax error: unexpected end of file

将autogen.sh转换一下:

dos2unix src/jtag/drivers/libjaylink/autogen.sh

提示错误:

libtoolize: putting auxiliary files in AC_CONFIG_AUX_DIR, 'build-aux'.
libtoolize: copying file 'build-aux/config.guess'
libtoolize: copying file 'build-aux/config.sub'
libtoolize: copying file 'build-aux/install-sh'
libtoolize: copying file 'build-aux/ltmain.sh'
libtoolize:   error: AC_CONFIG_MACRO_DIRS([m4]) conflicts with ACLOCAL_AMFLAGS=-. m4

仍然是因为格式的问题,将这个文件夹内的文件都用dos2unix转换一下。

find . -name \*.sh|xargs dos2unix
find . -name \*.m4|xargs dos2unix
find . -name \*.ac|xargs dos2unix
find . -name \*.am|xargs dos2unix

如果类似libjaylink无法从网络上下载下来,可以通过gitee下载(无效): 

可以编辑文件.gitmodules,将对应url改为gitee的路径,例如:

url = https://gitlab.zapb.de/libjaylink/libjaylink.git

改为:

url = https://gitee.com/sma365ffffff/libjaylink.git

4. 执行configure

执行

./configure

提示缺失gcc等编译器

checking for gcc... no
checking for cc... no
checking for cl.exe... no
checking for clang... no

和前面的方式一样,安装gcc-g++

  • 提示警告:
configure: WARNING: libusb-1.x not found, trying legacy libusb-0.1 as a fallback; consider installing libusb-1.x instead

安装libusb

  • 提示错误:
config.status: error: Something went wrong bootstrapping makefile fragmentsfor automatic dependency tracking.  If GNU make was not used, considerre-running the configure script with MAKE="gmake" (or whatever isnecessary).  You can also try re-running configure with the'--disable-dependency-tracking' option to at least be able to buildthe package (albeit without support for automatic dependency tracking).
See `config.log' for more details

安装make(安装这个最好重启一下cygwin)

  • 提示缺少库
checking for libftdi1... no
checking for libftdi... no

 安装libftdi1

安装libhidapi 

  • 提示错误:
configure: running /bin/sh ./configure.gnu --disable-option-checking '--prefix=/usr/local'  --cache-file=/dev/null --srcdir=.
/cygdrive/d/Temp/OpenOCD/openocd-code/jimtcl/configure: line 4: /cygdrive/d/Temp/autosetup-find-tclsh: No such file or directory
/cygdrive/d/Temp/OpenOCD/openocd-code/jimtcl/configure: line 4: exec: : not found
configure: error: ./configure.gnu failed for jimtcl

安装tcsh,  tcl-devel

安装autoconf

安装texinfo

安装gcc-objc

修改jimctl文件夹下configure

#!/bin/sh
dir="`dirname "$0"`/autosetup"
echo $dir
#@@INITCHECK@@#
#WRAPPER="$0"; export WRAPPER; exec "`"$dir/autosetup-find-tclsh"`" "$dir/autosetup" "$@"
WRAPPER="$0"; export WRAPPER; exec "./autosetup/autosetup-find-tclsh" "autosetup" "$@"

在这个目录内直接运行./configure,可以看到又发生需要dos2unix的情况,改了后jimctl的configure可以运行了。

然后提示需要安装openssl,安装一个1.1.1w-1(原来有3.0.11版本)

还是提示没有找到ssl,看提示可能要下载源码编译,下载的网址如下:

https://www.openssl.org

下载3.x的版本(这个版本不可以)后Cygwin进对应的文件夹,执行:

./configure
make
make test
make install

在cygwin安装目录内usr\local\lib\pkgconfig,将2个pc文件(libssl.pc和openssl.pc)拷贝到\lib\pkgconfig,将2个库文件拷贝到lib\下,结果提示unusable。

下载1.1.1w重来一遍。

./config
make
make test
make install

其中make test应该可以不需要。 

同样手动拷贝一下文件。

最后的结果:

OpenOCD configuration summary
--------------------------------------------------
MPSSE mode of FTDI based devices        yes (auto)
ST-Link Programmer                      yes (auto)
TI ICDI JTAG Programmer                 yes (auto)
Keil ULINK JTAG Programmer              yes (auto)
Altera USB-Blaster II Compatible        yes (auto)
Bitbang mode of FT232R based devices    yes (auto)
Versaloon-Link JTAG Programmer          yes (auto)
TI XDS110 Debug Probe                   yes (auto)
CMSIS-DAP v2 Compliant Debugger         yes (auto)
OSBDM (JTAG only) Programmer            yes (auto)
eStick/opendous JTAG Programmer         yes (auto)
Olimex ARM-JTAG-EW Programmer           yes (auto)
Raisonance RLink JTAG Programmer        yes (auto)
USBProg JTAG Programmer                 yes (auto)
Espressif JTAG Programmer               yes (auto)
CMSIS-DAP Compliant Debugger            yes (auto)
Nu-Link Programmer                      yes (auto)
Cypress KitProg Programmer              yes (auto)
Altera USB-Blaster Compatible           yes (auto)
ASIX Presto Adapter                     yes (auto)
OpenJTAG Adapter                        yes (auto)
Linux GPIO bitbang through libgpiod     no
SEGGER J-Link Programmer                no
Bus Pirate                              yes (auto)
Use Capstone disassembly framework      no

可以看到编译出来的有3个不支持,特别是不支持J-Link。其实就是缺3个库:

checking for capstone... no
checking for libgpiod... no
checking for libjaylink >= 0.2... no

5. libjaylink

如果下载libjaylink失败,可以直接下载libjaylink源码:

GitHub - syntacore/libjaylink: Just a working copy of http://repo.or.cz/r/libjaylink.giticon-default.png?t=N7T8https://github.com/syntacore/libjaylink

PS:如果github上下载不下来,可以通过gitee下载。 

cygwin中进入下载的目录内,执行:

dos2unix autogen.sh
./autogen.sh

同样因为格式的问题,将这个文件夹内的文件都用dos2unix转换一下。

find . -name \*.sh|xargs dos2unix
find . -name \*.m4|xargs dos2unix
find . -name \*.ac|xargs dos2unix
find . -name \*.am|xargs dos2unix

运行:

./configure
make
make install

在cygwin安装目录内usr\local\lib\pkgconfig,将pc文件拷贝到\lib\pkgconfig,

将usr\local\lib下的三个库文件拷贝到lib\下

6. Capstone

下载capstone源码:

GitHub - capstone-engine/capstone: Capstone disassembly/disassembler framework for ARM, ARM64 (ARMv8), BPF, Ethereum VM, M68K, M680X, Mips, MOS65XX, PPC, RISC-V(rv32G/rv64G), SH, Sparc, SystemZ, TMS320C64X, TriCore, Webassembly, XCore and X86.

编译64位系统的lib(具体编译方式可以参考COMPILE.TXT里面的Compile from source部分)

./make.sh nix32

提示没有lgcc

cannot find -lgcc: No such file or directory

但是实际上有libgcc.a这个库,不确定哪里有问题。

7. make

执行make编译openocd即可

提示错误:

error: array subscript has type 'char' [-Werror=char-subscripts]

有可能是gcc版本的问题,这里修改一下文件\src\pld\efinix.c,找到提示错误的地方,改为

if (!isxdigit((unsigned char)buffer[0]) || !isxdigit((unsigned char)buffer[1]))

即buffer变量前加(unsigned char),后面会有一样的错误,照样改即可。

提示错误 :

/ld: ./jimtcl/libjim.a(jim-aio.o):jim-aio.c:(.text+0x37d): undefined reference to `SSL_get_peer_certificate'

不知道哪里的问题,猜测是SSL库版本的问题。先重新编译一次ssl

./config --prefix=/usr/local --openssldir=/etc/ssl --libdir=lib enable-ssl3 enable-ssl3-method enable-weak-ssl-ciphers -DOPENSSL_NO_GOST zlib shared
make clean
make 
make install

下载1.1.1o版本试试

Release OpenSSL_1_1_1o · openssl/openssl (github.com)

回到configure那里看一下jimctl配置错误时提示信息:

--disable-install-jim --with-ext=json --minimal --disable-ssl --disable-option-checking --prefix=/usr/local --cache-file=/dev/null --srcdir=.

看样子是要关闭ssl功能。

回到原来解决问题的地方,问题的核心是:

exec "`"$dir/autosetup-find-tclsh"`" "$dir/autosetup" "$@"

这一句在Linux里面是可行的,在Cygwin(或者Windows)下不可行。把dir加{}:

exec "`"${dir}/autosetup-find-tclsh"`" "${dir}/autosetup" "$@"

并且需要把这一行单独一行。

#!/bin/sh
dir="`dirname "$0"`/autosetup"
#@@INITCHECK@@#
WRAPPER="$0"; export WRAPPER; 
exec "`"${dir}/autosetup-find-tclsh"`" "${dir}/autosetup" "$@"

再次执行make应该可以编译通过了,在\src文件夹下可以找到编译生成的openocd.exe

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/730805.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

C++学习笔记:AVL树

AVL树 什么是AVL树?AVL树节点的定义AVL树的插入平衡因子调整旋转调整左旋转右旋转左右双旋右左双旋 AVL树完整代码实现 什么是AVL树? AVL是1962年,两位俄罗斯数学家G.M.Adelson-Velskii和E.M.Landis 为了解决如果数据有序或接近有序二叉搜索树将退化为单支树,查找…

限制员工上网行为,如何有效管控员工上网行为? 你一定想不到这个方法!

发现员工上班时间刷抖音: 面对这种情况,领导不得火冒三丈??? 对于员工不恰当的上网行为,非常有可能导致工作效率低下、安全风险增加以及企业形象受损。 因此应该采取一些措施来对员工上网行为进行管理。 …

第三节:在Sashulin中自定义组件

上一节讲解了如何建立一个业务消息流,流程是由组件构成的。目前SMS提供了General、Database、MessageQueue、Socket、WebService、Http、Internet等系列常用组件,如果不满足业务需求,可以进行自定义组件开发。 一、组件开发 1、建立一个Jar…

C及C++每日练习(3)

选择题&#xff1a; 1.以下程序的输出结果是&#xff08;&#xff09; #include <stdio.h> main() { char a[10] {1, 2, 3, 4, 5, 6, 7, 8, 9, 0}, *p; int i; i 8; p a i; printf("%s\n", p - 3); } A.6 B. 6789 C. 6 D.789 对于本题&#xff0…

吴恩达机器学习-可选实验室:特征工程和多项式回归(Feature Engineering and Polynomial Regression)

文章目录 目标工具特征工程和多项式回归概述多项式特征选择功能备用视图扩展功能复杂的功能 恭喜! 目标 在本实验中&#xff0c;你将:探索特征工程和多项式回归&#xff0c;它们允许您使用线性回归的机制来拟合非常复杂&#xff0c;甚至非常非线性的函数。 工具 您将利用在以…

2023最新pytorch安装教程,简单易懂,面向初学者(Anaconda+GPU)

一、前言 目前是2023.1.27,鉴于本人安装过程中踩得坑&#xff0c;安装之前我先给即将安装pytorch的各位提个醒&#xff0c;有以下几点需要注意 1.判断自己电脑是否有GPU 注意这点很重要&#xff0c;本教程面向有NVIDA显卡的电脑&#xff0c;如果你的电脑没有GPU或者使用AMD显…

STM32day3

1.思维导图 1.总结任务的调度算法&#xff0c;把实现代码再写一下 /* Definitions for myTask02 */ osThreadId_t myTask02Handle; uint32_t myTask02Buffer[ 64 ]; osStaticThreadDef_t myTask02ControlBlock; const osThreadAttr_t myTask02_attributes {.name "myTa…

代码随想录算法训练营第三十九天|62.不同路径、63. 不同路径 II

62.不同路径 刷题https://leetcode.cn/problems/unique-paths/description/文章讲解https://programmercarl.com/0062.%E4%B8%8D%E5%90%8C%E8%B7%AF%E5%BE%84.html视频讲解https://www.bilibili.com/video/BV1ve4y1x7Eu/?vd_sourceaf4853e80f89e28094a5fe1e220d9062 题解&…

react的diff源码

react 的 render 阶段&#xff0c;其中 begin 时会调用 reconcileChildren 函数&#xff0c; reconcileChildren 中做的事情就是 react 知名的 diff 过程 diff 算法介绍 react 的每次更新&#xff0c;都会将新的 ReactElement 内容与旧的 fiber 树作对比&#xff0c;比较出它们…

md5绕过

文章目录 \\和\\\md5数组绕过科学计数法绕过双md加密md5碰撞Hash长度攻击 下面会以同一道题给大家演示&#xff1a; (题目来源与nssctf) 和 在php代码中我们会看到和&#xff0c;虽然两个都是表示相等&#xff0c;但是在细节上会有所部区别 &#xff1a;是弱比较&#xff0c;只…

0201安装报错-hbase-大数据学习

1 基础环境简介 linux系统&#xff1a;centos&#xff0c;前置安装&#xff1a;jdk、hadoop、zookeeper&#xff0c;版本如下 软件版本描述centos7linux系统发行版jdk1.8java开发工具集hadoop2.10.0大数据生态基础组件zookeeper3.5.7分布式应用程序协调服务hbase2.4.11分布式…

Sora 作者被曝读博期间仅发表两篇论文,我们是否需要重塑科研价值观?

众所周知&#xff0c;在当今学术界&#xff0c;论文数量和产出速度常常被视为研究者生产力和学术成就的重要标尺。笔者也面试过很多博士生候选人&#xff0c;大家普遍会以自己读博期间发表过10几篇甚至几十篇论文而骄傲&#xff0c;很少有候选人会强调自己读博期间虽然发表论文…

Matlab|基于目标级联法的微网群多主体分布式优化调度

目录 主要内容 1.1 上层微网群模型 1.2 下层微网模型 部分程序 实现效果 下载链接 主要内容 本文复现《基于目标级联法的微网群多主体分布式优化调度》文献的目标级联部分&#xff0c; 建立微网群系统的两级递阶优化调度模型: 上层是微网群能量调度中心优化调度…

java中的字符串比较(题目作示例)

错误的代码 import java.util.Scanner; public class one {public static void main(String[] args) {Scanner scnew Scanner(System.in);String b"47568";int i0;for ( i 0; i <3; i){String asc.next();if(ab){System.out.println("密码正确&#xff0c;登…

在外包公司干了4年,技术退步2年...

先说情况&#xff0c;大专毕业&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近6年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

白话模电:1.绪论与半导体(考研面试常问问题)

一、什么是信号&#xff1f;什么是电信号&#xff1f; 信号反映消息的物理量&#xff0c;电信号是反应电压或电流变化的物理量。 二、什么是模拟信号&#xff1f;什么是数字信号&#xff1f; 模拟信号是时间和数值上均连续的信号&#xff0c;数字信号是时间和数值上均离散的信号…

[HackMyVM]靶场 Zeug

kali:192.168.56.104 主机发现 arp-scan -l # arp-scan -l Interface: eth0, type: EN10MB, MAC: 00:0c:29:d2:e0:49, IPv4: 192.168.56.104 Starting arp-scan 1.10.0 with 256 hosts (https://github.com/royhills/arp-scan) 192.168.56.1 0a:00:27:00:00:05 (Un…

Seata 2.x 系列【5】直接部署

有道无术&#xff0c;术尚可求&#xff0c;有术无道&#xff0c;止于术。 本系列Seata 版本 2.0.0 本系列Spring Boot 版本 3.2.0 本系列Spring Cloud 版本 2023.0.0 源码地址&#xff1a;https://gitee.com/pearl-organization/study-seata-demo 文章目录 1. 概述2. 环境要…

学习嵌入式C语言要掌握到什么程度?

学习嵌入式C语言要掌握到什么程度&#xff1f; 在开始前我分享下我的经历&#xff0c;我刚入行时遇到一个好公司和师父&#xff0c;给了我机会&#xff0c;一年时间从3k薪资涨到18k的&#xff0c; 我师父给了一些 电气工程师学习方法和资料&#xff0c;让我不断提升自己&#…

Java注解介绍

Java注解 注解介绍元注解RetentionTargetDocumentedInherited接口类测试结果 注解介绍 Java注解&#xff08;Annotation&#xff09;是一种元数据&#xff08;Metadata&#xff09;的形式&#xff0c;它可以被添加到Java代码中的类、方法、变量、参数等元素上&#xff0c;以提…