Android下使用OpenOCD

目录

1. 准备工作

2. 运行bootstrap

3. 运行Configure

4. 编译make

4.1 错误1

4.2 错误2

4.3 错误3

4.4 错误4

4.5 错误5

4.6 错误6

4.7 错误7

5. 安装


主要是使用NDK编译OpenOCD源码。最好先在Ubuntu中编译通过OpenOCD。

1. 准备工作

Ubuntu下下载NDK和OpenOCD,在OpenOCD的源代码目录内新建文件envsetup.sh,配置编译环境。

#!/bin/shexport NDK=/home/pq/android-ndk-r17c
export TOOLCHAIN=$NDK/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64
export TARGET=arm-linux-androideabi
export API=21
export AR=$TOOLCHAIN/bin/$TARGET-ar
export CC=$TOOLCHAIN/bin/$TARGET-gcc
export AS=$CC
export CXX=$TOOLCHAIN/bin/$TARGET-g++
export LD=$TOOLCHAIN/bin/$TARGET-ld
export RANLIB=$TOOLCHAIN/bin/$TARGET-ranlib
export STRIP=$TOOLCHAIN/bin/$TARGET-strip
export HOST=$TARGET
export ANDROID_SYSROOT=$NDK/platforms/android-$API/arch-arm
export CPPFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API"
export CFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API"
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API"echo "NDK=$NDK"
echo "TOOLCHAIN=$TOOLCHAIN"
echo "TARGET=$TARGET"
echo "API=$API"
echo "AR=$AR"
echo "CC=$CC"
echo "AS=$AS"
echo "CXX=$CXX"
echo "RANLIB=$RANLIB"
echo "STRIP=$STRIP"
echo "ANDROID_SYSROOT=$ANDROID_SYSROOT"

2. 运行bootstrap

./bootstrap

如果有编译过OpenOCD,这一步应该会通过。

3. 运行Configure

./configure --host $HOST

提示一个错误:

configure: error: ./configure.gnu failed for jimtcl

看log可以看出是配置jimtcl出问题。修改命令:

./configure --host=$HOST

此时可以看到配置通过,不过由于一部分库不存在,会有一些功能不支持。如果不需要这部分设备支持,可以不处理(例如常见的FTDI设备,ST-Link、CMSIS-DAPv2等设备都支持了)。

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)
ANGIE Adapter                           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            no
Nu-Link Programmer                      no
Cypress KitProg Programmer              no
Altera USB-Blaster Compatible           no
ASIX Presto Adapter                     no
OpenJTAG Adapter                        no
Linux GPIO bitbang through libgpiod     no
SEGGER J-Link Programmer                no
Bus Pirate                              yes (auto)
Use Capstone disassembly framework      no

如果需要支持这些设备,可能是要尝试编译下面的库:

checking for capstone... no
checking for hidapi... no
checking for hidapi-hidraw... no
checking for hidapi-libusb... no
checking for libftdi1... no
checking for libftdi... no
checking for libgpiod... no
checking for libjaylink >= 0.2... no

4. 编译make

运行编译代码

make

出现很多错误提示。

4.1 错误1

 error: 'annotate' attribute directive ignored [-Werror=attributes]

这个的错误可能是由于使用了GCC编译器的一个特定警告选项(-Werror=attributes),该选项会将所有属性相关的警告转换为错误。'annotate'是C++17引入的一个属性,它允许开发者为变量、函数等指定额外的元数据。如果代码中使用了这个属性,但是编译器并不支持C++17或者更新的版本,那么就会看到这个错误。

在envsetup.sh中添加-Wno-attributes,去掉这个选项

export CPPFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API -Wno-attributes"
export CFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API -Wno-attributes"
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API -Wno-attributes"

改好后需要重新运行一下envsetup.sh和configure,这个错误就没有了。

4.2 错误2

error: '__swab32s' defined but not used [-Werror=unused-function]

这个错误是和NDK编译环境有关,没找到解决方法,只能修改NDK里面这个定义,在swab.h里面

static __always_inline void __swab32s(__u32 * p)

中的__always_inline改为inline

static inline void __swab32s(__u32 * p)

4.3 错误3

error: redundant redeclaration of '__assert' [-Werror=redundant-decls]

在envsetup.sh中添加-DNDEBUG,去掉assert

export CPPFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API -Wno-attributes -DNDEBUG"
export CFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API -Wno-attributes -DNDEBUG"
export CXXFLAGS="--sysroot=$ANDROID_SYSROOT -I$NDK/sysroot/usr/include -I$NDK/sysroot/usr/include/$TARGET -D__ANDROID_API__=$API -Wno-attributes -DNDEBUG"

在ftdi.c中去掉include这个函数

//#include <assert.h>

