【ARM Coresight OpenOCD 系列 1 -- OpenOCD 介绍】


请阅读【ARM Coresight SoC-400/SoC-600 专栏导读】

文章目录

    • 1.1 OpenOCD 介绍
      • 1.1.1 OpenOCD 支持的JTAG 适配器
      • 1.1.2 OpenOCD 支持的调试设备
      • 1.1.3 OpenOCD 支持的 Flash 驱动
    • 1.2 OpenOCD 安装与使用
      • 1.2.1 OpenOCD 代码获取及安装
      • 1.2.2 OpenOCD 使用
      • 1.2.3 OpenOCD 启用 GDB
    • 1.3 OpenOCD 资料

1.1 OpenOCD 介绍

OpenOCD (Open On-Chip Debugger) 是一个开源的硬件调试器,可以提供调试、芯片编程和边界扫描等功能。OpenOCD使用标准的JTAG接口与芯片进行通信,因此,可以用于各种不同的硬件平台,包括 ARM 和 MIPS等。

OpenOCD最初是为了支持ARM7和ARM9微控制器而开发的,但现在已经支持大量的设备,包括Cortex-M、Cortex-A、Cortex-R、PowerPC和RISC-V等架构的微控制器和处理器。除了JTAG接口,OpenOCD还支持SWD (Serial Wire Debug) 和cJTAG (Compact JTAG) 等接口。

OpenOCD 的主要功能包括:

  • 提供一个GDB服务器,可以使用GDB进行源码级别的调试;
  • 支持Flash编程,可以烧写各种不同类型的闪存设备;
  • 支持边界扫描操作,可以用于硬件验证和测试;
  • 提供一个telnet接口,可以执行各种低级的调试命令;
  • 支持脚本,可以使用Tcl脚本来自定义调试环境。

在嵌入式开发中,OpenOCD是一个非常重要的工具,它可以极大地方便开发人员进行代码的调试和硬件的测试。OpenOCD 的功能需要调试适配器来辅助完成,适配器是一种硬件设备,它允许开发者通过JTAG接口与嵌入式设备进行通信。JTAG 适配器通常用于编程、调试和测试嵌入式系统。

JTAG 适配器通常连接到开发者的电脑和嵌入式设备的 JTAG 接口之间。电脑端通常使用 USB 或以太网接口,而设备端则使用特定的JTAG连接器。一些开发板直接集成了调试仿真器,如小熊派开发板就集成了STLink。
在这里插入图片描述
开发者可以通过 JTAG 适配器和配套的软件工具进行各种操作,例如:

  • 读写设备的内存和寄存器
  • 下载和运行代码
  • 设置和清除断点
  • 单步执行和暂停代码
  • 检查和修改设备的状态
  • 执行系统级调试和测试

以下是一些常见的 JTAG 适配器的例子:

  • Segger J-Link:一款广泛使用的 JTAG/SWD 适配器,支持各种不同的设备和开发环境。
  • Lauterbach Power Debug:一款功能强大的 JTAG 适配器,通常配合 Lauterbach 的 Trace32 软件使用。
  • ARM DSTREAM / DSTREAM-ST:ARM 官方的调试和追踪适配器,支持各种 ARM 核心。
  • Xilinx Platform Cable USB:适用于 Xilinx FPGA 和可编程逻辑设备的 JTAG 适配器。
  • ST-LINK/V2:STMicroelectronics 官方的 JTAG/SWD 适配器,适用于 STM32 和 STM8 设备。

以下是使用 OpenOCD 的三个主要步骤的详细介绍:

  • 配置:OpenOCD 需要一个配置文件,以知道如何与你的硬件进行交互。配置文件通常包括两个部分:一个是关于调试适配器的配置,另一个是关于目标硬件的配置。这些文件通常有 .cfg 扩展名。
  • 启动:一旦配置文件准备好了,你可以通过终端运行 openocd 命令来启动 OpenOCD。例如,如果你的配置文件名为 my_config.cfg,你可以运行 openocd -f my_config.cfg 来启动 OpenOCD。
  • 使用:一旦 OpenOCD 启动,它会等待连接到它的 GDB 会话。你可以通过运行 gdb 命令并附加到 OpenOCD 进程来开始调试。

