当这个 异常处理程序在aarch64时,异常既可以来自aarch64,也可以来自aarch32 4、SCR_EL3, Secure Configuration Register 只有SCR_EL3,没有SCR_EL1和SCR_EL2 只有EL3才能读写此寄存器. NS 标记processor element的secure/non-secure的安全位 IRQ、FIQ标志中断是routing到EL3是routing到ELx. 如果为1则routing到EL3...
(2)同步异常是可以在当前EL处理的,比如在EL1里发生的同步异常; (3)对于异步异常,可以路由到EL1/EL2/EL3处理,需要配置HCR以及SCR相关寄存器; 路由方法: 1.选择异常级别: 当异常发生时,PC可以有三个基地址VBAR_EL1、VBAR_EL3、VBAR_EL1(secure)供选择;路由规则如下: 举两例来说明下: 第一个红色框的内容表...
arm64 通过 VBAR_ELn 中存储异常向量表的基址,异常向量表有16个入口,其中4个是异常种类,4个是异常上下文,他们之间是正交关系,发生异常时硬件根据种类自动跳转到异常向量表 + 偏移处。在EL1/EL2/EL3中各有一个VBAR_ELn存储异常向量表。 哪个EL中处理异常? ARM64提供了接口来配置哪些异常,HCR_EL2/SCR_EL3中分...
->cm_setup_context()//设置cpu上下文->write_ctx_reg(state,CTX_SCR_EL3,scr_el3);//lib/el3_runtime/aarch64/context_mgmt.cwrite_ctx_reg(state,CTX_ELR_EL3,ep->pc);//注: 异常返回时执行此地址 于是完成了cpu的启动!!!write_ctx_reg(state,CTX_SPSR_EL3,ep->spsr); psci_cpu_on主要完成开...
_exception_vectors=runtime_exceptions//设置el3的异常向量表->bl bl31_early_platform_setup//跳转到平台早期设置->bl bl31_plat_arch_setup//跳转到平台架构设置->bl bl31_main//跳转到bl31_main atf/bl31/aarch64/bl31_main.c:->NOTICE("BL31: %s\n", version_string);//打印版本信息->NOTICE("...
通常在 EL0 级别调用 svc 指令,触发一个同步异常,CPU 则会切换到 EL1 级别;如果在 EL0 级别来了一个 IRQ 或 FIQ,就会触发一个异步中断,CPU 会根据 SCR 寄存器中的中断配置来决定切换 EL1 或 EL2 或 EL3 级别,同时也会区分 EL 级别使用的是 AArch64,还是 AArch32 的指令集。
中断的路由规则,决定了中断发生时,哪个异常级别处理该中断。如果要路由到EL3,需要设置SCR_EL3.{EA,IRQ,FIQ}。 示例3:展示了如何将SError、IRQ和FIQ路由到EL3异常级别的设置 代码语言:javascript 复制 MRSX0,SCR_EL3ORRX0,X0,#(1<<3)// 设置EA位ORRX0,X0,#(1<<1)// 设置IRQ位ORRX0,X0,#(1<<...
->cm_setup_context()//设置cpu上下文->write_ctx_reg(state, CTX_SCR_EL3, scr_el3);//lib/el3_runtime/aarch64/context_mgmt.cwrite_ctx_reg(state, CTX_ELR_EL3, ep- >pc);//注: 异常返回时执行此地址 于是完成了cpu的启动!!!write_ctx_reg(state, CTX_SPSR_EL3, ep- >spsr);...
fastmodel最开始执行程序,是在EL3,在EL3,设置scr_el3寄存器,设置EL2运行模式是non-secure,aarch32...
¦* Save the SPSR_EL3, ELR_EL3, & SCR_EL3 in case there is a world ¦* switch during SMC handling. ¦* TODO: Revisit if all system registers can be saved later. ¦*/mrs x16,spsr_el3//spsr_el3保存在x16mrs x17,elr_el3//elr_el3保存在x17mrs x18,scr_el3//scr_el3保存在x18...