如何在Windows环境下编译OpenOCD

news2024/12/26 22:19:04

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 fragments
    for automatic dependency tracking.  If GNU make was not used, consider
    re-running the configure script with MAKE="gmake" (or whatever is
    necessary).  You can also try re-running configure with the
    '--disable-dependency-tracking' option to at least be able to build
    the 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.coloradmin.cn/o/1501079.html

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

相关文章

OpenHarmony教程指南-自定义通知推送

介绍 本示例主要展示了通知过滤回调管理的功能,使用ohos.notificationManager 接口,进行通知监听回调,决定应用通知是否发送。 效果预览 使用说明 1.在使用本应用时,需安装自定义通知角标应用; 2.在主界面&#xff…

【Web前端】Vue核心基础

文章目录 1. Vue简介2. Vue官网使用指南3. 初识Vue3.1 搭建Vue开发环境3.2 HelloWorld案例3.3 el与data的两种写法3.4 MVVM模型3.5 模板语法 4. 数据绑定4.1 v-bind单向数据绑定4.2 v-model双向数据绑定 5. 事件处理5.1 v-on绑定事件5.2 事件修饰符5.3 键盘事件 6. 计算属性6.1…

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

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

rabbitmq4

独占队列:我们的队列只能被当前通道所绑定,不能被其他的连接所绑定,如果有其他的通道或连接再使用此队列的话,会直接报错,一般设置为false: autoDelete:消费者在消费完队列,并且彻底…

[C语言]——分支和循环(4)

目录 一.随机数生成 1.rand 2.srand 3.time 4.设置随机数的范围 猜数字游戏实现 写⼀个猜数字游戏 游戏要求: (1)电脑自动生成1~100的随机数 (2)玩家猜数字,猜数字的过程中,根据猜测数据的⼤…

音视频学习笔记——c++多线程(一)

✊✊✊&#x1f308;大家好&#xff01;本篇文章主要整理了部分多线程相关的内容重点&#x1f607;。首先讲解了多进程和多线程并发的区别以及各自优缺点&#xff0c;之后讲解了Thead线程库的基本使用。 本专栏知识点是通过<零声教育>的音视频流媒体高级开发课程进行系统…

Linux grep

文章目录 1. 基本用法2.字符转义3.二进制文件查找4.打印目标字段的附近行4. 多条件过滤5. 目录中过滤——用于在文件夹中筛选/排除指定后缀文件6.反向过滤——用于筛选7.只输出匹配内容——用于统计8. 筛选出包含字段的文件9.正则匹配10.管道和grep11.grep和wc/uniq/sort的合用…

在Vue中处理接口返回的二进制图片数据

&#x1f31f; 前言 欢迎来到我的技术小宇宙&#xff01;&#x1f30c; 这里不仅是我记录技术点滴的后花园&#xff0c;也是我分享学习心得和项目经验的乐园。&#x1f4da; 无论你是技术小白还是资深大牛&#xff0c;这里总有一些内容能触动你的好奇心。&#x1f50d; &#x…

解决方案TypeError: string indices must be integers

文章目录 一、现象&#xff1a;二、解决方案 一、现象&#xff1a; PyTorch深度学习框架&#xff0c;运行bert-mini&#xff0c;本地环境是torch1.4-gpu&#xff0c;发现报错显示&#xff1a;TypeError: string indices must be integers 后面报字符问题&#xff0c;百度过找…

goby的安装和使用

简介 Goby是一款基于网络空间测绘技术的新一代网络安全工具&#xff0c;它通过给目标网络建立完整的资产知识库&#xff0c;进行网络安全事件应急与漏洞应急。 Goby可提供最全面的资产识别&#xff0c;目前预置了超过10万种规则识别引擎&#xff0c;能够针对硬件设备和软件业…

程序员常用的几种算法

