OpenOCD介绍以及上手

2023-11-18

Versaloon支持AVR和AVR32的方式是模仿JTAGICE mkII,所以使用上相对简单很多,只是使用官方的开发环境即可。但Versaloon对ARM的支持是通过OpenOCD来实现,OpenOCD目前在国内还是非常少使用的(可能中国人不喜欢开源的东西吧),所以介绍一些OpenOCD的使用还是非常有必要的。

【介绍】
OpenOCD是一个开源的JTAG上位机程序,主页在http://openocd.berlios.de/web/,论坛在http://forum.sparkfun.com/viewforum.php?f=18。目前支持多种芯片,可以简单查看src/target/target.c中的target_types的定义就可以了解支持哪些处理器了:
target_type_t *target_types[] =
{
 &arm7tdmi_target,
 &arm9tdmi_target,
 &arm920t_target,
 &arm720t_target,
 &arm966e_target,
 &arm926ejs_target,
 &feroceon_target,
 &xscale_target,
 &cortexm3_target,
 &arm11_target,
 &mips_m4k_target,
 NULL,
};
并且支持的芯片还在不断增加中。
支持的编程工具,主要是并口的JTAG工具和基于FT2232的JTAG工具。当然,由于源代码都是公开的,并且可以自己编译,所以增加自己定义的工具的驱动也是相当容易的。

【编译安装】
自己编译安装OpenOCD可以参考DIY Versaloon中的DIY OpenOCD部分。
一定要注意doc/openocd.pdf文档(需要编译生成),里面有各个配置和命令的详细说明。

【配置】
OpenOCD需要针对不同的JTAG工具和不同的目标芯片,配置一个配置文档。
一般而言,配置文档分为4个部分
1.分别是定义各个接口的Port(比如telnet_port,gdb_port,tcl_port)
2.JTAG工具的定义
3.目标的定义
4.脚本的定义
接口Port的定义一般如下(非特殊情况,无需修改,定义了一些端口号)
telnet_port 4444
gdb_port 3333
tcl_port 6666
JTAG工具的定义,一般在工具的主页里会提供,而且针对不同的目前芯片,这个定义不需要修改。
目前芯片的定义,是用来告诉OpenOCD,你的JTAG链是如何连接的(以什么顺序,链接了那些目标芯片)。OpenOCD支持的芯片的定义,基本在src/target/target目录中都可以找到对应的配置文件。
脚本的定义,对于最新版本的OpenOCD尤为重要(最新的OpenOCD去掉了一些配置,而使用脚本的方式来实现)。脚本主要实现了如何操作目标芯片,不同的目标芯片的操作方式会有区别。
OpenOCD的配置基本可以使用现成的一些配置,一般在使用的JTAG工具的主页上可以找到。

【使用】
OpenOCD的启动可以直接调用openocd.exe程序,改程序会自动寻找openocd.cfg默认配置。当然,可以使用-f参数来指定使用的配置文件,比如:
openocd -f openocd_stm32.cfg
如果配合Makefile来实现编译完成后自动下载固件的功能的话,可以使用OpenOCD配置文件的脚本配置部分,以脚本的方式来实现自动的固件下载。
如果需要使用GDB或者手动操作目标设备的话,在配置文件的脚本部分中,只需要初始化目标芯片的脚本即可。然后可以通过telnet或者gdb或者tcl来连接上OpenOCD。

【示例】
比如使用STM32的OpenOCD支持的时候,可以键入命令openocd -f openocd_stm32.cfg,界面如下:

然后可以使用telnet到4444端口(telnet localhost 4444),之后可以键入各种操作命令:

当然,也可以使用gdb或者IAR EWARM5.11以后支持的GDB Server的方式连接上OpenOCD来实现编程和调试的功能。

http://group.ednchina.com/GROUP_MES_14262_1065_12674.HTM


本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

