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

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.rhkb.cn/news/294214.html

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

相关文章

搭建Flutter开发环境、从零基础到精通(文末送书【北大出版社】)

目录 搭建开发环境 1. 下载Flutter SDK 2. 设置镜像地址及环境变量 3. 安装与设置Android Studio 4. 安装Visual Studio Code与Flutter开发插件 5. IDE的使用和配置 6. 安装Xcode 7. 检查Flutter开发环境 好书推荐 内容简介 作者简介 搭建开发环境 Flutter可以跨平…

【数据结构】非线性结构---二叉树

1、树 1.1 树的相关概念 节点的度:一个节点含有的子树的个数称为该节点的度; 如上图:A的为6 叶节点或终端节点:度为0的节点称为叶节点; 如上图:B、C、H、I...等节点为叶节点 非终端节点或分支节点&#…

[flink 实时流基础] 输出算子(Sink)

学习笔记 Flink作为数据处理框架,最终还是要把计算处理的结果写入外部存储,为外部应用提供支持。 文章目录 **连接到外部系统****输出到文件**输出到 Kafka输出到 mysql自定义 sink 连接到外部系统 Flink的DataStream API专门提供了向外部写入数据的方…

128:忆往昔,迎春来

机缘 时间真的是过得好快啊,128,距离我的第一篇博客已经128天了,从大一上的冬天,到大一下的春夏,从一个初入大学的新人,到一个开始思考未来的新人。我开始不断更新博客,开始不断吸收知识&#…

【21-40】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了

【21-40】计算机网络基础知识(非常详细)从零基础入门到精通,看完这一篇就够了 以下是本文参考的资料 欢迎大家查收原版 本版本仅作个人笔记使用21、HTTPS是如何保证数据传输的安全,整体的流程是什么?(SSL是…

【Servlet】Servlet入门

文章目录 一、介绍二、入门案例导入servlet-api的解决办法 一、介绍 概念:server applet,即:运行在服务器端的小程序 Servlet就是一个接口,定义了Java类被浏览器访问到(tomcat识别)的规则。 将来我们定义…

Spring Boot | Spring Boot的“数据访问“、Spring Boot“整合MyBatis“

目录: 一、Spring Boot”数据访问概述“二、Spring Boot”整合MyBatis”1. 基础环境搭建 (引入对应的“依赖启动器” 配置数据库的“相关参数”)① 数据准备 (导入Sql文件)② 创建项目,引入相应的启动器,编写数据库对应的“实体类”③额外添加pom.xml文…

海康Ehome2.0与5.0设备接入EasyCVR视频汇聚平台时的配置区别

安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台可拓展性强、视频能力灵活、部署轻快,可支持的主流标准协议有国标GB28181、RTSP/Onvif、RTMP等,以及支持厂家私有协议与SDK接入,包括海康Ehome、海大宇等设备的SDK等。平台既具备传统安…

【Ubuntu】用 VMware 安装 macOS

本教程使用 Ubuntu 20.04.6 LTS,VMware Workstation Pro 17.5.1,macOS Sonoma 14.4。文中所有需要的下载链接均以 Markdown 的形式体现在文字上。 下载 VMware Workstation Pro,目前最新版本是 17.5.1。 使用密钥,进行破解。 VM…

SpringBoot+uniApp宠物领养小程序系统 附带详细运行指导视频

文章目录 一、项目演示二、项目介绍三、运行截图四、主要代码1.保存宠物信息代码2.提交订单信息代码3.查询评论信息代码 一、项目演示 项目演示地址: 视频地址 二、项目介绍 项目描述:这是一个基于SpringBootuniApp框架开发的宠物领养微信小程序系统。…

R语言,数据类型转换

原文链接:R语言技能 | 不同数据类型的转换 本期教程 写在前面 今天是4月份的第一天,再过2天后再一次迎来清明小假期。木鸡大家是否正常放假呢? 我们在使用R语言做数据分析时,会一直对数据进行不同类型的转换,有时候…

【Java】API——Calendar日期类使用+题目演示

目录 Calendar日期类简单介绍 导入对应包: 获取 Calendar 对象: 设置日期和时间: 获取日期和时间的各个部分: 日期和时间的加减操作: 例题:世纪末的星期 题目描述 题目代码 Calendar日期类简单介绍…

typescript 实现RabbitMQ死信队列和延迟队列 订单10分钟未付归还库存

Manjaro安装RabbitMQ 安装 sudo pacman -S rabbitmq rabbitmqadmin启动管理模块 sudo rabbitmq-plugins enable rabbitmq_managementsudo rabbitmq-server管理界面 http://127.0.0.1:15672/ 默认用户名和密码都是guest。 要使用 rabbitmqctl 命令添加用户并分配权限&#xf…

Java类和对象练习题

练习一 下面代码的运行结果是() public static void main(String[] args){String s;System.out.println("s"s);} 解析:本题中的代码不能编译通过,因为在Java当中局部变量必须先初始化,后使用。所以此处编译不…

【Python刷题】将有序数组转换为二叉搜索树

问题描述 给你一个整数数组 nums ,其中元素已经按 升序 排列,请你将其转换为一棵 平衡 二叉搜索树。 高度平衡的意思是:二叉树是一颗满足“每个结点的左右两个子树的高度差的绝对值不超过1”的二叉树。 示例 1: 输入&#xf…

农村集中式生活污水分质处理及循环利用技术指南

立项单位:生态环境部土壤与农业农村生态环境监管技术中心、山东文远环保科技股份有限公司、北京易境创联环保有限公司、中国环境科学研究院、广东省环境科学研究院、中铁第五勘察设计院集团有限公司、中华环保联合会水环境治理专业委员会 本文件规定了集中式村镇生活…

Stable Diffusion 模型下载:epiCPhotoGasm(真实、照片)

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里,订阅后可阅读专栏内所有文章。 文章目录 模型介绍生成案例案例一案例二案例三案例四案例五案例六案例七案例八下载地址模型介绍

语音克隆技术浪潮:探索OpenAI Voice Engine的奇妙之旅

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗?订阅我们的简报,深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同,从行业内部的深度分析和实用指南中受益。不要错过这个机会,成为AI领…

基于SpringBoot的“校园志愿者管理系统”的设计与实现(源码+数据库+文档+PPT)

基于SpringBoot的“校园志愿者管理系统”的设计与实现(源码数据库文档PPT) 开发语言:Java 数据库:MySQL 技术:SpringBoot 工具:IDEA/Ecilpse、Navicat、Maven 系统展示 系统总体结构图 系统首页界面图 志愿者注册…

游戏引擎中的声音系统

一、声音基础 1.1 音量 声音振幅的大小 压强p:由声音引起的与环境大气压的局部偏差 1.2 音调 1.3 音色 1.4 降噪 1.5 人的听觉范围 1.6 电子音乐 将自然界中连续的音乐转换成离散的信号记录到内存中 采样 - 量化 - 编码 香农定理:采样频率是信…