程序员常用的几种算法 一、程序员算法汇总二、程序员常用的几种算法1.选择排序算法1.1 选择排序算法解析&#xff1a;1.2 示例代码&#xff1a; 2.插入排序算法2.1 插入排序算法解析&#xff1a;2.2 示例代码&#xff1a; 3.冒泡排序算法3.1 冒泡排序算法解析&#xff1a;3.2 示…

Go语言物联网开发安科瑞ADW300/4G电能表数据上传mqtt平台-电表接线到传输数据完整流程

电能表功能说明 ADW300是方便用户进行用电监测、集抄和管理&#xff0c;可灵活安装在配电箱中&#xff0c;可用于电力运维、环保监管等在线监测类平台中。我们本案例是用于工业售电公司对出售电的管理&#xff0c;设备可以监控用电情况、故障监控及警报&#xff0c;售电公司可…

解决 ucore lab3 无法触发 page fault 的问题

问题描述 完成清华大学操作系统实验课 ucore(x86) lab3 时&#xff0c;发现无法触发 page fault 异常&#xff0c;具体来说时 check_pgfault() 函数会在执行如下代码时报错 static void check_pgfault(void) {// ......uintptr_t addr 0x100;assert(find_vma(mm, addr) vma…

Chromium内核浏览器编译记(四)Linux版本CEF编译

转载请注明出处&#xff1a;https://blog.csdn.net/kong_gu_you_lan/article/details/136508294 本文出自 容华谢后的博客 0.写在前面 本篇文章是用来记录编译Linux版本CEF的步骤和踩过的坑&#xff0c;以防止后续再用到的时候忘记&#xff0c;同时也希望能够帮助到遇到同样问…

【操作系统概念】 第9章:虚拟内存管理

文章目录 0.前言9.1 背景9.2 按需调页9.2.1 基本概念9.2.2 按需调页的性能 9.3 写时复制9.4 页面置换9.4.1 基本页置换9.4.2 FIFO页置换9.4.3 最优(Optimal)置换9.4.4 LRU&#xff08;Least Recently Used&#xff09;页置换9.4.5 近似LRU页置换9.4.6 页缓冲算法 9.5 帧分配9.5…

java及特性的简单介绍

简介&#xff1a; 印度尼西亚有一个盛产咖啡的岛屿java&#xff0c;中文名翻译为爪哇&#xff0c;给这种新语言起码java 寓意端上一杯热咖啡。 特性&#xff1a; 1.面向对象 2.与平台无关 3.稳定安全 4.多线程 面向对象 1.面向对象语言关注的是对象&#xff0c;而不关注过程 2…

办公电脑换成MacBookPro半年之后……

小白是从2008年开始接触电脑的&#xff0c;当时朋友给我注册的第一个QQ账号是2008年4月。 从此&#xff0c;小白一直认为电脑全部都是Windows系统。直到上大学那年&#xff0c;看到了外教老师的MacBookPro…… 折腾电脑的开始居然是起源于诺基亚手机&#xff0c;给半智能S40的…

探索数据结构:单链表的实战指南

✨✨ 欢迎大家来到贝蒂大讲堂✨✨ &#x1f388;&#x1f388;养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; 所属专栏&#xff1a;数据结构与算法 贝蒂的主页&#xff1a;Betty‘s blog 前言 在上一章节中我们讲解了数据结构中的顺序表&#xff0c;知道了顺序…

网络编程---网络编程入门、UDP通信程序、TCP通信程序

1.网络编程入门 1.网络编程概述 网络编程&#xff1a; 在网络通信协议下&#xff0c;实现网络互连的不同计算机上运行的程序间可以进行数据传输 计算机网络&#xff1a; 是指将地理位置不同的具有独立功能的多台计算机及其外部设备&#xff0c;通过通信线路连接起来&#…

微服务:Docker篇

1. 初识Docker 1.1. 什么是Docker 微服务虽然具备各种各样的优势&#xff0c;但服务的拆分通用给部署带来了很大的麻烦。 分布式系统中&#xff0c;依赖的组件非常多&#xff0c;不同组件之间部署时往往会产生一些冲突。 在数百上千台服务中重复部署&#xff0c;环境不一定一…