在armv6 中 已经出现 分类的雏形,但未正式表明
armv6 还没推出 coresight 架构
armv6 的 debug架构分为两块
1. Debug 模块
2. Trace 模块
Debug 模块
介绍
与之前的不同
ARMv6之前
debug是一个附件,它通过在大多数实现中提供一个嵌入式宏单元建立了一些事实上的标准。
ARMv6
Debug体系结构的第一个版本,它包含了调试规定。
整体扩展概述
在ARMv6协处理器14中,支持被扩展为提供以下内容:
•调试识别寄存器(DIDR)
•调试状态和控制寄存器(DSCR)
•硬件断点和监视点支持
•DCC。
三种特性的更新
ARMv6之前
EmbeddedICE 和 DCC这些特性都是由实现定义的。
ARMv6
EmbeddedICE功能的完整功能集(软件接口)
1.传统上仅在外部调试接口上可用
2.例外情况是调试通信通道(DCC)的基于协处理器14的软件接口,有时称为调试通信通道或通信通道。
DCC(软件接口)
1.为调试监视器或应用程序提供专用的带外信息通道,例如,可以使用该通道来支持半宿主功能。
外部调试接口(硬件接口)
1.支持一组最低要求(调试启用、请求和确认信号),并可用于管理和控制调试事件。
2.ARM推荐的外部调试接口基于IEEE 1149.1测试访问端口(TAP)和边界扫描体系结构标准。
ARM规范是该标准的一个子集,仅用于访问ARMv6调试资源。
因此,术语debug在ARM接口文档中使用。
1.因此,例如,使用对调试测试访问端口(Debug TAP)的引用而不是TAP。
2.仅具有相关支持的指令和扫描链的逻辑调试TAP状态机(调试TAPSM)体系结构被指定为ARM规范。执行调试TAPSM转换的精确物理接口和机制没有被描述或被强制要求。
三种特性的支持:两种调试模式
为了支持这三种特性,需要(通过其DSCR)配置核心为以下两种调试模式之一:
停止调试模式
这允许系统在发生调试事件时进入调试状态。
当系统处于调试状态时,处理器核心停止,允许外部调试接口询问处理器上下文,并控制所有未来的指令执行。
当处理器停止时,它会忽略外部系统,并且无法服务中断。
监视调试模式 (通过在软件中设计 预取和数据中止 异常处理函数)
这会导致调试事件导致调试异常。
调试异常通过与预取和数据中止相同的异常向量(DebugMon_Handler)提供服务,这取决于它们是否与指令执行或数据访问相关。
两种调试模式对应的调试解决方案
调试解决方案可以同时使用这两种方法。架构完全支持在这两种模式之间切换的能力。
最值得注意的例子是支持一个操作系统(或RTOS)
它使用Monitor调试模式运行系统调试(RSD)
使用停止调试模式支持作为系统故障和启动时调试的后备。
两种调试模式都被禁用时
调试仅限于简单的(通常是基于ROM或Flash的)监视器解决方案。
这种监视器可以使用标准系统特性,从而最大限度地减少对系统资源的需求。
1.使用UART或以太网连接与调试主机通信。
2.它可以使用DCC作为到主机的带外通信信道.
在协处理器14中编程向量捕获寄存器(VCR)
编程, 调试事件发生时,可以捕获许多异常
不编程,执行流中将发生正常异常。
调试基础及发展
这构成了ARM®的调试程序员模型(DPM)的基础。
随着系统变得越来越复杂,集成度越来越高,调试的重要性也越来越大。
调试从监视核心扩展到监视和分析多个核心以及其他系统资源。预计调试架构将随着ARM架构的未来版本而发展和增长。
参考网页
https://max.book118.com/html/2019/0810/8105064107002041.shtm
https://zhidao.baidu.com/question/2117809839472734387.html
https://blog.csdn.net/andy205214/article/details/5408891
- Debug Events and Exceptions
调试事件
调试事件分类简述:
•软件调试事件。参见第D2-3页的软件调试事件。
•外部调试接口生成的事件,导致处理器进入调试状态。
这可能是由以下原因造成的:
-激活外部调试请求信号。见第D2-13页的外部调试请求信号。
-调试状态输入请求命令。请参阅第D2-13页的调试状态输入请求命令。
软件调试事件
软件调试事件可以是以下任一项:
•监视点调试事件。在以下情况下发生:
-DVA与监视点值匹配。用于比较的地址是虚拟地址还是修改后的虚拟地址是实现定义的。
-WCR的所有条件都匹配。
-监视点已启用。-持有BRP(如果有的话)的链接上下文ID被启用,其值与CP15寄存器13中的上下文ID相匹配。
-启动内存访问的指令被提交执行。只有当指令传递其条件代码时,才会生成观察点调试事件。
•断点调试事件。在以下情况下发生:
-指令是预取的,IVA与断点值匹配。用于比较的地址是虚拟地址还是修改后的虚拟地址是实现定义的。
-在预取指令的同时,BCR的所有条件都匹配。
-断点已启用。-在预取指令的同时,启用持有BRP(如果有的话)的链接Context ID,其值与CP15寄存器13中的上下文ID相匹配。
-指令已提交执行。
-无论指令是否通过其条件代码,都会生成这些调试事件。•在以下情况下也会发生断点调试事件:
-指令是预取的,CP15上下文ID(寄存器13)与断点值匹配。-在预取指令的同时,BCR的所有条件都匹配。
-断点已启用。-指令已提交执行。
-无论指令是否通过其条件代码,都会生成这些调试事件。•软件断点调试事件。当BKPT指令被提交执行时会发生这种情况。BKPT是无条件指令。
•矢量捕获调试事件。在以下情况下发生:
-指令是预取的,IVA与向量位置地址匹配。这包括任何类型的预取,而不仅仅是那些由于异常项引起的预取。用于比较的地址始终是虚拟地址,而不是修改后的虚拟地址。
-在预取指令的同时,设置VCR的相应位(启用矢量捕获)。
-指令已提交执行。
-无论指令是否通过其条件代码,都会生成这些调试事件。
外部调试接口生成的事件
调试状态输入请求命令
必须在外部调试接口上有一种机制,可强制处理器进入调试状态。
发生这种情况时,DSCR[5:2]将被设置为0b0000。
如果外部调试接口遵循ARM调试接口,则此机制是IR指令
外部调试请求信号
兼容ARMv6的处理器必须具有外部调试请求输入信号。
这种类型的请求会导致处理器进入调试状态。
如果发生这种情况,DSCR[5:2]将被设置为0b0100。
该信号可由ETM驱动,向处理器发送触发器信号。
例如,如果处理器处于停止调试模式,并且发生内存权限错误,则外部跟踪分析器可以在处理器停止的同时收集有关此触发器事件的跟踪信息。
调试事件的响应
处理器以下列方式之一响应调试事件:
•忽略调试事件
•进入调试状态
•进入调试异常。
响应取决于表D2-1所示的配置。
a.禁用调试时,BKPT指令生成预取中止异常,而不是被忽略。
b.在这些情况下,处理器将忽略调试事件或进入调试状态,并且在所有情况下都具有相同的行为。当使用DBGEN通过外部调试接口禁用调试(请参阅第D2-13页的外部调试接口)时,将忽略这些调试事件。
c.预取中止和数据中止矢量捕获调试事件在监视调试模式下被忽略。如果处理器在特权模式下运行,并且选择并启用了监视调试模式,则也会忽略未链接的上下文ID断点调试事件。如果将BVR设置为IVA与BCR[22]==0b1进行比较,并且处理器正在特权模式下运行,并且选择并启用了监视调试模式,则忽略来自该资源的断点调试事件。
ARM处理器的传统外部调试接口基于IEEE1149.1标准。
满足一些要求,ARMv6实现也可以使用任何其他接口.
Trace 模块
跟踪
1.跟踪支持是一种架构扩展,通常使用嵌入式跟踪宏单元(ETM)实现。
2.ETM 构造 与处理器操作相对应的 实时跟踪流。
3.使用ETM是非侵入性的。
4.开发工具可以连接到ETM,对其进行配置,捕获跟踪并下载跟踪,而不会以任何方式影响处理器的操作。
5.跟踪体系结构扩展提供了运行时系统观察和调试粒度的增强级别。
跟踪的使用情况:
•停止核心影响系统的行为。
•当检测到问题时,系统中的状态不足以确定其原因。
Trace提供了一种系统日志记录和故障回溯机制。
跟踪还可用于对处理器上运行的代码执行分析,例如性能分析或代码覆盖率。
ETM体系结构指定了以下内容:
•ETM程序员模型
•允许的跟踪协议格式
•物理跟踪端口连接器。
ETM实现定义了
1.跟踪流
是本地存储在嵌入式跟踪缓冲区(ETB)中供独立下载和分析
还是通过跟踪端口直接导出到跟踪端口分析器(TPA)
2.其相关的基于主机的跟踪调试工具。
ETM相关文档
ETM体系结构被放到了单独的文档。
ETM版本
当前的主要版本(与ARMv6保持一致)是ETMv3。
之后每一种微架构都对应 一种 ETM实现
cortex-M4 的 ETM DDI0440C_etm_m4_r0p1_trm.pdf
cortex-M23 的 ETM coresight_etm_m23_r0p1_technical_reference_manual_DDI0563C_en.pdf
ETM架构版本定义为一个主要部分和一个次要部分,格式为ETMvXY,其中X是主要版本号,Y是次要版本号。
ETMv3更新了什么
•提供更高压缩级别的跟踪协议格式
•当FIFO接近满时自动抑制数据跟踪,在允许指令跟踪继续时防止溢出
•在允许数据跟踪继续时禁用指令跟踪的能力
•从正在跟踪的处理器控制ETM
•对进程敏感的筛选和触发
•跟踪端口与核心时钟频率分离。