OpenOCD介绍以及上手 的相关文章

  • Android是否阉割了ARM的Jazelle技术?

    我认为 Android 中的 Java 字节码 混蛋 的理由是性能 我怀疑还有另一个原因 但是 通过更改字节码 他们难道没有让 Jazelle 等硬件加速技术变得毫无意义 从而实际上降低了 Mobile Java 平台的可用性能吗 目标平台
  • TrustZone 监控模式和 IFAR、IFSR、DFAR、DFSR

    The ARM TrustZone 监控模式 http infocenter arm com help index jsp topic com arm doc prd29 genc 009492c CACJBHJA html可以在监视模式下
  • 中断的尾链

    什么是 ARM Cortex M3 中 NVIC 支持的中断尾链 尾链是异常的背对背处理 无需 中断之间的状态保存和恢复的开销 这 处理器跳过八个寄存器的弹出操作和八个寄存器的压入操作 当退出一个 ISR 并进入另一个 ISR 时 因为这没
  • STM32内部时钟

    我对 STM32F7 设备 意法半导体的 Cortex M7 微控制器 上的时钟系统感到困惑 参考手册没有充分阐明这些时钟之间的差异 SYSCLK HCLK FCLK 参考手册中阅读章节 gt RCC 为 Cortex 系统定时器 SysT
  • armv8 NEON if 条件

    我想了解armv8 NEON内联汇编代码中的if条件 在armv7中 这可以通过检查溢出位来实现 如下所示 VMRS r4 FPSCR BIC r4 r4 1 lt lt 27 VMSR FPSCR r4 vtst 16 d30 d30 d
  • 为什么无符号类型在arm cpu中效率更高?

    我正在阅读手臂手册并提出这个建议 但没有提到原因 为什么无符号类型更快 在 ARMv4 之前 ARM 没有对加载半字和有符号字节的本机支持 要加载有符号的字节 你必须LDRB然后对值进行符号扩展 LSL那就起来吧ASR它回落 这很痛苦所以c
  • ARM NEON:如何实现 256 字节查找表

    我正在使用内联汇编将我编写的一些代码移植到 NEON 我需要的一件事是将范围 0 128 的字节值转换为表中采用完整范围 0 255 的其他字节值 该表很短 但其背后的数学并不容易 因此我认为不值得每次 即时 计算它 所以我想尝试查找表 我
  • ARM 汇编 SOS 中的 64 位除法

    我正在计算 16 个 64 位数字相加的平均值 我认为我已经正确完成了所有加法 但现在我需要弄清楚如何将 64 位数字除以 16 但我被困住了 任何帮助都会非常感谢你 到目前为止 这是我的代码 tableSize EQU 16 sum EQ
  • 小型 ARM 微控制器的 RTOS 内核之间的可量化差异 [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有许多不同的 RTOS 可用于微控制器 我专门寻找支持 ARM Cortex M 处理器的 RTOS 另外 我对闭源解决方案不感兴趣 试图从网站
  • 哪些变量类型/大小在 STM32 微控制器上是原子的?

    以下是 STM32 微控制器上的数据类型 http www keil com support man docs armcc armcc chr1359125009502 htm http www keil com support man d
  • 将 GCC 内联汇编与采用立即值的指令结合使用

    问题 我正在为 ARM Cortex M3 处理器开发定制操作系统 为了与我的内核交互 用户线程必须生成 SuperVisor Call SVC 指令 以前称为 SWI 用于软件中断 该指令在ARM ARM中的定义是 这意味着该指令需要即时
  • GCC ARM 汇编预处理器宏

    我正在尝试使用汇编 ARM 宏进行定点乘法 define MULT a b asm volatile SMULL r2 r3 0 1 n t ADD r2 r2 0x8000 n t ADC r3 r3 0 n t MOV 0 r2 ASR
  • ARM Cortex A8 PMNC 读取在启用后也给出 0.. 有什么想法/建议吗?

    MODULE LICENSE GPL MODULE DESCRIPTION user mode access to performance registers int init arm init void unsigned int valu
  • ARM 中只有两个操作数的 ADD 或 SUB

    我正在学习ARM汇编语言 我读过 ADD 应该有 3 个操作数 然而 我见过很多案例 现实中只有两种 例如 STR R1 SP 0x20 var 1C LDR R1 a lua 0x1DE4E6 MOVS R0 R4 haystack AD
  • Linux malloc() 在 ARM 和 x86 上的行为是否不同?

    这个网站上有很多关于内存分配的问题 但是我 找不到专门解决我的问题的人 这 问题 https stackoverflow com questions 19148296 linux memory overcommit details似乎最接近
  • 源和目标具有不同的 EABI 版本

    我正在尝试使用 ARM 工具链编译 so 文件 但是我不断收到这个错误 错误 源对象的 EABI 版本为 0 但目标对象的 EABI 版本为 5 我无法更改工具链中的任何内容 因为我必须使用给定的工具链 我以前从未见过这个错误 我使用了这个
  • 可以使用Visual Studio 2012构建ARM桌面程序吗?

    我正在使用 Visual Studio 2012 beta 我的桌面 win32 程序在 ARM 架构中编译得很好 升级到 Visual Studio 2012 RC 后 编译器无法工作并出现以下错误 不支持为 ARM 平台编译桌面应用程序
  • 在linux x86平台上学习ARM所需的工具[关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我有一个 x86 linux 机器 在阅读一些关于 ARM 的各种信息时 我很好奇 现在我想花一些时间学
  • DS-5:什么是 FVP、RTSM、基础模型、AEM 模型、快速模型、CADI?

    DS 5 模拟器使用了很多术语 如 FVP RTSM 快速模型 基础模型 AEM 模型 CADI Arm的文档中提供的解释不是很清楚 这些术语的含义是什么 作为 DS 5 的最终用户我应该关心哪些术语 Model 软件模拟的行业术语 就 A
  • 了解 U-Boot 内存占用

    我不明白加载 U Boot 时 RAM 中发生了什么 我正在开发 Xilinx Zynq ZC702 评估套件 并尝试使用 U Boot 在其上加载 Linux 内核 于是我使用Xilinx工具Vivado和SDK生成了一个BOOT bin

随机推荐

  • interview2-框架篇

    一 Spring篇 1 Spring 1 Bean线程安全问题 不是线程安全的 Spring框架中有一个 Scope注解 默认的值就是singleton 单例的 因为一般在spring的bean的中都是注入无状态的对象 没有线程安全问题 如
  • PCL alpha shapes平面点云边界特征提取(C++详细过程版)

    边界提取 一 概述 二 代码实现 三 结果展示 一 概述 AlphaShape边界提取算法在PCL里有现成的调用函数 具体算法原理和实现代码见 PCL alpha shapes平面点云边界特征提取 为充分了解AlphaShape算法实现的每
  • MySQL性能调优的10个方法

    1 选择合适的存储引擎 InnoDB 除非你的数据表使用来做只读或者全文检索 相信现在提到全文检索 没人会用 MYSQL 了 你应该默认选择 InnoDB 你自己在测试的时候可能会发现 MyISAM 比 InnoDB 速度快 这是因为 My
  • java 实现邮箱发送邮件功能(端口:465、587)

    使用465端口对邮件进行ssl加密传输 package com example alysslEmail import java security Security import java util Date import java util
  • 解决Eclipse里的注释中文错位问题

    2018年6月之后的eclipse版本 会出现中文注释字体不一 且缩进不一致的问题 如下 解决Eclipse里的注释中文错位问题如下 强迫症请收藏 1 Window gt Preference 2 输入formatter 选择如下 然后Ed
  • 计算机网络之物联网的特点及其主要应用领域

    提示 文章写完后 目录可以自动生成 如何生成可参考右边的帮助文档 目录 前言 一 物联网的概念及其特点 1 1 物联网的概念 1 2 物联网的特点 二 物联网的分类及其主要应用领域 总结 前言 物联网是新一代信息技术的重要组成部分 也是信息
  • openGL之API学习(一九九)纹理单元和纹理对象的关系

    glGenTextures产生的是纹理对象 简称纹理 纹理单元数量在GPU上确定的 不需要创建 glBindTexture将纹理对象绑定到当前纹理单元的的目标类型上 一个纹理单元可以有多个类型1D 2D等 一个纹理对象能够绑定到多个目标类型
  • 不需要带手机直接选择刷脸支付

    刷脸成为了现实 各地实行刷脸的试点都取得成功 刷脸也就这样的走进我们的生活 不需要带手机 钱包 直接选择刷脸 当然 方便的还是无须等待排队 原本一个收银台需要配备一名收银员 所以考虑人力成本收银柜台数量是有限的 刷脸支付需要经历的步骤 不到
  • uniapp 调用蓝牙接收数据、发送指令后接收返回结果

    uniapp 调用蓝牙接收数据 向设备发送指令后接收返回结果 一 连接蓝牙设备 1 初始化蓝牙 2 搜索蓝牙 3 获取设备列表 4 连接设备 二 接收数据 1 获取设备服务列表 2 获取蓝牙特征 3 接收设备数据 三 向设备发送数据 并接收
  • 微服务及其框架是什么

    要理解微服务 首先要先理解不是微服务的那些 通常跟微服务相对的是单体应用 即将所有功能都打包成在一个独立单元的应用程序 从单体应用到微服务并不是一蹴而就的 这是一个逐渐演变的过程 本文将以一个网上超市应用为例来说明这一过程 目录 1 单体
  • js中的日期Date操作——获取当前日期 yyyy-mm-dd格式

    getCurrentDate const date new Date const year date getFullYear toString const month 0 date getMonth 1 slice 2 const day
  • AD操作小技巧总结

    1 群操作修改元器件属性 使用寻找相同的元器件来统一修改值 最重要一步是找到后用shift选中你需要的那几个 修改完后按enter键即可 根据下图可以知道筛选的条件有很多 也可以从不同的文件中去寻找元器件 2 将PCB中元器件旋转任意角度
  • 逐渐从土里长出来的小花

    从土里逐渐长出来的小花 这是长出来后的样子 图片压缩了出现了重影 代码在这里
  • Tornado中文教程

    Tornado 是一个Python web框架和异步网络库 起初由 FriendFeed 开发 通过使用非阻塞网络I O Tornado可以支撑上万级的连接 处理 长连接 WebSockets 和其他需要与每个用户保持长久连接的应用 相关链
  • 记录使用flask+socket+mongodb页面P标签的刷新

    1 flask的学习 随便百度个flask入门教程熟悉一下flask的启动 路由等 2 mondodb的学习 同1 3 socket的学习 同1 4 碰到的问题 4 1socket阻塞 使用 from threading import Th
  • 【全文检索_10】Filebeat 基本使用

    1 1 简介 1 1 1 概述 Filebeat 是 Beats 的一员 用于转发和集中日志数据的轻量级传送工具 当面对成百上千 甚至成千上万的服务器 虚拟机和容器生成的日志时 Filebeat 将为您提供一种轻量型方法 监视指定的日志文件
  • 网络数据传输的封装

    数据封装 Data Encapsulation 是指将协议数据单元 PDU 封装在一组协议头和尾中的过程 在OSI七层参考模型中 每层主要负责与其它机器上的对等层进行通信 该过程是在协议数据单元 PDU 中实现的 其中每层的PDU一般由本层
  • QString编码转换

    QString是QT中对于字符串的存储和处理的类 类似于MFC中的CString 如果用过的话就知道比std中的string和wstring要好用的多 功能也更强大 QString内部是将字符串保存为Unicode编码的 所以无论传入的字符
  • 【pytest】 标记冒烟用例 @pytest.mark.smoke

    1 使用 pytest mark smoke 标记用例 import pytest class Test Smoke def test 01 self assert 1 1 2 pytest mark smoke def test 02 s
  • OpenOCD介绍以及上手

    Versaloon支持AVR和AVR32的方式是模仿JTAGICE mkII 所以使用上相对简单很多 只是使用官方的开发环境即可 但Versaloon对ARM的支持是通过OpenOCD来实现 OpenOCD目前在国内还是非常少使用的 可能中