一、ARM异常等级及切换

目录

  • [1 ARM异常](#1 ARM异常)
    • [1.1 异常等级总览](#1.1 异常等级总览)
      • [1.1.1 EL3](#1.1.1 EL3)
      • [1.1.2 EL2](#1.1.2 EL2)
      • [1.1.3 EL1](#1.1.3 EL1)
      • [1.1.4 EL0](#1.1.4 EL0)
    • [1.2 异常等级的切换](#1.2 异常等级的切换)
      • [1.2.1 上去(到更高的EL)](#1.2.1 上去(到更高的EL))
      • [1.2.1 下来(到更低的EL)](#1.2.1 下来(到更低的EL))
    • [1.3 异常](#1.3 异常)
      • [1.3.1 同步异常](#1.3.1 同步异常)
      • [1.3.2 异步异常](#1.3.2 异步异常)

1 ARM异常

1.1 异常等级总览

在 Arm A-profile 的 AArch64 执行状态下,CPU 权限被划分为四个异常等级(EL0~EL3),数字越大权限越高。EL0 面向应用程序,EL1 面向操作系统内核,EL2面向虚拟化管理器(Hypervisor),EL3面向安全监控器与早期固件。不同 EL 拥有各自的寄存器集和异常向量表(VBAR_ELx),通过硬件强制的边界实现权限隔离和控制转移,是整个系统安全与稳定的"层级骨架"。

1.1.1 EL3

EL3 是最高特权层,主要承担世界切换(Secure/Non-secure)的仲裁与策略落地,并为下层提供安全服务(如 PSCI 电源管理接口、SMC 调用分发等)。常见的 BL1/BootROM 和 TF-A 的 BL31 就运行在 EL3:它们在启动早期初始化关键寄存器(如 SCR_EL3、SCTLR_EL3),验证并移交控制权给下一阶段镜像,运行期则作为"安全门卫"处理来自低 EL 的安全监控调用(SMC),再通过 ERET 将控制权返回到目标 EL/世界。

1.1.2 EL2

EL2 负责虚拟化,管理来宾操作系统(Guest OS)并提供二阶段地址转换(Stage-2),从而把来宾看见的"物理地址"再映射到真正的宿主物理地址;这让 Hypervisor 能强隔离多个来宾系统并进行资源控制。典型实现包括 KVM/Hypervisor,支持 VHE 的场景下部分宿主能力可在 EL2 直接运行以降低陷入开销。若某 SoC 未实现虚拟化,系统通常直接在 EL1 运行操作系统而不涉 EL2。

1.1.3 EL1

EL1 是传统意义上的"内核态",负责进程调度、内存管理、驱动与中断处理,并通过一阶段地址转换(Stage-1)为 EL0 提供进程级虚拟内存隔离。Linux、BSD 等常见操作系统在非安全世界的 EL1 运行(NS-EL1),而可信操作系统(如 OP-TEE)可运行在安全世界的 EL1(S-EL1)。当需要调用更高特权或安全服务时,EL1 会通过 HVC(到 EL2)或 SMC(到 EL3)发起受控陷入。

1.1.4 EL0

EL0 承载普通应用程序的执行,不能直接访问特权指令或内核资源;应用通过系统调用触发 SVC 陷入到 EL1,由内核代表完成文件、网络、进程等操作。EL0 的地址空间、权限位与异常路径均由 EL1 的页表与策略控制,从而在硬件层面限制应用越权并隔离不同进程的内存。

1.2 异常等级的切换

1.2.1 上去(到更高的EL)

复制代码
SVC:EL0 → EL1(应用→内核,系统调用)
HVC:EL1 → EL2(内核→虚拟化管理器)
SMC:任意较低 → EL3(进入安全监控器/固件,含世界切换)
同步异常(指令/数据访存异常、未定义指令)和异步异常(IRQ/FIQ/SError)也会把控制权送到当前或更高的 EL(由路由位决定)。

1.2.1 下来(到更低的EL)

复制代码
统一用 ERET。高 EL 在保存了目标状态(SPSR_ELx)和返回地址(ELR_ELx)后执行 ERET,"带着"指定的位宽/中断屏蔽/目标 EL 返回。

1.3 异常

1.3.1 同步异常

由当前正在执行的指令"当场"触发,异常与这条指令存在一一对应关系(精确异常)。

典型来源:SVC/HVC/SMC 指令、未定义指令、对齐/权限/页表错误(Instr/Data abort)、断点、Watchpoint、FP/PC 错误等。

1.3.2 异步异常

典型来源:IRQ(普通中断)、FIQ(快速中断)、SError(系统错误)。

相关推荐
sheepwjl7 小时前
《嵌入式硬件(六):ARM汇编核心内容总结》
汇编·arm开发·嵌入式硬件
路溪非溪9 小时前
Linux驱动如何向应用层提供sysfs操作接口
linux·arm开发·驱动开发
武文斌771 天前
arm启动代码总结
arm开发·嵌入式硬件·学习
ShiMetaPi1 天前
操作【GM3568JHF】FPGA+ARM异构开发板 使用指南:蓝牙
arm开发·嵌入式硬件·fpga开发·rk3568
明天见~~1 天前
ARM 体系结构与存储器
arm开发
一川月白7091 天前
ARM架构---指令集分类、内核组成,RAM与ROM的分类、工作模式、异常处理机制、立即数、s后缀、指令说明、汇编和 C 函数的相互调用
arm开发·函数调用·工作模式·arm内核·risc与cisc·s后缀·立即数
2401_888423091 天前
ARM-指令集全解析:从基础到高阶应用
arm开发
Aczone281 天前
硬件(六)arm指令
开发语言·汇编·arm开发·嵌入式硬件·算法
DebugKitty2 天前
硬件开发2-ARM基本概要
arm开发·mmu·soc·指令集·计算机系统·alu