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 : ...
(1)、armv8-arch64 enable MMU __enable_mmu: mrs x18, sctlr_el1 // preserve old SCTLR_EL1 value mrs x1, ID_AA64MMFR0_EL1 ubfx x2, x1, #ID_AA64MMFR0_TGRAN_SHIFT, 4 cmp x2, #ID_AA64MMFR0_TGRAN_SUPPORTED b.ne __no_granule_support msr ttbr0_el1, x25 // load TTBR0 ...
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 可访问寄存器。
系统寄存器由名称指定,例如SCTLR_EL1:MRS X0, SCTLR_EL1 读SCTLR_EL1入X0. 系统寄存器名称以_ELx. 指定_ELx访问寄存器所需的最低权限。 数据处理汇编指令 算术和逻辑运算 逻辑和整数算术指令的基本格式如下图所示。 指令的组成部分如下: operation定义了指令的功能。例如,ADD执行加法,AND执行逻辑与。可以在操...
1.ARM64的异常等级 ARM64包含4个异常等级: EL0:非特权模式,常用来跑应用程序; EL1:特权模式,常用来跑内核; EL2:虚拟化监控程序,例如hypervisor; EL3:安全模式,例如secure monitor; 2.同步异常和异步异常 同步异常是由正在运行的指令,或指令运行的结果,出错造成的异常;而异步异常则不必由运行的指令造成,可以在...
虽然在异常初始化流程中已经设置了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. */ ...
系统控制寄存器(SCTLR)用于控制标准内存和系统设备,并为在硬件内核中实现的功能提供状态信息。 cpsr_bits.png 并不是所有的位在EL1上都可用。 各个位代表以下内容: 访问SCTLR 要访问SCTLR_ELn,可使用: MRS<Xt>,SCTLR_ELn//将SCTLR_ELn读入XtMSR SCTLR_ELn,<Xt>//将Xt写入SCTLR_ELn ...
BL32 - Secure-EL1 Payload,一般为TEE OS Image。 BL33 - Non-Trusted Firmware,一般为uboot、linux kernel。 ATF输出BL1、BL2、BL31,提供BL32和BL33接口。 启动流程如下: 1.1 BL1 BL1位于ROM中,在EL3下从reset vector处开始运行。 BL1做的工作主要有: ...
未对齐堆栈指针是指用作计算基地址的堆栈指针的位[3:0]不是0000。每当堆栈指针用作基地址时,它必须对齐16字节。堆栈指针对齐检查仅在AArch64中执行,并且可以针对每个异常级别单独启用:-EL0和EL1由SCTLR_EL1中的两个单独的位控制。-EL2由SCTLR_EL2中的一位控制。
EL1t: t表示选择SP_EL0 EL1h:h表示选择SP_ELx(x>0) PC(Program Counter) 在armv7上PC是一个通用寄存器R15,在armv8上PC不在是一个寄存器,它不能直接被修改。必需使用一些隐式的指令来改变,如PC-relative load SPSR N Negative result (N flag). ...