ARMv8-A架构下的外部debug模型(external debug)简介

news2024/10/9 22:24:24

Armv8-A external debug

  • Armv8-A debug模型
  • 一,外部调试 External debug 简介
  • 二,Debug state
    • 2.1 Debug state的进入与退出
  • 三,DAP,Debug Access Port
    • 3.1 EDSCR, External Debug Status and Control Register
      • 调试状态标识,STATUS, bits [5:0]
      • 错误累积标识,ERR, bit [6]
      • SError pending标识位,A, bit [7]
      • 异常等级和执行状态,RW, bits [13:10]
      • 异常等级,EL, bits [9:8]
      • 中止运行并调试使能,HDE, bit [14]
    • EDECR,External Debug Execution Control Register
      • SS, bit [2]
      • RCE, bit [1]
      • OSUCE, bit [0]

Armv8-A debug模型

ARMv8-A架构支持两种debug模型:self-host debug 和 external debug。

  • Self-host debug (自主机调试),调试器运行在被调试的CPU内部,调试器代码可以是 应用程序、内核、操作系统以及hypervisor。比如我们常见的GDB调试,就是使用self-host debug模型。Debug exception就是自主机调试的基础,调试器通过代码来控制debug 逻辑单元,从而产生debug 事件,而这些debug事件又会进一步产生debug 异常。笔者将会下篇博文中对self-host debug 模型进行详细介绍。
  • External debug (外部调试),调试器在被调试的CPU外部。Debug state是 外部调试 模型的基础。调试器控制debug 逻辑单元产生debug 事件,而这些debug事件又会导致CPU进入Debug state(调试状态)。

本文主要介绍Armv8-A 架构下的 外部调试(external debug)模型 。

一,外部调试 External debug 简介

Armv8-A 的外部调试模型 的最大特点就是调试器位于 CPU 外部,这个外部的调试器通过debug 接口比如JTAG,与被调试的CPU相连,可以控制CPU进行如下操作:

  • 当异常事件发生时,停止程序运行。
  • 检查 或者 改变 CPU 架构性的寄存器的状态。
  • 控制CPU 执行指令,去访问内存。

如下图所示,外部的debugger可以通过配置一些调试逻辑单元里的寄存器(debug register file),触发一个debug 事件,或者也可以让调试逻辑单元发出一个debug 停止请求(debug halt 或者 debug restart)的信号给CPU,进而控制CPU进入Debug state。
在这里插入图片描述
如下图所示,为一个标准的external debug 工作流程:

  1. 外部PC主机连接着一个外部调试器,同时主机上在运行控制调试器的应用程序
  2. 调试器通过debug 接口,比如JTAG,连接到处理器,与处理器的调试逻辑单元进行交互,控制处理器。

在debug state下,处理器在ITR(Instruction Transfer Register)中执行指令,外部调试器可以通过外部调试接口,往ITR中插入指令。DCC(Debug Communication Channel ) 则用于处理器和外部调试器进行通信的模块。
在这里插入图片描述

二,Debug state

上文讲过,外部调试模型的基础就是debug state,当debug事件发生时,外部调试器会控制调试逻辑单元进入调试状态。调试状态(debug state)又称为 halting debug state(停止调试状态)。当处理器进入debug state时,会按顺序发生以下操作:

  • 处理器会停止执行位于PC寄存器中的地址上的指令,并且调试器通过外部调试接口开始控制处理器。
  • 调试器通过外部调试接口,使用 ITR (Instruction Transfer Register)向处理器传输指令,让其执行,其中包括:
    • 通过ITR让处理器执行指令,调试器可以读写 处理器架构内的寄存器,比如通用寄存器、系统寄存器以及浮点寄存器等等。
    • 通过ITR让处理器执行指令,调试器还可以让处理器去访问内存。
  • DCC 中的DTR(Data Transfer Registers)可以被外部调试接口以及系统寄存器接口访问,并且DCC在处理器和外部调试器之间交换数据起到了重要作用。
  • 在调试状态下,处理器无法处理中断。

2.1 Debug state的进入与退出

当处理器进入调试状态时,会发生:

  • 处理器在未进入调试状态之前的PSTATE的值,将会被存储在DSPSR(Debug Saved Program
    Status Register)寄存器当中。就如同进入异常前将PSTATE保存到SPSR中一样。
  • 将之后重新开始的地址(从调试状态退出后,继续执行指令的地址)保存到调试链接寄存器Debug Link Register (DLR).中。就如同进入异常处理时的ELR寄存器中一样。
  • 处理器停止执行PC寄存器指向的指令。
  • 中断将不再被处理。
  • 外部调试器将接管处理器。

