Debug工具Trace32的ARM内存访问类型详解

news2024/11/28 0:52:35

关于Trace32的访问类型的基本概念可以参考博文:

Trace32使用教程-访问类型(Access Class)_SOC罗三炮的博客-CSDN博客

本文将以ARMv8为基础,详解Trace32的内存访问类型。

内存访问类型描述
A绝对寻址(物理地址),即绕过MMU
E运行时访问。(可以由 SYStem.CpuAccess 和SYStem.MemAccess命令来enable和disable)
M
Armv8-A only
EL3 Mode (TrustZone devices). 只适用于 64-bit EL3 mode。在Armv8下,
如果设备处于32位模式,如果使用“M”访问类型,将会被转换为“ZS”访问类型。
NEL0/1非安全模式(TrustZone设备)
HEL2/Hypervisor模式(具有虚拟化扩展的设备)
RAArch32 Arm Code (A32, 32位)长度)
X
Armv8-A only
AArch64 Arm64 Code (A64, 32位instr。长度)
Z安全模式(TrustZone设备)
SSupervisor Memory (privileged access)
DAP
DAP2,
AHB, AHB2,
APB, APB2,
AXI, AXI2

访问内存时,通过BUS master ,也称为Memory Access Ports (MEM AP)。由Debug Access Port (DAP)提供。DAP是一个CoreSight组件,在基于Cortex的设备上是必需的。

使用哪一个bus master (MEM-AP)作为访问类型,是通过给MEM-AP分配一个端口号来进行的:

  • SYStem.CONFIG DEBUGACCESSPORT <mem_ap#> -> “DAP”
  • SYStem.CONFIG AHBACCESSPORT <mem_ap#> -> “AHB”
  • SYStem.CONFIG APBACCESSPORT <mem_ap#> -> “APB”
  • SYStem.CONFIG AXIACCESSPORT <mem_ap#> -> “AXI”

用户必须给MEM-AP(比如AHB)分配一个内存访问端口号,然后就可以使用 AHB 作为访问类型。AXI和DAP也是一样。
至于DAP2, AHB2, APB2, AXI2),
SYStem.CONFIG DAP2AHBACCESSPORT <mem_ap#>)

是给可以控制两个DAP的调试器使用的。

SPR
Armv8/Armv9 only
访问系统寄存器,特殊用途寄存器以及系统指令等( System Register, Special Purpose Registers and System Instructions). 建议只在AArch64模式下使用。
TAArch32 Thumb 码(T32, 16位)。长度)
C

Current”,不要使用该访问类型,如果应该使用的访问类型未知,调试器将会根据当前处理器的状态,来推断出访问类型。

C14访问c14协处理器寄存器。建议只在AArch32模式下使用。
C15访问c15协处理器寄存器。建议只在AArch32模式下使用。
D内存数据,默认使用,不加也可。
I中间地址。可在具有虚拟化的设备上使用
扩展。
JJava Code (8-bit)
JSEQ:Access data via JTAG sequences registered with
JTAG.SEQuence.MemAccess.ADD
VMVirtual Memory (memory on the debug system)
P程序内存
U用户内存(非特权访问),尚未实现;将执行特权访问。
USRAccess to Special Memory via User-Defined Access Routines

以下是 ANC、NC、A以及默认情况下的访问类型示意图:

  •  A 意味着绕过MMU,直接访问物理地址,但是会经过cache。
  • NC,Non-cache,会绕过cache,但是会经过MMU,所以访问的是虚拟地址。
  • ANC,意味着绕过cache 和 MMU,直接利用CPU去访问内存。
  • 如果任何访问类型都未声明,则默认经过cache和MMU。

假设想要查看包含32位Arm代码的安全内存区域。此外,访问由MMU进行转换,因此必须选择正确的CPU模式以避免转换失败。在我们的例子中,应该有必要在Arm supervisor 模式下访问内存。要确保安全访问,使用“Z”。要在访问期间将CPU切换到supervisor模式,使用“S”。要使调试器将内存内容反汇编为32位Arm代码,使用“R”。将三者结合在一起,即为 “ZSR”:

List.Mix ZSR:0x10000000 // View 32-bit Arm code in secure memory

虽然已经知道了要使用 ZSR 三个属性,但是能不能使用 SZR 或者 RZS 呢,答案是不能,访问类型之间存在一定的先后规则。

来创建有效的访问类型组合的规则:

  • 对于每一列,只能选择一个访问类型
  • 如果该列有空格块选项,则可以跳过。
  • 访问类型的排列顺序必须严格按照色块的顺序,从左至右。

通过CPU访问内存(CPU视角)

