【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.cfgopenocd -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

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

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

相关文章

Ubuntu 22.04 安装水星无线 USB 网卡

我的 USB 网卡是水星 Mercury 的, 在 Ubuntu 22.04 下面没有自动识别。 没有无线网卡的时候只能用有线接到路由器上,非常不方便。 寻思着把无线网卡驱动装好。折腾了几个小时装好了驱动。 1.检查网卡类型 & 安装驱动 使用 lsusb 看到的不一定是准确…

ChatGPT:something went wrong

今天下午不知什么原因,ChatGPT无法使用。我原来在使用ChatGPT for chrome,返回了一个答案,后来在网页端无法使用,以为是这个chrome插件泄露API KEY导致的。注销账号,删除API KEY后,wrong问题仍然存在。 我…

Centos配置邮件发送

在CentOS Linux上配置邮件发送 在这个指南中,我们将讨论如何配置CentOS Linux系统以通过外部邮件服务器发送电子邮件,使用自己的邮件账户进行发送。 第一步:开启SMTP授权码 首先,我们以QQ邮箱为例,需要开启SMTP授权…

类直径树上贪心

http://cplusoj.com/d/senior/p/SS231109C 场上想到枚举点&#xff0c;然后最大值为高&#xff0c;然后可以求最大值。但是感觉计数会重 计数其实不会重&#xff0c;如图中&#xff0c;红色线段显然比蓝色线段优 所以我们枚举3叉点时没错的 #include<bits/stdc.h> usin…

使用ffmpeg 压缩视频

我有一批1080p的视频,在网上播放占用空间太大,需要进行压缩以后再上传,下面是记录一下ffmpeg命令的使用情况 原视频大小:288mb --压缩加修改分辨率 640p ffmpeg -y -i C4995.mp4 -vcodec libx264 -crf 18 -s vga C4995\C4995_2.MP4 -y: 强制覆盖 -i :输入文件 -vcodec lib…

2、鸿蒙开发工具首次运行时开发环境配置

请务必在第一次运行时配置好开发环境&#xff0c;如果取消了配置&#xff0c;后续再配置会比较麻烦 1、点击工具图标运行 2、在欢迎页中点击“Agree” 3、默认“Do not import setting”&#xff0c;点击“OK” 3、此片设置Nodejs和Ohpm的安装&#xff0c;其中&#xff0c; …

计算机网络学习笔记(五):运输层(待更新)

目录 5.1 概述 5.1.1 TCP协议的应用场景 5.1.2 UDP协议的应用场景 5.2 三大关系 5.2.1 传输层协议和应用层协议之间的关系 5.3 用户数据报协议UDP(User Datagram Protocol) 5.3.1 UDP的特点 5.3.2 UDP的首部 5.4 传输控制协议TCP(Transmission Control Protocol) 5.…

系列一、Shiro概述

一、概述 Shiro是一款主流的Java安全框架&#xff0c;不依赖任何容器&#xff0c;可以运行在JavaSE 和 JavaEE项目中&#xff0c;它的主要作用是对访问系统的用户进行身份认证、授权、会话管理、加密等操作。 一句话&#xff1a;Shiro是一个用来解决安全管理的系统框架&#x…

MVCC中的可见性算法

在之前的文章 MVCC详解-CSDN博客中我们已经介绍过了MVCC的原理&#xff08;read viewundo log&#xff09;&#xff0c;今天来详细的说一下readview的匹配规则&#xff08;可见性算法&#xff09; 隔离级别在RC&#xff0c;RR的前提下 Read View是如何保证可见性判断的呢&#…

一篇带你精通php

华子目录 什么是phpphp发展史平台支持和数据库支持网站静态网站和动态网站的区别静态网站动态网站的特点 关键名词解析服务器概念IP的概念域名DNS端口 web程序的访问流程静态网站访问流程动态网站访问流程 php标记脚本标记标准标记&#xff08;常用&#xff09; php注释 什么是…