当处理器处于调试状态时,外部调试器可以:

  • 查看并修改 内存空间以及架构性寄存器上的内容,包括DLR和DSPSR。
  • 使用ITR向处理器传递指令让处理器执行。
  • 使用DCC与处理器之间进行数据交互。
  • 通过DCPS和DRPS指令,改变处理器的异常等级。
  • 通过触发一个重新启动的请求可以离开调试状态。

当外部调试器发出了重新启动的请求,处理器将会离开调试状态,当处理器离开调试状态时,会发生:

  • 将DLR中的地址恢复到PC寄存器当中。
  • 将DSPSR寄存器保存的状态恢复到PSTATE中。
  • 处理器继续从当前PC所指向的指令开始执行。

下图描述了当处理器在正常执行代码时,进入调试状态和离开调试状态的流程:
在这里插入图片描述
外部调试模型通常会用于:

  • 点亮硬件系统,hardware bring-up: 在系统开发阶段,硬件系统第一次被启动的时候,一些软件功能还不健全甚至不存在,所以需要外部调试器来接管硬件系统。
  • 调试深度嵌入在系统中的处理器。

三,DAP,Debug Access Port

在外部调试模型中,外部调试器可以通过外部调试接口来访问debug 寄存器,这意味着访问外部调试接口的方式是由架构实现定义的。在大多数ARMv8-A系统中,都会包含一个调试访问端口(DAP),处理器外部的调试器可以用DAP来访问外部调试接口。此外,若是片上外部调试器(On-chip external debuggers),比如使用一个处理器来调试另一个处理器,可以使用内存映射接口(memory mapped interface)来访问外部调试接口。如下图所示,为使用DAP来访问外部调试接口的示例,通过DAP,不仅可以访问处理器的调试逻辑单元(ITR和DCC),还能绕过处理器,直接访问内存系统:
在这里插入图片描述
外部调试寄存器,又称为中止模式调试寄存器(halt mode debug registers),通常以ED开头,比如EDSCR和EDECR。

3.1 EDSCR, External Debug Status and Control Register

外部调试状态和控制寄存器EDSCR,是处理器调试实现当中的主控寄存器,下图为EDSCR寄存器的字段划分示意图:
在这里插入图片描述
下面介绍EDSCR的几个常用的字段:

调试状态标识,STATUS, bits [5:0]

通过EDSCR的STATUS字段,可以知道处理器当前处于何种调试状态:
在这里插入图片描述

错误累积标识,ERR, bit [6]

调试错误累积标识位,在调试状态和出现DTR或EDITR上任何信号溢出或欠运行(overrun or underrun)的异常时,此位被设置为1。

SError pending标识位,A, bit [7]

SError中断的pending标识,在调试模式下,用于指示是否有挂起的SError 中断(pending):

如果HCR_EL2.{AMO, TGE} = {1, 0},EL2在当前安全状态下被使能,并且处理器运行在EL0或EL1下,表面是一个虚拟的SError 中断。
否则,将是一个物理的SError中断:

  • 0b0 No SError interrupt pending.
  • 0b1 SError interrupt pending.

调试器可以读取EDSCR寄存器来检查当前处理器在没有进一步执行指令的情况下,是否收到了SError中断(pending),一个pending的SError可能表明了从目标内存系统上获取到的数据已丢失或者错误。

异常等级和执行状态,RW, bits [13:10]

通过RW字段,可以知道当前处理器的异常等级和执行状态
在这里插入图片描述

异常等级,EL, bits [9:8]

在调试状态下,EL字段表明了当前处理器的异常等级。

中止运行并调试使能,HDE, bit [14]

EDSCR的HDE为1时,处理器可以被Breakpoint, Watchpoint 以及Halt Instruction等debug event 打断,进入调试状态。

  • 0b0 Halting disabled for Breakpoint, Watchpoint and Halt Instruction debug events.
  • 0b1 Halting enabled for Breakpoint, Watchpoint and Halt Instruction debug events

EDECR,External Debug Execution Control Register

EDECR寄存器可以控制中止处理器的各种调试事件(Halting debug events)。
在这里插入图片描述