1.1.1 OpenOCD 支持的JTAG 适配器

所支持的 JTAG 适配器有以下:

AICE, AM335x, ARM-JTAG-EW, ARM-USB-OCD, ARM-USB-TINY, AT91RM9200, axm0432, BCM2835,
Bus Blaster, Buspirate, Cadence DPI, Cadence vdebug, Chameleon, CMSIS-DAP,
Cortino, Cypress KitProg, DENX, Digilent JTAG-SMT2, DLC 5, DLP-USB1232H,
embedded projects, Espressif USB JTAG Programmer,
eStick, FlashLINK, FlossJTAG, Flyswatter, Flyswatter2,
FTDI FT232R, Gateworks, Hoegl, ICDI, ICEBear, J-Link, JTAG VPI, JTAGkey,
JTAGkey2, JTAG-lock-pick, KT-Link, Linux GPIOD, Lisa/L, LPC1768-Stick,
Mellanox rshim, MiniModule, NGX, Nuvoton Nu-Link, Nu-Link2, NXHX, NXP IMX GPIO,
OOCDLink, Opendous, OpenJTAG, Openmoko, OpenRD, OSBDM, Presto, Redbee,
Remote Bitbang, RLink, SheevaPlug devkit, Stellaris evkits,
ST-LINK (SWO tracing supported), STM32-PerformanceStick, STR9-comStick,
sysfsgpio, Tigard, TI XDS110, TUMPA, Turtelizer, ULINK, USB-A9260, USB-Blaster,
USB-JTAG, USBprog, VPACLink, VSLLink, Wiggler, XDS100v2, Xilinx XVC/PCIe, Xverve.

这里介绍下 FTDI,FTDI 是 Future Technology Devices International 的简称,这是一家专门生产 USB 连接设备和模块的公司。FTDI 的产品广泛应用于各种设备和系统中,其中包括一些 JTAG 适配器。

在 OpenOCD 中,可以使用 FTDI 的设备作为 JTAG 或 SWD 的接口。OpenOCD 通过 D2XX 驱动或 libFTDI 库与 FTDI 设备进行通信。使用 FTDI 设备作为 JTAG 或 SWD 接口,可以方便地在 USB 接口和目标设备之间建立连接,从而实现对目标设备的编程和调试。

OpenOCD 支持的 FTDI 设备包括但不限于:

  • FT2232D:含有两个独立的 UART/FIFO 通道的设备。
  • FT2232H:高速版的 FT2232D,功能相同但速度更快。
  • FT4232H:含有四个独立的 UART/FIFO 通道的设备。

以上设备都可以作为 JTAG 或 SWD 适配器,但是需要正确配置其引脚映射和信号电平。这可以通过编写 OpenOCD 配置文件来实现。

再介绍下 J-Link ,它由 Segger 公司开发的一套专业级的调试探头,广泛应用于各种嵌入式系统的开发和调试。J-Link 支持 JTAG, SWD (Serial Wire Debug), 和 cJTAG (Compact JTAG) 等多种调试协议,并支持各种不同的目标设备,包括 ARM Cortex, Renesas RX, Microchip PIC32 等。

OpenOCD 也支持 J-Link 调试探头。可以通过 OpenOCD 结合 J-Link,在使用时需要在 OpenOCD 的配置文件中指定 J-Link 作为调试接口。以下是一个使用 J-Link 的 OpenOCD 配置文件的例子:

source [find interface/jlink.cfg] 
transport select swd 
source [find target/stm32f1x.cfg]

在以上配置文件中,interface/jlink.cfg 是 OpenOCD 预定义的 J-Link 接口配置文件,transport select swd 指定使用 SWD 协议,target/stm32f1x.cfg 是目标设备的配置文件,这个例子中是一个 STM32F1x 系列的设备。

