当前位置: 首页 > news >正文

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

相关文章:

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

Armv8-A external debug Armv8-A debug模型一,外部调试 External debug 简介二,Debug state2.1 Debug state的进入与退出 三,DAP,Debug Access Port3.1 EDSCR, External Debug Status and Control Register调试状态标识&#xff0…...

DevOps入门

DevOps入门 1. 基础概念和原则 了解DevOps的定义、历史和主要目标 DevOps是一种将软件开发(Dev)与信息技术运维(Ops)结合起来的文化、运动或实践,旨在缩短系统开发生命周期,同时提供高质量的持续交付。DevOps的历史可以追溯到敏捷软件开发的兴起,它强调了开发和运维团队之…...

Docker搭建私有镜像仓库

1.Docker镜像仓库 搭建镜像仓库可以基于Docker官方提供的DockerRegistry来实现。 官网地址:https://hub.docker.com/_/registry 1.1.简化版镜像仓库 Docker官方的Docker Registry是一个基础版本的Docker镜像仓库,具备仓库管理的完整功能,…...

流行的API架构学习

几种流行的API架构风格图 SOAP(Simple Object Access Protocol) 优点:SOAP 是一种基于 XML 的通信协议,具有良好的跨平台和跨语言支持。它提供了丰富的安全性和事务管理功能,并支持复杂的消息交换模式。 缺点&#xf…...

问题解决:Fatal Python error: initfsencoding: unable to load the file system codec

问题: "D:\...Climb_C_site\venv\Scripts\python.exe" "D:\...\Small_Case\change_suffix.py" Fatal Python error: initfsencoding: unable to load the file system codec ModuleNotFoundError: No module named encodingsCurrent thread 0x…...

WPF —— TreeView树形控件

1 TreeView简介 TreeView 表示一个控件,该控件在树结构(其中的项可以展开和折叠)中显示分层数据。 TreeView 是一个 ItemsControl,这意味着它可以包含任何类型的对象的集合 (,例如字符串、图像或面板) 。 2 Tree Vie…...

2024.2.20力扣每日一题——从前序和中序遍历序列构建二叉树