SS, bit [2]

EDECR寄存器的SS字段可以控制Halting step debug event是否能中止处理器的运行:

  • 0b0 Halting step debug event disabled.
  • 0b1 Halting step debug event enabled.

如果在非调试状态下改变EDECR.SS的值,其行为时不可预测的。
If the value of EDECR.SS is changed when the PE is in Non-debug state, behavior is CONSTRAINED

RCE, bit [1]

EDECR寄存器的RCE字段可以控制Reset catch debug event是否能中止处理器的运行:

  • 0b0 Reset Catch debug event disabled.
  • 0b1 Reset Catch debug event enabled.

OSUCE, bit [0]

EDECR寄存器的OSUCE字段可以控制OS unlock catch debug event是否能中止处理器的运行:

  • 0b0 OS Unlock Catch debug event disabled.
  • 0b1 OS Unlock Catch debug event enabled.
    在这里插入图片描述

Armv8-A external debug

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Midjourney绘图欣赏系列(十四)

Midjourney介绍 Midjourney 是生成式人工智能的一个很好的例子,它根据文本提示创建图像。它与 Dall-E 和 Stable Diffusion 一起成为最流行的 AI 艺术创作工具之一。与竞争对手不同,Midjourney 是自筹资金且闭源的,因此确切了解其幕后内容尚不…

什么是自然语言处理(NLP)?

此为观看视频What is NLP (Natural Language Processing)?后的笔记。 你正在看这个视频,试图理解作者说的单词和句子,当我们要求计算机做到这一点时,这就是 NLP,即自然语言处理。 NLP 在人工智能应用中实用价值很高。NLP 从非结构…

C++项目——集群聊天服务器项目(七)Model层设计、注册业务实现

在前几节的研究中,我们已经实现网络层与业务层分离,本节实现数据层与业务层分离,降低各层之间的耦合性,同时实现用户注册业务。 网络层专注于处理网络通信与读写事件 业务层专注于处理读写事件到来时所需求的各项业务 数据层专…

Mysql从0到1 —— CRUD/索引/事务

文章目录 1 预备知识1.1 安装1.2 登录 & 退出1.3 配置文件my.cnf 2 基础知识2.1 链接服务器2.2 什么是数据库2.3 基本使用2.3.1创建表2.3.2 插入数据 2.4 服务器、数据库、表的关系2.5 SQL分类2.6 存储引擎 3 Mysql数据库的操作3.1 创建和删除3.2 字符集和校验规则3.3 查看…

YOLOv8全网独家改进:红外小目标 | 注意力机制改进 | 维度感知选择性集成模块DASI,红外小目标暴力涨点| 2024年3月最新成果

💡💡💡本文独家改进:维度感知选择性集成模块DASI,解决目标的大小微小以及红外图像中通常具有复杂的背景的问题点,2024年3月最新成果 💡💡💡红外小目标实现暴力涨点,只有几个像素的小目标识别率大幅度提升 改进结构图如下: 收录 YOLOv8原创自研 https://blo…

Challenging BIG-Bench tasks and whether chain-of-thought can solve them阅读笔记

不是新文章哈,就是最近要看下思维链(chain of thought,CoT)这块,然后做点review。 文章链接(2022年):https://arxiv.org/pdf/2210.09261.pdf GitHub链接:GitHub - suzg…

100个AI Agent应用场景合集

人工智能代理(AI Agent)的发展正在以前所未有的速度改变我们的生活和工作方式。从日常生活的小事到企业级的复杂决策,AI Agent 的应用场景广泛且多样。 100个AI Agent应用场景合集 以下是 100 个 AI Agent 的创新应用场景,它们展示…

代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯

