RISC-V/ARM mcu OpenOCD 调试架构解析

Risc-v/ARM mcu OpenOCD 调试架构解析

最近有使用到risc-v的单片机,所以了解了下risc-v单片机的编译与调试环境的搭建,面试时问到risc-v的调试可参看以下内容。

risc-v根据官方的推荐,调试器服务是选择OpenOCD,DopenOCD(开放片上调试器)是一个开源的片上调试器,旨在提供针对嵌入式设备的调试、系统编程和边界扫描功能。OpenOCD的功能需要调试仿真器来辅助完成,调试仿真器是一个提供调试目标电信号的小型硬件单元。常用的有JLINK、STLink等一些开发板直接集成了调试仿真器.
基于openOCD的调试架构如下图所示:

在这里插入图片描述

PC端可以是GDB编译调试端或者是一个集成的IDE开发环境,它包含了一个OpenOCD的驱动,这个驱动是根据具体芯片有所差别的,OpenOCD提供了一系列调试的接口,芯片厂生产的芯片要支持OpenOCD就需要做自己家的驱动软件,还有一部分的配置文件(xx.cfg)是用来在上层配置具体芯片型号和调试器硬件类型以及flash编程信息的。cfg文件分几种类型如下:

interface :这些用于调试适配器。指定要使用的配置的文件 特定的JTAG,SWD和其他适配器在这里。
board :关于电路板,PWA,PCB,他们有很多名字。主板文件 包含特定于板的初始化项。
target :关于芯片。“target ”目录代表JTAG TAP。在芯片上 OpenOCD应该控制哪个,而不是一个板子。两种常见的目标类型 是ARM芯片和FPGA或CPLD芯片。当一个芯片有多个TAP(也许它同时具有ARM和DSP内核)时, 目标配置文件定义了所有这些。
可见OpenOCD的github: https://github.com/openocd-org/openocd

对比基于ARM内核的调试架构,可以看到基本结构类似,JLINK定义了一个软件调试层面的RDI接口标准,即Remote debug interface. Keil、IAR、ADS这些开发环境按照RDI标准进行定制,即可以支持JLINK调试。RDI底层使用USB传输,当然,其他硬件接口也是可以的。ARM体系原先是支持JTAG硬件调试接口的,随着cortex系列增加SWD调试规范,现在越来越多的调试器选择SWD接口。其接线少,速率高,也比较稳定。JTAG 20个口太占用pin资源了。JLINK V6开始支持SWD,现在V8支持已经足够好了。

在这里插入图片描述

两种内核的调试架构基本换汤不换药,都SEGGER和OpenOCD都提供了标准结构给芯片厂,芯片厂基于自家的芯片实现接口,底层都是通过USB驱动实现PC和调试器的通信,都包含下载算法的思路设计flash 编程方法。

下面就先看看,OpenOCD中的cfg文件配置方法吧,以stm32f4为例:

启动openocd服务,需要指定interface和target(target和board可以选择,最小系统板选target, 板载DRAM, 外部Flash的可以带上board的cfg文件)

openocd -f D:\OpenOCD\share\openocd\scripts\interface\stlink-v2.cfg -f D:\OpenOCD\share\openocd\scripts\board\stm32f4discovery.cfg

配置risc-v内核:

# script for stm32f4x family

#
# stm32 devices support both JTAG and SWD transports.
#
source [find target/swj-dp.tcl]
source [find mem_helper.tcl]

if { [info exists CHIPNAME] } {
   set _CHIPNAME $CHIPNAME
} else {
   set _CHIPNAME stm32f4x
}

set _ENDIAN little

# Work-area is a space in RAM used for flash programming
# By default use 32kB (Available RAM in smallest device STM32F410)
if { [info exists WORKAREASIZE] } {
   set _WORKAREASIZE $WORKAREASIZE
} else {
   set _WORKAREASIZE 0x8000
}

#jtag scan chain
if { [info exists CPUTAPID] } {
   set _CPUTAPID $CPUTAPID
} else {
   if { [using_jtag] } {
      # See STM Document RM0090
      # Section 38.6.3 - corresponds to Cortex-M4 r0p1
      set _CPUTAPID 0x4ba00477
   } {
      set _CPUTAPID 0x2ba01477
   }
}

swj_newdap $_CHIPNAME cpu -irlen 4 -ircapture 0x1 -irmask 0xf -expected-id $_CPUTAPID
dap create $_CHIPNAME.dap -chain-position $_CHIPNAME.cpu

tpiu create $_CHIPNAME.tpiu -dap $_CHIPNAME.dap -ap-num 0 -baseaddr 0xE0040000