调试器使用CPU访问内存和外设,如UART或DMA控制器。这意味着CPU将执行调试器请求的访问。例如虚拟、物理、安全或非安全的内存访问。

 一些简单的访问类型的组合示例:

  •  AD         View physical data (current CPU mode)
  • AH         View physical data or program code while CPU is in hypervisor mode
  • ED         Access data at run-time
  • NUX         View A64 instruction code at non-secure virtual address location, e.g. code of the user application.
  • ZSD         View data in secure supervisor mode at virtual address location
  • AZHD         Physical secure hypervisor access. ArmV8.4-A only.
  • ZI         Secure intermediate access. ArmV8.4-A only

外设寄存器访问,Peripheral Register Access

  •  NC15         Access non-secure banked coprocessor 15 register (AArch32 mode)
  • C15         Access coprocessor 15 register in current secure mode (AArch32 mode)
  • SPR         Access system register (AArch64 mode)
  • MSPR         Access system registers in EL3 (AArch64) mode
  • HSPR         Access system registers in EL2 (AArch64) mode
  • ZSPR         Access system registers in secure EL1 (AArch64) mode

CoreSight Access
 这些访问通常用于访问CoreSight总线APB、AHB和AXI等,直接通过DAP,并且绕过CPU。例如,这可以用于在CPU运行时查看物理内存:

  • EZAXI         Access secure memory location via AXI during run-time
  • DAP         Access debug access port (e.g. core debug registers)

User input at the
command line
Expansion
by TRACE32
These access classes are added because...
List.Mix
(see also illustration
below)
NSR:N: … the CPU is in non-secure mode.
S: … the CPU is in supervisor mode.
R: … code is viewed (not data) and the CPU uses 32-bit instructions.
Data.dump A:0x0ANSD:0x0N: … the CPU is in non-secure mode.
S: … the CPU is in supervisor mode.
D: … data is viewed (not code).
Data.dump Z:0x0ZSD:0x0S: … the CPU is in supervisor mode.
D: … data is viewed (not code).

E '和' A '不会自动添加,因为调试器无法知道用户是否打算使用运行时或物理访问。

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

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

相关文章

实现复杂的按钮动画

今天主要是实现一个复杂的按钮提交动画效果&#xff0c;具体的关键变形环节如下&#xff1a; 初始环节 加载环节 展示结果环节 代码实现过程 1、html 页面机构 <button class"btn" data-btn>Submit</button> <div class"check_box">&…

初级与高级软件测试工程师的差距体现在哪些方面?如何成为高级测试工程师?

目录 初级测试工程师和高级测试工程师有什么区别或者差距呢&#xff1f; 一、不断的钻研 二、向同行或者他人学习 三、团队合作是更宽广的提升途径 四、了解你的客户和团队成员 软件测试工程师发展规划路线 我们都在努力追求卓越&#xff1a;希望在我们选择的职业中出类拔…

html2canvas将document DOM节点转换为图片,并下载到本地

html2canvas - Screenshots with JavaScripthttps://html2canvas.hertzen.com/了解一下&#xff0c;安装先 npm install --save html2canvas 用到的知识包括 前端用原生js编辑文件内容→创建生成文件(格式可以自定义)→下载文件_你挚爱的强哥的博客-CSDN博客会自动创建一个h…

服务器使用UDP通讯127.0.0.1测试成功连接服务器却通讯失败

首先看看本人情况 解释一下&#xff1a; 1&#xff1a;左边窗口是模拟服务程序&#xff0c;功能是收到消息后把消息打印出来&#xff0c;并把收到的消息再发回给发送消息的主机 2&#xff1a;右边窗口是模拟客户程序&#xff0c;功能是将输入的消息发送给服务程序的主机&…

【多线程例题】顺序打印abc线程

顺序打印-进阶版 方法一&#xff1a;三个线程竞争同一个锁&#xff0c;通过count判断是否打印 方法二&#xff1a;三个线程同时start&#xff0c;分别上锁&#xff0c;从a开始&#xff0c;打印后唤醒b 三个线程分别打印A&#xff0c;B&#xff0c;C 方法一&#xff1a;通过co…

前端笔记_OAuth规则机制下实现个人站点接入qq三方登录

文章目录 ⭐前言⭐qq三方登录流程&#x1f496;qq互联中心创建网页应用&#x1f496;配置回调地址redirect_uri&#x1f496;流程分析 ⭐思路分解⭐技术选型实现&#x1f496;技术选型&#xff1a;&#x1f496;实现 ⭐结束 ⭐前言 大家好&#xff0c;我是yma16&#xff0c;本…

4.3.tensorRT基础(1)-实现模型的推理过程