除了使用 OpenOCD,Segger 也提供了自家的调试软件,例如 J-Link GDB Server,可以和 GNU Debugger (GDB) 直接集成,提供更加完善的调试功能。

1.1.2 OpenOCD 支持的调试设备

ARM: AArch64, ARM11, ARM7, ARM9, Cortex-A/R (v7-A/R), Cortex-M (ARMv{6/7/8}-M),
FA526, Feroceon/Dragonite, XScale.ARCv2, AVR32, DSP563xx, DSP5680xx, EnSilica eSi-RISC, 
EJTAG (MIPS32, MIPS64), ESP32, ESP32-S2, ESP32-S3, Intel Quark, LS102x-SAP, NDS32, 
RISC-V, ST STM8, Xtensa.

1.1.3 OpenOCD 支持的 Flash 驱动

ADUC702x, AT91SAM, AT91SAM9 (NAND), ATH79, ATmega128RFA1, Atmel SAM, AVR, CFI,
DSP5680xx, EFM32, EM357, eSi-RISC, eSi-TSMC, EZR32HG, FM3, FM4, Freedom E SPI,
GD32, i.MX31, Kinetis, LPC8xx/LPC1xxx/LPC2xxx/LPC541xx, LPC2900, LPC3180, LPC32xx,
LPCSPIFI, Marvell QSPI, MAX32, Milandr, MXC, NIIET, nRF51, nRF52 , NuMicro,
NUC910, Nuvoton NPCX, onsemi RSL10, Orion/Kirkwood, PIC32mx, PSoC4/5LP/6,
Raspberry RP2040, Renesas RPC HF and SH QSPI,
S3C24xx, S3C6400, SiM3x, SiFive Freedom E, Stellaris, ST BlueNRG, STM32,
STM32 QUAD/OCTO-SPI for Flash/FRAM/EEPROM, STMSMI, STR7x, STR9x, SWM050,
TI CC13xx, TI CC26xx, TI CC32xx, TI MSP432, Winner Micro w600, Xilinx XCF,
XMC1xxx, XMC4xxx.

1.2 OpenOCD 安装与使用

1.2.1 OpenOCD 代码获取及安装

代码获取

  • 通过 git 获取
 git clone git://git.code.sf.net/p/openocd/code openocd
  • 通过镜像获取
http://repo.or.cz/r/openocd.git
git://repo.or.cz/openocd.git

源码编译
运行 $ ./configure 命令,进行OpenOCD配置,可配置的项目可以通过 $ ./configure -h 命令查看帮助信息。 笔者的调试器是 J-Link,所以还要运行如下命令进行使能

$ ./configure --enable-jlink
$ sudo make install

安装完成后,运行 $ openocd -V 命令,查看当前软件版本。

1.2.2 OpenOCD 使用

举例来说,假设你正在使用一个 STM32F4 Discovery 开发板,可以直接使用命令openocd -f board/stm32f4discovery.cfg 启动OpenOCD, vim openocd-0.12.0/tcl/board/stm32f4discovery.cfg 可以看到下面内容:

# my_config.cfg # 适配器配置 
source [find interface/stlink.cfg]

transport select hla_swd

# increase working area to 64KB
set WORKAREASIZE 0x10000

# 目标硬件配置 
source [find target/stm32f4x.cfg]

reset_config srst_only