if {[using_jtag]} {
   jtag newtap $_CHIPNAME bs -irlen 5
}

set _TARGETNAME $_CHIPNAME.cpu
target create $_TARGETNAME cortex_m -endian $_ENDIAN -dap $_CHIPNAME.dap

$_TARGETNAME configure -work-area-phys 0x20000000 -work-area-size $_WORKAREASIZE -work-area-backup 0

set _FLASHNAME $_CHIPNAME.flash
flash bank $_FLASHNAME stm32f2x 0 0 0 0 $_TARGETNAME

flash bank $_CHIPNAME.otp stm32f2x 0x1fff7800 0 0 0 $_TARGETNAME

flash bank $_CHIPNAME.otp stm32f2x 0x1fff7800 0 0 0 $_TARGETNAME
_WORKAREASIZE 是OpenOcd调试使用的ram空间,一般把flash的编程程序放在这里,然后需要编程的数据也放在这里面。

flash bank $_FLASHNAME stm32f2x 指定flash的名称和驱动,这里如果需要适配自己厂家的芯片的话,flash驱动是需要自己实现的,如果各位小伙伴,以后进入MCU厂,这个flash驱动时​必须要会的。关于驱动的写法,阿目​有时间再介绍一篇文章,内容比较多。

interface文件中​简单配置:

echo "WARNING: interface/stlink-v2.cfg is deprecated, please switch to interface/stlink.cfg"
source [find interface/stlink.cfg]

只需要配置自己使用是哪个调试硬件平台就好,这是使用的是stlink​。

windows ​powershell 运行界面:

在这里插入图片描述

在这里插入图片描述

出现上述代表运行正常。其中第一个cfg文件为stlink接口文件 因为用的硬件为stlink,第二个cfg文件为板子对于芯片文件。stm32f407打开另一个cmd或者powershell arm-none-eabi-gdb .\rt-thread.elf
这个时候第一个窗口会显示:

这里的调试截图​来源,亲测可用,感谢博主:利用openocd 在windows环境下GDB调试(调试器 stlinkv2)STM32_xpack-openocd 调试stlink-CSDN博客

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

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

相关文章

2024多功能知识付费源码下载

多功能知识付费源码下载实现流量互导多渠道变现 源码介绍 资源变现类产品的许多优势,并剔除了那些无关紧要的元素,使得本产品在运营和变现能力方面实现了质的飞跃。多领域素材资源知识变现营销裂变独立版本。 支持:视频、音频、图文、文档…

【机器学习】揭秘无监督学习:机器如何自我学习发现数据奥秘

无监督学习:全面解析 引言 在机器学习的众多分支中,无监督学习因其在未标记数据上发现隐藏模式的能力而独树一帜。它不依赖于事先标记的输出,而是通过分析数据本身的结构和分布来揭示内在的关系和分类。本文深入探讨无监督学习的核心概念、…

2013年认证杯SPSSPRO杯数学建模C题(第一阶段)公路运输业对于国内生产总值的影响分析全过程文档及程序

2013年认证杯SPSSPRO杯数学建模 C题 公路运输业对于国内生产总值的影响分析 原题再现: 交通运输作为国民经济的载体,沟通生产和消费,在经济发展中扮演着极其重要的角色。纵观几百年来交通运输与经济发展的相互关系,生产水平越高…

学透Spring Boot 003 —— Spring 和 Spring Boot 常用注解(附面试题和思维导图)

这是 学透 Spring Boot 专栏 的第三篇,欢迎关注我,与我一起学习和探讨 Spring Boot 相关知识,学透 Spring Boot。 从面试题说起 今天我们通过一道和Spring Boot有关的常见面试题入手。 面试题:说说 Spring Boot 中有哪些常用注解…

图解PyTorch中的torch.gather函数和 scatter 函数

前言 torch.gather在目前基于 transformer or query based 的目标检测中,在最后获取目标结果时,经常用到。 这里记录下用法,防止之后又忘了。 介绍 torch.gather 官方文档对torch.gather()的定义非常简洁 定义:从原tensor中获…

[Java基础揉碎]注解

目录 介绍 基本的Annotation介绍 1) Override:限定某个方法,是重写父类方法,该注解只能用于方法 2) Deprecated: 用于表示某个程序元素(类,方法等)已过时 3) SuppressWarnings:抑制编译器警告 四大元注解 ​编辑 Retention ​编辑​编辑 Docume…

【MySQL】MySQL故障排查与环境优化

案例 MySQL是目前企业最常见的数据库之一 日常维护管理的过程中,会遇到很多故障 mysql默认配置无法满足高性能要求 数据流向 MySQL常见的故障案例 故障一 故障现象: ERROR 2002 (HY000): Cant connect to local MySQL server through socket data/m…

