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));
MCR
和 MRC
在 ARMv8 中不存在。
在 ARMv7-A 中,系统寄存器通常通过协处理器 15 (CP15) 操作访问,并使用 MCR
和 MRC
访问。但是,AArch64 不包括对协处理器的支持。
在 AArch64 中,系统配置通过系统寄存器控制,并使用 MSR
和 MRS
指令访问。
如果要访问系统寄存器,可以参考Arm Architecture Reference Manual。例如,D13.4.15 中的 PMSELR_EL0
。
我正在尝试基于 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));
MCR
和 MRC
在 ARMv8 中不存在。
在 ARMv7-A 中,系统寄存器通常通过协处理器 15 (CP15) 操作访问,并使用 MCR
和 MRC
访问。但是,AArch64 不包括对协处理器的支持。
在 AArch64 中,系统配置通过系统寄存器控制,并使用 MSR
和 MRS
指令访问。
如果要访问系统寄存器,可以参考Arm Architecture Reference Manual。例如,D13.4.15 中的 PMSELR_EL0
。