目录 前言1. inference案例总结 前言 杜老师推出的 tensorRT从零起步高性能部署 课程&#xff0c;之前有看过一遍&#xff0c;但是没有做笔记&#xff0c;很多东西也忘了。这次重新撸一遍&#xff0c;顺便记记笔记。 本次课程学习 tensorRT 基础-实现模型的推理过程 课程大纲可…

深度学习——LSTM解决分类问题

RNN基本介绍 概述 循环神经网络&#xff08;Recurrent Neural Network&#xff0c;RNN&#xff09;是一种深度学习模型&#xff0c;主要用于处理序列数据&#xff0c;如文本、语音、时间序列等具有时序关系的数据。 核心思想 RNN的关键思想是引入了循环结构&#xff0c;允许…

JavaBeans

Code eamples ① Product.java (JavaBean Class) ② Bean.java (Servlet) ③ complie javac -encoding utf-8 -d ..\classes -sourcepath . chapter15\Bean.java ④ Tomcat ⑤ http://localhost:8080/book/chapter15/bean

flink水位线传播及任务事件时间

背景 本文来讲解一下flink的水位线传播及对其对任务事件时间的影响 水位线 首先flink是通过从源头生成水位线记录的方式来实现水位线传播的&#xff0c;也就是说水位线是嵌入在正常的记录流中的特殊记录&#xff0c;携带者水位线的时间戳&#xff0c;以下我们就通过图片的方…

Docker常用命令(三)

1、镜像命令 1、列出本地主机上的镜像 docker images [options]optiins说明&#xff1a; -a&#xff1a;列出本地所有的镜像&#xff08;包含历史映像层&#xff09; -q&#xff1a;只显示镜像ID2、搜索某个镜像信息 docker search [options] 镜像名字3、下载镜像 docker …

Kafka第二课-代码实战、参数配置详解、设计原理详解

一、代码实战 一、普通java程序实战 引入依赖 <dependencies><dependency><groupId>org.apache.kafka</groupId><artifactId>kafka-clients</artifactId><version>2.4.1</version></dependency><dependency>&l…

windows环境hadoop报错‘D:\Program‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

Hadoop版本为2.7.3&#xff0c;在环境配置好后&#xff0c;检查hadoop安装版本&#xff0c;报如标题所示错误&#xff0c;尝试网上主流的几种方法均无效。 错误&#xff1a;windows环境hadoop报错’D:\Program’ 不是内部或外部命令,也不是可运行的程序 或批处理文件。 错误方…

Jackson使用

导入依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0…

静态输出调节

1.理论部分 15. SISO反馈控制器设计 (6)&#xff1a;输出调节-静态反馈 Output Regulation - 知乎 (zhihu.com) 上述博客已经写的很好了&#xff0c;过多描述 2.仿真实验 3.参考理论 首先通过18式求解出X和U&#xff0c;然后设计一个让原系统初始稳定的控制律Kx&#xff0c;…

第二周习题

2.创建类MyDate,year属性和month属性,编写一个方法totalDays,该方法通过年份和月份判断该月一共有多少天,在主函数中接受用户输入年和月&#xff0c;调用该方法测试它. 这里考虑平年和闰年 “平年2月有28天。闰年的2月有29天 那么就有区别了 只要判断这一点就行了&#xff01;&…

框架开发使用注解处理器APT优雅提效

目录 概述1.什么是注解处理器APT2.应用场景3.如何使用3.1 创建注解API模块3.2 创建注解处理器模块3.3 使用注解 概述 在现在的很多开源框架中&#xff0c;我们经常能在源码中看到注解处理器的影子&#xff0c;比如我们熟悉的阿里的ARouter,Android开发中的替代findViewById神器…

【git】git以及可视化界面下载安装

git 以及可视化界面下载安装 git下载安装测试功能 sourceTree下载安装 git 下载安装 下载地址 git官网上有多个版本&#xff0c;点击“Click here to download” &#xff0c;下载下来之后&#xff0c;一直下一步安装即可 测试功能 在任意文件夹中右击&#xff0c;看到图中…

Linux三剑客

前言 关于bash&#xff1a; bash&#xff1a;命令处理器&#xff0c;运行在文本窗口&#xff0c;能够执行用户输入的命令。 脚本&#xff1a;从linux文件中读取命令&#xff0c;被称为脚本。 1 命令&#xff1a;alias&#xff1a;起别名 2 快捷键操作&#xff1a; ctrla&#…

浅谈如何提高自动化测试的稳定性和可维护性

目录 前言&#xff1a; 装饰器与出错重试机制 什么是装饰器&#xff1f; 编写一个出错重试装饰器 pytest 里的出错重试机制实现 Allure 里的测试用例分层 为什么要采用分层机制&#xff1f; allure 的装饰器step 前言&#xff1a; 自动化测试在软件开发中扮演着重要的…