AARCH64上不存在MCR和MRC?

时间:2015-09-03 11:39:42

标签: assembly linux-kernel arm64

我正在尝试编译" mrc"和" mcr"基于Board的AARCH64指令,但我看到以下错误消息

   tmp/ccqOHmrK.s: Assembler messages:
  /tmp/ccqOHmrK.s:43: Error: unknown mnemonic `mrc' -- `mrc p15,0,x0,c14,c3,1'
  /tmp/ccqOHmrK.s:53: Error: unknown mnemonic `mrc' -- `mrc p15,0,x2,c14,c3,0'

我尝试查看内核源码/ arch / arm64,但没有使用mcr&& mrc而没有仿真。

是否存在语法问题?

2 个答案:

答案 0 :(得分:2)

您应该使用相应的msr说明替换它们。 例如,arch/arm/include/asm/arch_timer.h有:

case ARCH_TIMER_REG_CTRL:
    asm volatile("mcr p15, 0, %0, c14, c3, 1" : : "r" (val));

arch/arm64/include/asm/arch_timer.h中的对应方有:

case ARCH_TIMER_REG_CTRL:
    asm volatile("msr cntv_ctl_el0,  %0" : : "r" (val));

答案 1 :(得分:0)

MCRMRC 在 ARMv8 中不存在。

在 ARMv7-A 中,系统寄存器通常通过协处理器 15 (CP15) 操作访问,并使用 MCRMRC 访问。但是,AArch64 不包括对协处理器的支持。

在 AArch64 中,系统配置通过系统寄存器控制,并使用 MSRMRS 指令访问。

如果要访问系统寄存器,可以参考 Arm 架构参考手册。例如,D13.4.15 中的 PMSELR_EL0enter image description here