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.mzph.cn/news/786427.shtml

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

相关文章

Docker搭建LNMP环境实战(07):安装nginx

1、模拟应用场景描述 假设我要搭建一个站点,假设虚拟的域名为:api.test.site,利用docker实现nginxphp-fpmmariadb部署。 2、目录结构 2.1、dockers根目录 由于目前的安装是基于Win10VMWareCentOS虚拟机,同时已经安装了VMWareT…

《2023腾讯云容器和函数计算技术实践精选集》--在 K8s 上跑腾讯云 Serverless 函数,打破传统方式造就新变革

目录 目录 前言 《2023腾讯云容器和函数计算技术实践精选集》带来的思考 1、特色亮点 2、阅读体验 3、实用建议 4、整体评价 Serverless 和 K8s 的优势 1、关于Serverless 函数的特点 2、K8s 的特点 腾讯云 Serverless 函数在 K8s 上的应用对企业服务的影响 案例分…

vue3 记录页面滚动条的位置,并在切换路由时存储或者取消

需求,当页面内容超出了浏览器可是屏幕的高度时,页面会出现滚动条。当我们滚动到某个位置时,操作了其他事件或者跳转了路由,再次回来时,希望还在当时滚动的位置。那我们就进行一下操作。 我是利用了会话存储 sessionSto…

Linux华为云Hadoop配置环境

手工搭建Hadoop环境(Linux)_弹性云服务器 ECS_最佳实践 (huaweicloud.com)https://support.huaweicloud.com/bestpractice-ecs/zh-cn_topic_0000001698668477.html?localezh-cn#ZH-CN_TOPIC_0000001698668477__li49001945163110跟着傻瓜式CV即可。 气死…

目标检测:数据集划分 XML数据集转YOLO标签

文章目录 1、前言:2、生成对应的类名3、xml转为yolo的label形式4、优化代码5、划分数据集6、画目录树7、目标检测系列文章 1、前言: 本文演示如何划分数据集,以及将VOC标注的xml数据转为YOLO标注的txt格式,且生成classes的txt文件…

Nginx 日志输出配置json格式

nginx日志输出配置json格式 nginx服务器日志相关指令主要有两条: (1) 一条是log_format,用来设置日志格式 (2) 另外一条是access_log,用来指定日志文件的存放路径、格式和缓存大小。 log_format指令用来设置日志的记录格式,它的语…

iOS移动应用实时查看运行日志的最佳实践

目录 一、设备连接 二、使用克魔助手查看日志 三、过滤我们自己App的日志 📝 摘要: 本文介绍了如何在iOS iPhone设备上实时查看输出在console控制台的日志。通过克魔助手工具,我们可以连接手机并方便地筛选我们自己App的日志。 &#x1f4…

目标检测——工业安全生产环境违规使用手机的识别

一、重要性及意义 首先,工业安全生产环境涉及到许多复杂的工艺和设备,这些设备和工艺往往需要高精度的操作和严格的监管。如果员工在生产过程中违规使用手机,不仅可能分散其注意力,降低工作效率,更可能因操作失误导致…

云原生技术赋能AI绘图:Stable Diffusion在腾讯云的部署与应用新篇章

摘要 随着信息技术的飞速发展和数字化转型的深入推进,云原生架构已成为企业数字化转型的重要基石。Docker容器、Serverless和微服务等技术作为云原生的核心组成部分,正在不断推动着企业应用架构的革新与升级。本文旨在总结近期在云原生实践、容器技术、…

混合现实(MR)开发工具

混合现实(MR)开发工具是一系列软件和框架,它们使得开发者能够创建和优化能够在虚拟与现实世界之间无缝交互的应用程序。以下是一些在MR领域内广泛使用的开发工具。 1.Microsoft Mixed Reality Toolkit (MRTK) MRTK是一个跨平台的工具包&…

【操作系统】FCFS、SJF、HRRN、RR、EDF、LLF调度算法及python实现代码

文章目录 一、先来先服务调度算法(FCFS) 二、短作业优先调度算法(SJF) 三、高响应比优先调度算法(HRRN) 四、轮转调度算法(RR) 五、最早截至时间优先算法(EDF&#…

Mysql故障解析

目录 一、Mysql单实例故障排查 1.故障一 2.故障二 3.故障三 4.故障四 5.故障五 6.故障六 7.故障七 8.故障八 二、Mysql主从故障排查 1.故障一 2.故障二 3.故障三 三、Mysql优化 1.硬件方面 (1)关于CPU (2)关于内…

Autodesk 3DS MAX 2025 (3Dmax2025)激活版

3ds Max 2025 是一款功能强大的3D建模、动画和渲染软件,广泛应用于建筑、游戏开发、影视制作等多个领域。在材质设定和描影、3D彩现以及动画和效果方面,3ds Max 2025也提供了丰富的增强功能,以满足用户在不同制作需求中的要求。 3ds Max 2025…

Linux多进程通信(2)——POSIX信号量使用例程

1.POSIX信号量 1)POSIX信号量和System V信号量区别 常用的是POSIX信号量,使用起来更加方便,而POSIX信号量分为有名信号量和无名信号量 POSIX信号量是多线程多进程安全的,而System V标准的信号量并不是,Posix通过sem_…

外包干了25天,技术倒退明显

先说情况,大专毕业,18年通过校招进入湖南某软件公司,干了接近6年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试&#xf…

Mysql中的 IFNULL 函数的详解

Mysql中的 IFNULL 函数的详解 概念 在mysql中IFNULL() 函数用于判断第一个表达式是否为 NULL,如果第一个值不为NULL就执行第一个值。第一个值为 NULL 则返回第二个参数的值。 语法 IFNULL(a, b)Demo 举例说明 创建表 create table student_one( sno varchar(20)…

机器学习: 绪论(基础概念)

文章目录 一、机器学习做什么二、机器学习的基本术语2.1、数据相关2.1.1、数据集2.1.2、特征(Feature)2.1.3、样本空间(Sample Space) 2.2、任务相关2.2.1、分类2.2.2、回归2.2.3、聚类2.2.4、监督学习和无监督学习 三、机器学习思…

智乃想考一道鸽巢原理

题目 思路&#xff1a; #include <bits/stdc.h> using namespace std; #define int long long #define pb push_back #define fi first #define se second #define lson p << 1 #define rson p << 1 | 1 const int maxn 1e6 5, inf 1e9, maxm 4e4 5; co…

VSCode 设置vue2模板

点击设置 > 用户代码片段 > 输入Vue &#xff08;打开vue.json&#xff09;> 将代码复制内 "Print to console": {"prefix": "<","body": ["<template>"," <div class$1></div>"…

苹果App上架指南

苹果上架要求是苹果公司对于提交应用程序到苹果商店上架的要求和规定。这些要求主要是为了保证用户体验、应用程序的质量和安全性。以下是苹果上架要求的详细介绍&#xff1a;1. 应用程序的内容和功能必须符合苹果公司的规 苹果上架要求是苹果公司对于提交应用程序到苹果商店上…