2024.2.20 题目来源我的题解方法一 递归方法二 迭代 题目来源 力扣每日一题;题序:105 我的题解 方法一 递归 前序特点:[ 根节点, [左子树的前序遍历结果], [右子树的前序遍历结果] ]中序特点:[ [左子树的中序遍历结果], 根节点…...

c++ 小游戏(2种)

目录 介绍 游戏1 游戏2 介绍 因为DEV C的编译环境较小&#xff0c;所以大部分的游戏代码都无法在此上运行&#xff0c;我收集了一部分摸鱼小游戏的源码&#xff0c;在此呈现&#xff0c;如果有能在DEV C上运行的我会先作声明&#xff1a; 游戏1 扫雷 #include<stdio.…...

电阻详解:定义、公式、影响因素及电阻器类型解析

电阻定义 电阻是指当电流通过导体时&#xff0c;导体对电流流动所呈现的阻碍作用的物理量。它是电路元件的一个基本参数&#xff0c;用于量化导体阻止电荷定向移动的能力。#电阻#的大小决定了通过导体的电流与两端电压之间的关系&#xff0c;遵循欧姆定律&#xff0c;即在恒定…...

LabVIEW动车组谐波分析与检测系统

LabVIEW动车组谐波分析与检测系统 随着中国高速铁路网络的快速发展&#xff0c;动车组数量和运行速度的不断提升&#xff0c;其产生的谐波问题对电网产生了不小的影响。基于图形化编程语言LabVIEW&#xff0c;开发了一套动车组谐波分析与检测系统&#xff0c;旨在实时监控与分…...

H5移动端 Vue3 + vue-virtual-scroller 实现长列表性能优化

文章目录 安装 vue-virtual-scroller引入&#x1f4e2;注意事项使用基础使用上拉加载下拉刷新 移动端在渲染长列表时 大量dom节点的渲染和重绘重排会导致页面卡顿、滚动不流畅、设备耗电加快、影响移动设备电池寿命等性能问题 这里分享使用【虚拟滚动】方案进行长列表优化&…...

第20章-IP路由原理

目录 1. 概述 2. 路由表 3. 查表规则 4. 路由来源类型 5. 路由优先级 6. 路由的度量值 7. 路由器写表规则 1. 概述 1. 定义 路由器:异构网络互联机制; 路由:指导路由器如何进行数据发送的路径信息; 路由表:目的地址、下一跳、出接口等; 2. IP连通的条件 沿途的每…...

SBCFormer:能够在单板计算机上以每秒1帧的速度进行全尺寸ImageNet分类的轻量级网络

文章目录 摘要1、引言2、 相关工作2.1、用于移动设备的卷积网络2.2、移动设备上的ViT和CNN-ViT混合模型2.3、评估指标 3、CNN-ViT 混合模型在低端CPU上的应用3.1、设计原则3.2、SBCFormer的整体设计3.3、SBCFormer块3.4、改进的注意力机制 4、实验结果4.1、实验设置4.2、ImageN…...

【opencv】教程代码 —features2D(8)AKAZE 特征点匹配和图像拼接

graf1.png graf3.png <?xml version"1.0"?> <opencv_storage> <H13 type_id"opencv-matrix"><rows>3</rows><cols>3</cols><dt>d</dt><data>7.6285898e-01 -2.9922929e-01 2.2567123e02…...

ssm基于springboot的数字家庭亲子视频分享网站java+vue

本网站的模块主要分为前台展示模块和后台管理模块。 前台展示模块功能如下&#xff1a; 1&#xff09;家庭照片模块 主要功能是对家庭照片的分类显示&#xff0c;如旅游、运动、生活、工作、学习等&#xff0c;每一类中的照片按时间轴展示出来。 2&#xff09;家庭亲子视频模块…...

产品经理功法修炼(1)之自我管理

点击下载《产品经理功法修炼(1)之自我管理》 1. 前言 产品经理的能力修炼并非局限于某一技能的速成,而是需要全面参与到产品的整个生命周期中,通过不断的实践来逐步提升自己的各项能力。尽管在企业的日常运作中,我们不可能身兼数职去扮演每一个角色,但作为产品的核心负…...

2024年04月IDE流行度最新排名

点击查看最新IDE流行度最新排名&#xff08;每月更新&#xff09; 2024年04月IDE流行度最新排名 顶级IDE排名是通过分析在谷歌上搜索IDE下载页面的频率而创建的 一个IDE被搜索的次数越多&#xff0c;这个IDE就被认为越受欢迎。原始数据来自谷歌Trends 如果您相信集体智慧&am…...

17.应用负载压力测试

早些点&#xff0c;下午题考&#xff0c;最近几年出现的少&#xff1b; 备考较为简单&#xff1b;历年真题相似度高&#xff1b; 主要议题&#xff1a; 1.负载压力测试概述 注意这些测试细微的差别&#xff1b; 负载测试和压力测试的方法比较相似&#xff0c;但是目的不同&a…...

Gauss到底是不是国产数据库

华为GaussDB数据库深度解析 引言 在数字化转型的浪潮中&#xff0c;数据成为企业最宝贵的资产之一。如何高效地管理和利用这些数据&#xff0c;成为企业面临的一大挑战。数据库作为数据存储和管理的核心系统&#xff0c;其性能、安全性、可用性和扩展性等特性直接影响到企业的…...

spark sql执行引擎原理及配置

如果我们想要给上层开发人员配置好一个统一的sql开发界面&#xff0c;让他们统一通过sql开发即可&#xff0c;可通过spark中的thriftserver服务实现&#xff0c;与hive中的thriftserver类似&#xff0c;配置好该服务后&#xff0c;上层通过db client或者代码中通过jdbc连接即可…...

【C语言基础】:自定义类型(二) -->联合和枚举

文章目录 一、联合体1.1 联合体类型的声明1.2 联合体的特点1.3 相同成员的结构体和联合体对比1.4 联合体大小的计算1.5 联合体练习 二、枚举类型2.1 枚举类型的声明2.2 枚举的优点 书山有路勤为径&#xff0c;学海无涯苦作舟。 创作不易&#xff0c;宝子们&#xff01;如果这篇…...

【授时防火墙】GPS北斗卫星授时信号安全防护装置系统

【授时防火墙】GPS北斗卫星授时信号安全防护装置系统 【授时防火墙】GPS北斗卫星授时信号安全防护装置系统 1、装置概述 卫星信号安全防护装置&#xff08;以下简称“防护装置”&#xff09;是一款专门针对卫星导航授时安全的设备。该设备能接收 BD 系统和 GPS 系统卫星信号&am…...

关于 MySQL 优化(详解)

文章目录 关于 MySQL 优化一、硬件方面的优化1、关于 CPU2、关于内存3、关于磁盘 二、MySQL 配置文件1、 default-time-zone8:002、interactive_timeout 1203、wait_timeout 1204、open_files_limit 102405、group_concat_max_len 1024006、usermysql7、character-set-serv…...

Hive详解(5)

Hive 窗口函数 案例 需求&#xff1a;连续三天登陆的用户数据 步骤&#xff1a; -- 建表 create table logins (username string,log_date string ) row format delimited fields terminated by ; -- 加载数据 load data local inpath /opt/hive_data/login into table log…...

阿里云效codeup如何执行github flow工作流

在阿里云效中执行 GitHub 工作流&#xff0c;实质上是在使用 Git 进行版本控制的过程中遵循 GitHub Flow 的原则。GitHub Flow 是一种简洁高效的工作流程&#xff0c;特别适用于追求快速迭代的团队。下面是在阿里云效中执行 GitHub 工作流的基本步骤&#xff1a; 1. 准备工作 …...

node.js的模块化 与 CommonJS规范

一、node.js的模块化 (1)什么是模块化&#xff1f; 将一个复杂的程序文件依据一定的规则拆分成为多个文件的过程就是模块化 在node.js中&#xff0c;模块化是指把一个大文件拆分成独立并且相互依赖的多个小模块&#xff0c;将每个js文件被认为单独的一个模块&#xff1b;模块…...

RK3588平台开发系列讲解(PWM开发篇)

目录 前⾔ 驱动文件 DTS 节点配置 PWM 流程 PWM 使⽤ 常⻅问题 PWM 在 U-Boot 与 kernel 之间的衔接问题 PWM Regulator 时 PWM pin 脚上下拉配置问题 前⾔ 脉宽调制&#xff08; PWM &#xff0c; Pulse Width Modulation &#xff09;功能在嵌⼊式系统中是⾮常常⻅的…...

宝塔面板操作一个服务器域名部署多个网站

此处记录IP一样&#xff0c;端口不一样的操作方式&#xff1a; 宝塔面板操作&#xff1a; 1、创建第一个网站&#xff1a; 网站名用IP地址&#xff0c;默认80端口。 创建好后&#xff0c;直接IP访问就可以了。看到自带的默认首页 2、接下来部署第二个网站&#xff1a; 仍然是…...

surfer绘制等值线图

surfer介绍 Surfer软件&#xff0c;是美国Golden Software公司编制的一款以画三维图的软件。该软件具有强大的插值功能和绘制图件能力&#xff0c;可用来处理XYZ数据&#xff0c;是地质工作者常用的专业成图软件&#xff08;来源于百度百科&#xff09;。 surfer可以用来绘制…...

免费开源的 AI 绘图工具 ImgPilot

免费开源的 AI 绘图工具 ImgPilot 分类 开源分享 项目名: ImgPilot -- 通过提示词及涂鸦生成图片 Github 开源地址&#xff1a; GitHub - leptonai/imgpilot: Turn the draft into amazing artwork with the power of Real-Time Latent Consistency Model 在线地址&#xff…...

备案网站系统/长沙自动seo

尽管SoundCloud CEO Alexander Ljung称&#xff1a;“语音是比视频更大的市场。语音将成为新的输入法。”但是就目前来看&#xff0c;传统的手机输入法还大有用武之地。事实上&#xff0c;输入法大战正如火如荼&#xff0c;各种产品层出不穷&#xff0c;而互联网巨头们也都纷纷…...

网站短时间怎么做权重/互联网推广软件

当你刚开始接触容器的时候&#xff0c;都会提到Docke镜像这个名词&#xff0c;那Docker镜像到底是什么呢&#xff0c;它到底有什么特性呢&#xff1f;首先解释一下什么是Docker镜像&#xff1f;Docker镜像它其实是一个模板&#xff0c;拥有这个模板我们才能创建我们的Docker容器…...

wordpress调试主题/优化生育政策

一、题目描述 编写一个制造各种车辆的程序。包含三个类&#xff0c;具体要求如下&#xff1a; &#xff08;1&#xff09;基类Vehicle&#xff0c;包含轮子数和汽车自身重量两个属性,一个两参数的构造方法&#xff0c;一个显示汽车信息的方法&#xff1b; &#xff08;2&#…...

杭州网站如何制作/引流推广网站

软件工程导论——第六章——详细设计 文章目录软件工程导论——第六章——详细设计1、详细设计的概述&#xff08;1&#xff09;目标&#xff08;2&#xff09;工作任务&#xff08;3&#xff09;关键技术2、结构程序设计1、控制结构2、定义3、人机界面设计1、重要性&#xff1…...

有没有发布需求的网站/巨量引擎app

敏捷开发 敏捷个人我们所说的敏捷是一种病毒。 它进入组织并扰乱正常的业务过程。 例如&#xff0c;在2010年之前的早期&#xff0c;可以指望公司的抗体能够根除并消灭病毒&#xff0c;而不会造成太大的损失。 但是有时候这些反抗组织没有发挥作用。 正如古老的格言所说&#…...

无锡网站建设专家/网络营销课程总结

1. 淘宝商品信息定向爬虫 链接&#xff1a; https://www.taobao.com/ 2. 实例编写 2.1 整体框架 # -*- coding: utf-8 -*-import requests import redef getHTMLText(url):print("")# 对获得的每个页面进行解析 def parsePage(ilt, html):print("")#将商品…...