在/openocd-code/src/target/riscv/riscv-011.c 去掉include <assert.h>

在/openocd-code/src/target/riscv/riscv-013.c 去掉include <assert.h>

在/openocd-code/src/target/riscv/riscv.c去掉include <assert.h>

在/openocd-code/src/target/xtensa/xtensa.h去掉include <assert.h>

发现无效,最后是将所有的assert去掉,求高手提供最佳的解法。

4.4 错误4

src/flash/nor/rsl10.c:159:21: error: unused variable 'chip' [-Werror=unused-variable]

在envsetup.sh中CFLAGS添加-Wno-unused-variable

4.5 错误5

error: declaration of 'read' shadows a global declaration [-Werror=shadow]

这个错误是变量read已经被申明为一个全局申明(NDK里面已经有一个read了),将这个变量改成其他名字sinkread

4.6 错误6

error: undefined reference to 'libusb_release_interface'

在configure时可以看到libusb的库是yes

checking for libusb-1.0... yes
configure: libusb-1.0 header bug workaround: LIBUSB1_CFLAGS changed to "-isystem /usr/include/libusb-1.0"

需要编译NDK版本的libusb。

4.7 错误7

error: undefined reference to 'stdout'

在对应的c文件添加#include <stdio.h>

5. 安装

编译通过后可以在src文件夹里面找到openocd的执行文件。

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

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

相关文章

linux安全配置规范

一、 概述 1.1 适用范围 本配置规范适用于凝思操作系统&#xff0c;主要涉及LINUX操作系统安全配置方面的基本要求&#xff0c;用于指导LINUX操作系统安全加固工作&#xff0c;落实信息安全等级保护等保三级系统操作系统安全配置&#xff0c;为主机安全配置核查提供依据。…

Python刘诗诗

写在前面 刘诗诗在电视剧《一念关山》中饰演了女主角任如意&#xff0c;这是一个极具魅力的女性角色&#xff0c;她既是一位有着高超武艺和智慧的女侠士&#xff0c;也曾经是安国朱衣卫前左使&#xff0c;身怀绝技且性格坚韧不屈。剧中&#xff0c;任如意因不满于朱衣卫的暴行…

P1948 [USACO08JAN] Telephone Lines S

Here 典中之典&#xff01;&#xff01; 解题思路 可选k条边代价为0如何决策&#xff1f; 将到当前位置选择了几条代价为0的边放入状态&#xff0c;即若当前状态选的边数小于&#xff0c;则可以进行决策&#xff0c;是否选择当前边&#xff0c;若选&#xff0c;则&#xff0c…

基于智慧灯杆的智慧城市解决方案(2)

功能规划 智慧照明功能 智慧路灯的基本功能仍然是道路照明, 因此对照明功能的智慧化提升是最基本的一项要求。 对道路照明管理进行智慧化提升, 实施智慧照明, 必然将成为智慧城市中道路照明发展的主要方向之一。 智慧照明是集计算机网络技术、 通信技术、 控制技术、 数据…

uniapp:小程序数字键盘功能样式实现

代码如下&#xff1a; <template><view><view><view class"money-input"><view class"input-container" click"toggleBox"><view class"input-wrapper"><view class"input-iconone"…

C++ 队列

目录 队列的应用场景 1、429. N 叉树的层序遍历 2、 103. 二叉树的锯齿形层序遍历 3、662. 二叉树最大宽度 4、515. 在每个树行中找最大值 队列的应用场景 广度优先搜索&#xff08;BFS&#xff09;&#xff1a;队列是广度优先搜索算法的核心数据结构。在BFS中&#xff…

C语言:深入补码计算原理

C语言&#xff1a;深入补码计算原理 有符号整数存储原码、反码、补码转换规则数据与内存的关系 补码原理 有符号整数存储 原码、反码、补码 有符号整数的2进制表示方法有三种&#xff0c;即原码、反码和补码 三种表示方法均有符号位和数值位两部分&#xff0c;符号位用0表示“…

Linux:kubernetes(k8s)lable和selecto标签和选择器的使用(11)

通过标签是可以让我们的容器和容器之间相互认识&#xff0c;简单来说一边打了标签&#xff0c;一边使用选择器去选择就可以快速的让他们之间耦合 定义标签有两种办法&#xff0c;一个是文件中&#xff0c;一个是命令行里 我们在前几章编进文件的时候里面都有lable比如 这个就是…

rk3399使用阿里推理引擎MNN使用cpu和gpu进行benchmark,OpenCL效果不佳?

视频讲解 rk3399使用阿里推理引擎MNN使用cpu和gpu进行benchmark&#xff0c;OpenCL效果不佳&#xff1f; 背景 MNN是阿里开源的推理引擎&#xff0c;今天测试一下在rk3399平台上的benchmark怎么样&#xff1f; alibaba/MNN: MNN is a blazing fast, lightweight deep learning…

