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

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

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

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

内存访问类型描述
A绝对寻址(物理地址),即绕过MMU,在使用 VIPT 的cache架构下,绕过MMU也意味着绕过cache。
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 '不会自动添加,因为调试器无法知道用户是否打算使用运行时或物理访问。

  • 5
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

SOC罗三炮

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值