AARCH64 上不存在 MCR 和 MRC?

MCR and MRC does not exist on AARCH64?

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

   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 的地方。

是语法问题吗?

您应该将它们替换为适当的 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));

MCRMRC 在 ARMv8 中不存在。

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

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

如果要访问系统寄存器,可以参考Arm Architecture Reference Manual。例如,D13.4.15 中的 PMSELR_EL0