使用的规则:

  • find 命令和参数FILENAME是放在[]中,命令返回的是该文件的完整路径(文件名不要用‘#’,‘#’是TCL的关键字);
  • source 命令使用find到的文件,并以把这个文件作为脚本执行。

如果当前使用的是一个不常见的适配器来debug一些目标设备,就需要source jtag interface 和 target configs。例如:

  openocd -f interface/ftdi/jtagkey2.cfg -c "transport select jtag" \
          -f target/ti_calypso.cfg

  openocd -f interface/stlink.cfg -c "transport select hla_swd" \
          -f target/stm32l0.cfg

1.2.3 OpenOCD 启用 GDB

在另一个终端中,你可以启动 GDB 并连接到 OpenOCD:

arm-none-eabi-gdb -ex "target remote localhost:3333"

此时,你就可以使用 GDB 来进行调试了。例如,你可以使用 continue 命令来开始执行程序,或者使用 break 命令来设置断点。
以上就是 OpenOCD 的基本使用方法。在实际使用中,你可能需要根据你的具体硬件和需求来调整配置文件和 GDB 命令。

1.3 OpenOCD 资料

  • 项目主页 http://openocd.org/
  • 用户手册 http://openocd.org/doc/html/index.html
  • 源码镜像 https://github.com/ntfreak/openocd
  • OpenOCD通常都是源码发布,当然网上有一些编译好的二进制分发,例如这个 https://gnutoolchains.com/arm-eabi/openocd/

推荐阅读
https://zhuanlan.zhihu.com/p/41517198
https://openocd.org/doc-release/html/TAP-Declaration.html#DAP-subcommand-apreg
https://bbs.huaweicloud.com/blogs/122621

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

互联网金融风控常见知识点

1.怎么做互联网金融风控 首先风险不是都是坏的,风险是有价值的。也就是风险的VaR值(Value at Risk) 对于互联网信贷风控,是要把风险和收益做到更合理的平衡,在控制风险水平的情况下使得收益更高。 所以,做风控的不是一味地追求耕…

【C++进阶】继承

​👻内容专栏: C/C编程 🐨本文概括: 继承的概念与定义、基类与派生类对象赋值转换、继承中的作用域、派生类的默认成员函数、继承与友元、继承与静态成员、菱形继承与虚继承、继承的总结与反思。 🐼本文作者&#xff1…

企业办理CCRC需要多少费用?

近几年,很多企业都在咨询了解CCRC认证,各企业对于办理CCRC资质认证最在意的一个环节就是办理的费用,也有不少企业都在咨询同邦信息科技的小编费用的问题,那今天同邦信息科技的小编就给大家说一下 先来给大家科普一下CCRC认证&…

跨境电商源码独立开发:一次购买,终生使用

随着全球电子商务的快速发展,越来越多的企业开始涉足跨境电商领域。为了在这个竞争激烈的市场中脱颖而出,您需要一个专业的跨境电商解决方案。我们的团队为您提供最优质的源码独立开发服务,让您拥有一个功能强大、安全稳定的跨境电商平台。 一…

web3案例中解决交易所中 ETH与token都是0问题 并帮助确认展示是否成功

可能写了这么久 很多人会发现一个问 我们前面的案例 个人在交易所中的 自定义token 和 ETH 一直是放了个0 大家也不太敢确认是否真的有效 那么 很简单 我们操作 存入一些进交易所 不就ok了 我们 来看之前交易所写的代码 我们写了 depositEther 存入 ETH 和 depositToken 存入…

Kotlin(十) 空指针检查、字符串内嵌表达式以及函数默认值

空指针检查 我们在之前的章节里,有定义一个Study的类,它有两个函数,一个doHomework(),一个readBooks()。然后我们定义个doStudy函数,来调用它们,代码如下: fun doStudy(study: Study) {study.doHomework(…

数字化时代,数据分析的基础是什么?

数字化产品和服务覆盖了社会的方方面面,也让数据成为了构建现代化社会的核心元素,让人们明白数据不只是人类活动产生的附加品,还能够在应用过程中促进人类活动发展、优化和改变,真正成为了个人、机构、企业乃至国家的新型资产&…

佳易王会员管理系统软件如何下载,基本功能有哪些

一、佳易王会员管理软件大众版 部分功能简介: 1、会员信息登记 :可以直接使用手机号登记,也可以使用实体卡片,推荐用手机号即可。 2、会员卡类型 :可以自由设置卡的类型,比如:充值卡、计次卡、…

Docker - 安装

Docker安装 Docker的基本组成 镜像(image): ​ Docker镜像就好比是一个模板,可以通过这个模板来创建容器服务,tomcat镜像 -> run -> tomcat01容器(提供服务器),通过这个镜像可以创建多个…

SpringCloud——服务网关——GateWay

1.GateWay是什么? gateway也叫服务网关,SpringCloud GateWay使用的是Webflux中的reactor-netty响应式编程组件,底层使用了Netty通讯框架。 gateway的功能有反向代理、鉴权、流量控制、熔断、日志监控...... 2.为什么不使用Zuul&#xff1f…

不止于“初见成效”,阿斯利康要让数据流转,以 AI 带动决策智能

“阿斯利康数字化成果在进博会上引人注目,令我感到非常高兴。”这是阿斯利康代表的感慨。 数字化建设目标是利用先进技术来提高企业运营效率,降低成本。在第六届进博会的7.2 B2-01展区,阿斯利康不仅展示了全球领先的生物医药和医疗器械成果&a…

Azure 机器学习 - 使用 ONNX 对来自 AutoML 的计算机视觉模型进行预测

目录 一、环境准备二、下载 ONNX 模型文件2.1 Azure 机器学习工作室2.2 Azure 机器学习 Python SDK2.3 生成模型进行批量评分多类图像分类 三、加载标签和 ONNX 模型文件四、获取 ONNX 模型的预期输入和输出详细信息ONNX 模型的预期输入和输出格式多类图像分类 多类图像分类输入…

聊聊 GPU 产品选型那些事

随着人工智能的飞速崛起,随之而来的是算力需求的指数级增加,CPU 已经不足以满足深度学习、大模型计算等场景的海量数据处理需求。GPU 作为一种强大的计算工具,无论是高性能计算、图形渲染还是机器学习领域,在各个领域展现出了巨大…

JS将一个不止深度的对象转换成树结构

JS将一个不止深度的对象转换成树结构 示例数据 {"CODE": 200,"MSG": "SUCCESS","ENT_INFO": {"BREAKLAW": [],"ORGDETAIL": {},"YEARREPORTBASIC": [{"ANCHEYEAR": "2013","…

【紫光同创国产FPGA教程】——PDS安装教程

本原创教程由深圳市小眼睛科技有限公司创作,版权归本公司所有,如需转载,需授权并注明出处 一:软件简介 PangoDesign Suite是紫光同创基于多年FPGA开发软件技术攻关与工程实践经验而研发的一款拥有国产自主知识产权的大规模FPGA开…

京东数据分析:2023年10月京东洗衣机行业品牌销售排行榜

鲸参谋监测的京东平台10月份洗衣机市场销售数据已出炉! 10月份,洗衣机市场整体销售呈上升走势。鲸参谋数据显示,今年10月,京东平台洗衣机市场的销量为143万,环比增长约23%,同比增长约1%;销售额约…

【CSS】transition、transform以及animation

1.CSS transition 介绍 通常当 CSS 的属性值更改后,浏览器会立即更新相应的样式。 在 CSS3 中加入了一项过渡功能,通过该功能,我们可以将元素从一种样式在指定时间内平滑的过渡到另一种样式,类似于简单的动画,但无需…

Web前端—CSEO、Favicon、小兔鲜儿电商网站顶部设计

版本说明 当前版本号[20231108]。 版本修改说明20231108初版 目录 文章目录 版本说明目录电商平台网站顶部设计项目目录准备工作SEO 三大标签Favicon 图标布局网页版心快捷导航(shortcut)头部(header)logo导航搜索购物车 电商平…

vue使用Echarts5实现词云图

先上官网 词云图有些特殊,它属于Echarts 的扩展,需要额外安装Echarts-wordcloud包。 Echarts 官网 Echarts-wordcloud 词云图官网 先安装 npm install echarts npm install echarts-wordcloud再引入 echarts选一个引入就行;4或5版本都可以 …

【带头学C++】----- 三、指针章 ---- 3.11 补充重要指针知识(二,拓展基础知识)

1.指针与函数 1.1指针变量作为函数的参数 如果想在函数内部修改外部变量的值,可以将外部变量的地址传递给函数。 在C/C中,函数的参数传递方式有值传递(传递变量的副本)和引用传递(传递变量的地址)。如果希…