接着将cptr_el3清零,使用xzr是可以快速操作寄存器为零。这里保证任何级别下访问SIMD和floating-point指令不会导致触发异常陷入el3。 当处于EL2时,首先根据HCR_EL2.E2H判断系统是一个虚拟机管理器还是主机系统,当E2H = 0时,表示系统处于主机系统只需要做el3一样的操作配置SIMD和FP指令不会陷入el2即可。 当系统处...
定义额外可用的memory,给后面每个BL的加载使用 加载Image load_scp_bl2,(separate System Control Processor) load_bl31,EL3 Runtime Software image load,从存储设备加载到trusted SRAM 通过提升SMC将控制回到BL1,将BL31的入口提供给BL1 BL1关闭MMU,并通过清除SCTLR_EL3.M/I/C,冲掉data cache BL1将控制转给BL...
实际上,即便是由于SOC支持TrustZone而导致cpu core上电后进入EL3,这时候,接管cpu控制的一定不是linux kernel(至少目前来看linux kernel不会做Secure monitor),而是Secure Platform Firmware(也就是传说中的secure monitor),它会进行硬件平台的初始化,loading trusted OS等等,等到完成了secure world的构建之后,把控制权转...
CPTR_EL3: Architectural Feature Trap Register (EL3) CSSELR_EL1: Cache Size Selection Register CTR_EL0: Cache Type Register CurrentEL: Current Exception Level DACR32_EL2: Domain Access Control Register DAIF: Interrupt Mask Bits DBGAUTHSTATUS_EL1: Debug Authentication Status register DBGBCR<n>_...
ARMV8把之前架构中的processor mode的概念去掉(或者说淡化),取而代之的是4个固定的Exception level,分別为EL0到EL3, 其中数字越大代表特权(privilege)越大。类似地,可以将EL0归属于non-privilege level,EL1/2/3属于privilege level。如下图所示。EL0: 无特权模式(unprivileged) ...
/* 在EL3和EL2,禁止捕获对这些寄存器的访问 */MSR CPTR_EL3, XZRMSR CPTR_EL3, XZR/* 在EL1和EL0,禁止捕获对这些寄存器的访问 */MOV X1, #(0x3 << 20) // 设置FPEN,禁止EL1对这些寄存器的访问MSR CPACR_EL1, X1ISB 6 改变异常级别 ...
CPTR_EL3, Architectural Feature Trap Register, EL3 CPUACTLR_EL1, CPU Auxiliary Control Register, EL1 CPUCFR_EL1, CPU Configuration Register, EL1 CPUECTLR_EL1, CPU Extended Control Register, EL1 CPUPCR_EL3, CPU Private Control Register, EL3 CPUPMR_EL3, CPU Private Mask...
msr cptr_el2, x0 // Disable copro. traps to EL2 #ifdef CONFIG_COMPAT---是否支持64 bit kernel上运行32bit 的application msr hstr_el2, xzr // Disable CP15 traps to EL2 #endif mrs x0, pmcr_el0---(3) ubfx x0, x0, #11, #5 // to EL2 and...
msrscr_el3, x0 msrcptr_el3, xzr/* Enable FP/SIMD */ #ifdef COUNTER_FREQUENCY ldrx0, =COUNTER_FREQUENCY msrcntfrq_el0, x0/* Initialize CNTFRQ */ #endif b0f 2:set_vbarvbar_el2, x0 movx0, #0x33ff msrcptr_el2, x0/* Enable FP/SIMD */ ...
最好的入门就是从工程出发,之前关于V8构架下关于指令的执行中TRAP捕获指令的行为只算是做了些简单的切入,而就这次就收集到TRAP捕获的主要关于EL3的寄存器实现,内容还是被当作草稿,就是简单地做个速写描摹个基本的模样先: #define CPTR_EL3 Capture register el3 ...