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

这篇具有很好参考价值的文章主要介绍了Debug工具Trace32的ARM内存访问类型详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

关于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”访问类型。
N EL0/1非安全模式(TrustZone设备)
H EL2/Hypervisor模式(具有虚拟化扩展的设备)
R AArch32 Arm Code (A32, 32位)长度)
X
Armv8-A only
AArch64 Arm64 Code (A64, 32位instr。长度)
Z 安全模式(TrustZone设备)
S Supervisor 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模式下使用。
T AArch32 Thumb 码(T32, 16位)。长度)
C

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

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

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

Debug工具Trace32的ARM内存访问类型详解,工具,arm开发,Trace32,JTAG,Access Class

  •  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将执行调试器请求的访问。例如虚拟、物理、安全或非安全的内存访问。

Debug工具Trace32的ARM内存访问类型详解,工具,arm开发,Trace32,JTAG,Access Class

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

  •  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

Debug工具Trace32的ARM内存访问类型详解,工具,arm开发,Trace32,JTAG,Access Class

  •  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运行时查看物理内存:

Debug工具Trace32的ARM内存访问类型详解,工具,arm开发,Trace32,JTAG,Access Class

  • 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:0x0 ANSD:0x0 N: … the CPU is in non-secure mode.
S: … the CPU is in supervisor mode.
D: … data is viewed (not code).
Data.dump Z:0x0 ZSD:0x0 S: … the CPU is in supervisor mode.
D: … data is viewed (not code).

E '和' A '不会自动添加,因为调试器无法知道用户是否打算使用运行时或物理访问。文章来源地址https://www.toymoban.com/news/detail-572332.html

到了这里,关于Debug工具Trace32的ARM内存访问类型详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包赞助服务器费用

相关文章

  • 【ARM Trace32(劳特巴赫) 使用介绍 2.1 -- TRACE32 Practice 脚本 cmm 脚本学习】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】 上篇文章【ARM Trace32(劳特巴赫) 使用介绍 2 - Veloce 环境中使用trace32 连接 Cortex-M33】 下篇文章【ARM Trace32(劳特巴赫) 使用介绍 2.2 – TRACE32 进阶命令之 DIAG 弹框命令】

    2024年02月05日
    浏览(10)
  • 【ARM Trace32(劳特巴赫) 高级篇 20 -- SNOOPer 使用介绍】

    请阅读 【Trace32 ARM 专栏导读】

    2024年02月03日
    浏览(13)
  • 【ARM Trace32(劳特巴赫) 使用介绍 1.1 - Veloce 环境中使用trace32 连接 Cortex-M33】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】 上篇文章:【ARM Trace32(劳特巴赫) 使用介绍 1 - Veloce 环境中使用 Trace32】 下篇文章:【ARM Trace32(劳特巴赫) 使用介绍 2.1 – TRACE32 Practice 脚本 cmm 脚本学习】

    2024年02月04日
    浏览(8)
  • ARM 汇编指令:(二) LDR与STR 单内存访问指令

    目录 一:LDR指令格式LDR指令用于从内存中加载数据到寄存器。它的基本语法为: 二:STR指令格式STR指令用于将数据从寄存器存储到内存。它的基本语法为: 三:LDR与STR 使用示例: 1.LDR   加载立即数或者地址值 2.LDR   将寄存器里的地址指向的内容(*p 这与C语言这条语句等

    2024年04月16日
    浏览(3)
  • 【ARM Coresight 系列文章 10.2 - ARM Coresight STM Trace packets】

    上篇文章:ARM Coresight 系列文章 10.1 - ARM Coresight STM 介绍及使用 下篇文章:ARM Coresight 系列文章 10.3 - ARM Coresight STM 寄存器介绍 及STM DMA 传输介绍 STM 产生的trace的是遵守 MIPI System Trace Protocol version 2 (STPv2) 规范的,STM 提供 65536(64K) 个 STMv2 chan

    2024年02月16日
    浏览(20)
  • 【ARM Coresight Debug 系列 1 -- ARM Debug 技术概述】

    【ARM Coresight Debug 系列 1 -- ARM Debug 技术概述】

    请阅读 【ARM Coresight SoC-400/SoC-600 专栏导读】 下篇文章:ARM Coresight 系列文章 2 - ARM Coresight 介绍 在过去的系统中,开发人员可能使用昂贵的硬件工具,如逻辑分析仪或示波器来观察程序的行为。但现代处理器是一个复杂的SOC,通常包含内存、缓存、和许多其他逻辑单元。可能

    2024年02月03日
    浏览(8)
  • ARM 编译工具链详解

    ARM 编译工具链详解

    GNU Arm Embedded Toolchain 是用于 C/C++ 和汇编编程的即用型开源工具套件。GNU Arm 嵌入式开发工具链适用于 32 位 Arm Cortex-A,Arm Cortex-R 和 Arm Cortex-M 处理器系列。GNU Arm 嵌入式工具链包括 GNU 编译器 (GCC),可直接从 Arm 官方免费获得,用于在 Windows,Linux 和 Mac OS X 操作系统上进行嵌入

    2024年02月02日
    浏览(7)
  • ARM基础(6):内存屏障指令之DMB、DSB和ISB详解

    内存屏障是一个通用术语,用于指代一条或多条指令,它们强制处理器在执行加载( load )或存储( store )指令时进行同步事件。ARMv7-M 和 ARMv6-M架构都提供了三个内存屏障指令来支持内存顺序模型。这三个内存屏障指令分别是: DMB 、 DSB 和 ISB 。 (1)Data Memory Barrier(DMB):数据内

    2024年02月14日
    浏览(4)
  • 【ARM Coresight 系列文章 22 -- linux frace 与 trace-cmd】

    ftrace 是 Linux 内核中的一个跟踪工具,主要用于帮助开发者分析和调试内核的行为。ftrace 的名字来源于 “ function tracer ”,它最初是用于跟踪内核函数调用的,但现在已经发展成一个功能强大的通用跟踪框架,可以跟踪函数调用、调度事件、中断、定时器、内存映射等各种内

    2024年02月11日
    浏览(11)
  • 【STM32】keil MDK-Arm 5.38 功能详解

    【STM32】keil MDK-Arm 5.38 功能详解

    keil 是ARM的软件子公司, MDK-Arm 是keil的一个产品,把它称作keil也是可以的。 arm 链接:https://developer.arm.com/Tools%20and%20Software/Keil%20MDK#Overview keil:https://www.keil.com/download/ keil MDK是一个完整的软件开发解决方案,用于创建,构建和调试基于Arm的微控制器的嵌入式应用程序。keil

    2024年02月11日
    浏览(361)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包