keycloak18.0.0==前后端分离项目中使用,前端react后端springboot

配置keycloak 启动keycloak18 新建一个realm,名字叫test1 新建两个client&#xff0c;一个用于前端&#xff0c;一个用于后端 第一个 react http://localhost:8081/auth/realms/test1/react/ 第二个 backend-service 在两个client下分别创建role testRole backend-servic…

可免费使用的AI平台汇总 + 常用赋能科研的AI工具推荐

赋能科研&#xff0c;AI工具助你飞跃学术巅峰&#xff01;(推荐收藏) 文章目录 赋能科研&#xff0c;AI工具助你飞跃学术巅峰&#xff01;(推荐收藏)一、可免费使用的AI平台汇总1. ChatGPT2. New Bing3. Slack4. POE5. Vercel6. 其他平台7. 特定功能平台8. 学术资源平台9. 中文…

编曲学习:钢琴编写 人性化、逻辑预制 工程音频导出

第8课 钢琴编写 人性化、逻辑预制 工程音频导出小鹅通-专注内容付费的技术服务商https://app8epdhy0u9502.pc.xiaoe-tech.com/live_pc/l_65e30339e4b064a8cfe56001?course_id=course_2XLKtQnQx9GrQHac7OPmHD9tqbv 音乐创作中,有思路时可以不套学习到的公式,没有思路时可以套…

Java零基础-包机制讲解

哈喽&#xff0c;各位小伙伴们&#xff0c;你们好呀&#xff0c;我是喵手。 今天我要给大家分享一些自己日常学习到的一些知识点&#xff0c;并以文字的形式跟大家一起交流&#xff0c;互相学习&#xff0c;一个人虽可以走的更快&#xff0c;但一群人可以走的更远。 我是一名后…

数据库--

数据库 你对数据库的理解 有什么数据库及数据库分类&#xff1f; 关系型数据mysql&#xff0c;Oracle&#xff0c;SQL Server&#xff0c;DB2&#xff0c;postgreSQL 非关系型数据MongoDB&#xff0c;Cassandra&#xff08;卡三zhe&#xff09;&#xff0c;redis&#xff0c;Hb…

离线数仓(六)【ODS 层开发】

前言 1、ODS 层开发 ODS层的设计要点如下&#xff1a; &#xff08;1&#xff09;ODS层的表结构设计依托于从业务系统同步过来的数据结构&#xff08;JSON/CSV/TSV&#xff09;。 &#xff08;2&#xff09;ODS层要保存全部历史数据&#xff0c;故其压缩格式应选择高压缩比的…

C++程序设计-第六/七/八章 运算符重载/包含与继承/虚函数和多态性【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下C程序设计中的重点概念&#xff0c;以供大家期末复习和考研复习的时候使用。 C程序设计系列文章传送门&#xff1a; 第一章 面向对象基础 第四/五章 函数和类和对象 第六/七/八章 运算符重载/包含与继承/虚函…

训练保存模型checkpoint时报错SyntaxError: invalid syntax

在使用pytorch训练保存checkpoint时&#xff0c;出现如下报错&#xff1a; rootautodl-container-745411b452-c5cebfed:~/kvasir-seg-main# python train_transunet.py --loss_function"IoULoss" --training_augmentation0File "train_transunet.py", lin…

Java多线程实战-实现多线程文件下载,支持断点续传、日志记录等功能

&#x1f3f7;️个人主页&#xff1a;牵着猫散步的鼠鼠 &#x1f3f7;️系列专栏&#xff1a;Java全栈-专栏 &#x1f3f7;️个人学习笔记&#xff0c;若有缺误&#xff0c;欢迎评论区指正 目录 前言 1 基础知识回顾 1.1 线程的创建和启动 1.2 线程池的使用 2.运行环境说…

Shell常用脚本:文件或目录一键同步到多台服务器

注意&#xff1a; 将本地文件&#xff0c;同步到【/opt/module/script/xsyncByFileIp.txt】里面的目标机器 xsyncByFile.sh #!/bin/bash# 入参参数个数 argsCount$#if(($argsCount0)); thenecho "同步失败&#xff1a;请输入待同步的文件或者目录" exit; fiecho &q…

Java8中,如何使用jni调用C++的dll

下面是在Java 8中使用JNI调用C的DLL的步骤清单&#xff1a; 编写C代码&#xff0c;创建动态链接库&#xff08;DLL&#xff09;&#xff1a; #include <jni.h> #include <iostream> #include "org_ming_jni_MyNativeImplementation.h" // com_example_…