代码随想录算法训练营第三十八天 | 509. 斐波那契数、70. 爬楼梯、746. 使用最小花费爬楼梯 509. 斐波那契数题目解法 70. 爬楼梯题目解法 746. 使用最小花费爬楼梯题目解法 感悟 509. 斐波那契数 题目 解法 使用动态规划 class Solution { public:int fib(int n) {if(n <…

书生浦语训练营2期-第一节课笔记

笔记总结: 了解大模型的发展方向、本质、以及新一代数据清洗过滤技术、从模型到应用的典型流程、获取数据集的网站、不同微调方式的使用场景和训练数据是什么&#xff0c;以及预训练和微调在训练优势、通信/计算调度、显存管理上的区别。 收获&#xff1a; 理清了预训练和微调…

unity学习(77)--多玩家信息交互--不同类型的数据包

明白各个数据包的作用&#xff0c;以及是否正确的发挥作用 1.“120包”&#xff0c;客户端登录时发给服务器的&#xff0c;服务器处理后返回“121包”。 2.“121包” &#xff0c;服务器返回给客户端的&#xff0c;包含登录时所有在线玩家的信息。 客户端也通过createPlayer函…

故障诊断 | 一文解决,CNN-BiLSTM卷积神经网络-双向长短期记忆神经网络组合模型的故障诊断(Matlab)

效果一览 文章概述 故障诊断 | 一文解决,CNN-BiLSTM卷积神经网络-双向长短期记忆神经网络组合模型的故障诊断(Matlab) 模型描述 CNN-BiLSTM卷积神经网络-双向长短期记忆神经网络组合模型是一种深度学习模型,结合了卷积神经网络(CNN)和双向长短期记忆网络(BiLSTM)的优点…

缺省和重载.引用——初识c++

. 个人主页&#xff1a;晓风飞 专栏&#xff1a;数据结构|Linux|C语言 路漫漫其修远兮&#xff0c;吾将上下而求索 文章目录 C输入&输出cout 和cin<<>> 缺省参数全缺省半缺省应用场景声明和定义分离的情况 函数重载1.参数的类型不同2.参数的个数不同3.参数的顺…

速成软件书是神器还是焦虑?

一、背景 "速成软件书"通常是指那些宣称能帮助读者在短时间内掌握某种软件操作或编程技能的书籍。这类书籍往往以其高效、快捷的学习路径吸引读者&#xff0c;尤其适合有一定基础或者急需短期内提升特定技能的人群。 然而&#xff0c;“神器”之称则带有主观性和一…

Python:执行py命令,提示: Can‘t find a default Python.

1.Python运行环境罢工 今天&#xff0c;要运行一个前年用python编写的爬虫程序&#xff0c;先检测python运行环境是否正常&#xff1a; D:\Python38-32\works>c:\windows\py.exe Cant find a default Python. 再试&#xff1a; D:\Python38-32\works>py --list Installe…

电子版各大主流报纸查看方法

2024-03-22 更新到V1.1.01.修复科技日报下载后都是第1页的bug2.增加“中国旅游报”“中国文物报”两个报种3.设置自动保存勾选结果若干说明&#xff1a; 1.本工具是提供提供数字报阅读的报种的下载&#xff0c;一般来说只有能看&#xff0c;才有所谓的下载2.如果朋友们有什么好…

python3将exe 转支持库错误 AssertionError: None does not smell like code

exe -> pyc包(*.exe_extracted) 安装反编译工具 exe反编译工具&#xff1a;pyinstxtractor.py下载&#xff1a;https://sourceforge.net/projects/pyinstallerextractor/ python pyinstxtractor.py hello.exe包反编译 懒的写&#xff01;&#xff01;&#xff01; 这有详…

【项目技术介绍篇】若依开源项目RuoYi-Cloud后端技术介绍

作者介绍&#xff1a;本人笔名姑苏老陈&#xff0c;从事JAVA开发工作十多年了&#xff0c;带过大学刚毕业的实习生&#xff0c;也带过技术团队。最近有个朋友的表弟&#xff0c;马上要大学毕业了&#xff0c;想从事JAVA开发工作&#xff0c;但不知道从何处入手。于是&#xff0…

Matlab|电动汽车充放电V2G模型

目录 1 主要内容 1.1 模型背景 1.2 目标函数 1.3 约束条件 2 部分代码 3 效果图 4 下载链接 1 主要内容 本程序主要建立电动汽车充放电V2G模型&#xff0c;采用粒子群算法&#xff0c;在保证电动汽车用户出行需求的前提下&#xff0c;为了使工作区域电动汽车尽可能多的消…

跳跃游戏-java

题目描述: 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解题思想: …

【MySQL】事务日志

事务的隔离性由锁机制实现&#xff0c;事务的原子性、一致性和持久性由redo日志和undo日志实现。 一、redo日志 1.1、为什么需要redo日志 一方面&#xff0c;由于数据从内存写回磁盘需要一定的时间&#xff0c;假如在事务提交后&#xff0c;还没有写回磁盘&#xff0c;数据库…