【计算机网络】select/poll

多路转接 - select/poll 一、I/O 多路转接之 select1. select 接口2. select 的使用3. select 的优缺点 二、I/O 多路转接之 poll1. poll 接口2. poll 的使用3. poll 与 select 的对比 一、I/O 多路转接之 select 多路转接属于 IO 复用方式的一种。系统提供 select() 函数来实…

如何在 Mac 上恢复已删除的数据

如果您丢失了 Mac 上的数据,请不要绝望。恢复数据比您想象的要容易,并且有很多方法可以尝试。 在 Mac 上遭受数据丢失是每个人都认为永远不会发生在他们身上的事情之一......直到它发生。不过,请不要担心,因为您可以通过多种方法…

数据结构(六)——图的应用

6.4 图的应用 6.4.1 最小生成树 对于⼀个带权连通⽆向图G (V, E),⽣成树不同,每棵树的权(即树中所有边上的权值之和)也可能不同。设R为G的所有⽣成树的集合,若T为R中边的权值之和最小的生成树,则T称为G的…

解析网约车微服务中台架构:打造智能高效的出行平台

随着互联网技术的不断发展,网约车行业已经成为了城市出行的重要方式之一。为了应对市场竞争和用户需求的不断变化,各大网约车平台纷纷采用了微服务中台架构,以构建智能高效的出行平台。本文将深入探讨网约车微服务中台架构的核心概念、关键特…

反序列化漏洞

常见的反序列化流量特征: 像这种st2 045、068、shiro反序列化、fastjson这些java反序列化一类的流量特征 shiro就看cookie中Rememberme字段,什么都要从这里传 fastjson:可以在提交的包中找找json格式的数据,重点看一下有无rmi或…

【操作系统】想要更好的学习计算机,操作系统的知识必不可少!!!

操作系统的概念 导言一、日常生活中的操作系统二、计算机系统层次结构三、操作系统的定义3.1 控制和管理计算机资源3.2 组织、调度计算机的工作与资源的分配3.3 给用户和其他软件提供方便接口与环境3.4 总结 四、操作系统的目标和功能4.1 作为管理者4.1.1 处理机管理4.1.2 存储…

记录Xshell使用ed25519公钥免密链接SSH

试了半天,Xshell好像没办法导入linux生成的ssh公钥,因此需要以下步骤实现免密登录 结论,在linux公钥文件中,将客户端生成的ed25519公钥加上去即可(一个公钥单独一行) 1.使用Linux生成秘钥文件(不需要输入私钥密码passphrase)或者直接创建一…

【css】文本过长溢出一行不换行普通css以及antd实现

.text-box { white-space: nowrap; /* 防止文字换行 */ overflow: hidden; /* 隐藏超出div的内容 */ text-overflow: ellipsis; /* 当内容超出时,显示省略号 */ max-width: calc(100% - 80px); /* 假设按钮宽度为80px,则设置div的最大宽度为容器宽度…

【企业管理精粹】华为腾讯全套人力资源管理精品资料合集

以下是华为&腾讯全套人力资源管理资料目录,如需下载,请前往星球下载,海量免费资料等你领取: 华为全套企业管理资料合集,共23专题。 1.绩效考核 华为内训绝密资料:绩效管理与绩效考核.ppt 华为绩效管理与绩效考核制…

软考高级架构师;线程的同步和互斥、临界区、临界资源、信号量、PV 操作概念和例题

作者:明明如月学长, CSDN 博客专家,大厂高级 Java 工程师,《性能优化方法论》作者、《解锁大厂思维:剖析《阿里巴巴Java开发手册》》、《再学经典:《Effective Java》独家解析》专栏作者。 热门文章推荐&am…

信息系统项目管理师——第15章项目风险管理

本章节内容属于10大管理知识领域,选择、案例、论文都会考。 选择题,稳定考3分左右,新教材基本考课本原话,这个分不能丢。 案例题,本期考的概率中等。 论文题,202305刚考过,这期不会考。 1管理基…

基于SSM的“电费管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SSM的“电费管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SSM,VUE 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统功能结构图 系统登录页面 用户列表信息页面 添加用户信…

mkcert生成ssl证书+nginx部署局域网内的https服务访问问题

文章目录 mkcert生成ssl证书nginx部署局域网内的https服务访问问题1、下载mkcert查看自己的电脑是arm还是amd架构 2、安装mkcert3、测试mkcert是否安装成功4、查看CA证书存放位置5、打开windows的证书控制台6、生成自签证书,可供局域网内使用其他主机访问以下是nginx部署https服…