SCTLR_EL1 – Top level system control for EL0 and EL1 SCTLR_EL2 – Top level system control for EL2 SCTLR_EL3 – Top level system control for EL3 注意:EL1 和 EL0 共享相同的 MMU 配置,并且控制仅限于在 EL1 上运行的特权代码。 因此,没有 SCTLR_EL0,所有控制都来自 EL1 可访问寄存器。
该寄存器只有ELR_EL1 ELR_EL2 ELR_EL3, 没用ELR_EL0. 因为异常不会routing(target)到EL0. 例如在user mode时触发了一个target到EL1的irq异常,那么会将PC指针保持到ELR_EL1中,然后跳转到EL1的异常向量表中; user mode时触发了一个target到EL3的irq异常,,那么会将PC指针保持到ELR_EL3中,然后跳转到EL3的...
5、SCTLR_EL1, System Control Register (EL1) 在AArch64状态下,其实是有三个sctlr寄存器: SCTLR_EL1 SCTLR_EL2 SCTLR_EL3 在AArch32状态下,有HSCTLR和sctlr寄存器,其中sctlr寄存器是banked: SCTLR (NS) HSCTLR SCTLR (S) 重要的三个bit位: I : Instruction cache enable C : data cache enable M : ...
EL1异常级别和EL2异常级别有各自的系统控制寄存器,即SCTLR_EL1和SCTLR_EL2,这两个寄存器的第0位是否开启MMU。未开启MMU则访存以物理内存直接寻址,开启后访存则需要经过MMU转换。EL1的设置本文不进行讲解,着重讲解EL2的设置,当EL2开启MMU后,转换所需要的转换表存储在TTBR0_EL2寄存器中。 这里注意区分后文会提到...
虽然在异常初始化流程中已经设置了sctlr_el1等系统控制寄存器,但在打开mmu前还需要其它一些准备工作。 ... # arch/arm64/mm/proc.S /* * __cpu_setup * * Initialise the processor for turning the MMU on. * * Output: * Return in x0 the value of the SCTLR_EL1 register. */ ...
有两个用于访问系统寄存器的专用指令: MRS Xd, 将系统寄存器读入Xd. MSR , Xn 写入Xn系统寄存器。 系统寄存器由名称指定,例如SCTLR_EL1:MRS X0, SCTLR_EL1 读SCTLR_EL1入X0. 系统寄存器名称以_ELx. 指定_ELx访问寄存器所需的最低权限。 数据处理汇编指令...
我们可以看出,在 EL2 和 EL3 异常等级中,并不是所有的位都可用,SCTLR 位域描述如下: 上述SCTLR 寄存器位域中,重点关注{I, C, A, M }位域即可。 SCTLR_EL1 访问示例如下: MRS X0, SCTLR_EL1 // Read System Control Register configuration data ...
在ARMV8-aarch64架构下有三个sctlr寄存器 SCTLR_EL1SCTLR_EL2SCTLR_EL3以SCTLR_EL3,该系统寄存器的SCTLR_EL3.EE(BIT[25])定义了MMU访问页表的方式:小端方式读、还是大端方式读 (4)、Address size configuration Physical address size – 告诉cpu,当前系统的物理地址是多少位 Output address size – 告诉mmu,...
未对齐堆栈指针是指用作计算基地址的堆栈指针的位[3:0]不是0000。每当堆栈指针用作基地址时,它必须对齐16字节。堆栈指针对齐检查仅在AArch64中执行,并且可以针对每个异常级别单独启用:-EL0和EL1由SCTLR_EL1中的两个单独的位控制。-EL2由SCTLR_EL2中的一位控制。-...
特殊目的寄存器,如ELR_EL1、ELR_EL2、SP_EL0等。VMSA特定寄存器。页上的ID寄存器。性能监控寄存器。调试寄存器。RAS寄存器。通用定时器寄存器。缓存维护系统指令,如DC CGDSW、DC CGDVAC等。ARMV8系统寄存器丰富,它不仅仅包含大量特殊目的寄存器和PSTATE,还包含用于缓存维护的指令,以提高系统的性能和响应速度。通过...