[LeetCode]-225. 用队列实现栈

目录 225. 用队列实现栈 题目 ​思路 代码 225. 用队列实现栈 225. 用队列实现栈 - 力扣&#xff08;LeetCode&#xff09;https://leetcode.cn/problems/implement-stack-using-queues/description/ 题目 请你仅使用两个队列实现一个后入先出&#xff08;LIFO&#xff0…

【Servlet】 三

本文主要介绍了基于serlvet的表白墙项目的编写. (附完整代码) 一.JS基础 作为后端开发,对于前端的要求是能前端代码能看懂七七八八 . JS是一个动态弱类型的编程语言 1. let/war定义变量 (推荐使用let) 2.querySelector是浏览器提供api , 能够获取到页面的元素的 (js的目的就…

原语:串并转换器

串并转换器OSERDESE2 可被Select IO IP核调用。 IP配置方法&#xff1a;&#xff08;待续&#xff09; OSERDESE2允许DDR功能 参考&#xff1a; FPGA原语学习与整理第二弹&#xff0c;OSERDESE2串并转换器 - 知乎 (zhihu.com) 正点原子。 ISERDESE2原语和OSERDESE2原语是串…

阿里云99元的主机到底怎么样?

我是卢松松&#xff0c;点点上面的头像&#xff0c;欢迎关注我哦&#xff01; 在云栖大会上&#xff0c;阿里云推出了一款绝对超级超值的99元云服务器&#xff0c;并号称是11月销量王。什么?云栖大会11月2号结束的&#xff0c;你就号称11月销量王&#xff0c;这是未卜先知啊。…

C# OpenCvSharp 通过特征点匹配图片

SIFT匹配 SURF匹配 项目 代码 using OpenCvSharp; using OpenCvSharp.Extensions; using System; using System.Collections.Generic; using System.Drawing; using System.Linq; using System.Text.RegularExpressions; using System.Windows.Forms; using static System.Net…

Spring Boot中配置多个数据源

配置数据源实际上就是配置多个数据库&#xff0c;在一个配置文件中配置多个数据库&#xff0c;这样做主要的好处有以下几点&#xff1a; 数据库隔离&#xff1a;通过配置多个数据源&#xff0c;可以将不同的业务数据存储在不同的数据库中&#xff0c;实现数据的隔离。这样可以…

Leetcode—637.二叉树的层平均值【简单】

2023每日刷题&#xff08;二十五&#xff09; Leetcode—637.二叉树的层平均值 BFS实现代码 /*** Definition for a binary tree node.* struct TreeNode {* int val;* struct TreeNode *left;* struct TreeNode *right;* };*/ /*** Note: The returned array mu…

vscode文件跳转(vue项目)

在 .vue 文件中&#xff0c;点击组件名打开 方式1&#xff1a; 在 vue 组件名上&#xff0c;桉住ctrl 鼠标左键 // 重新打开一个tab 方式2&#xff1a; 在 vue 组件名上&#xff0c;桉住ctrl shift 鼠标左键 // 在右侧拆分&#xff0c;并打开一个tab .vue文件的跳转 按住 …

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案

漏刻有时百度地图API实战开发(1)华为手机无法使用addEventListener click 的兼容解决方案漏刻有时百度地图API实战开发(2)文本标签显示和隐藏的切换开关漏刻有时百度地图API实战开发(3)自动获取地图多边形中心点坐标漏刻有时百度地图API实战开发(4)显示指定区域在移动端异常的解…

龙芯loongarch64服务器编译安装scipy

前言 根据我之前的文章介绍,龙芯loongarch64服务器中的很多python依赖包安装有问题,发现其中安装的"scikit-learn"就无法正常使用,所有这里在 pip3 install scikit-learn -U -i https://pypi.tuna.tsinghua.edu.cn/simple 的时候发现"scipy"就无法正常…