一、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(系统错误)。

相关推荐
切糕师学AI8 小时前
ARM 汇编指令:LDM
汇编·arm开发
ShiMetaPi9 小时前
GM-3568JHF丨ARM+FPGA异构开发板系列教程:外设教程 09 CAN
arm开发·fpga开发·fpga·rk3568
未来之窗软件服务9 小时前
幽冥大陆(八十)Win7环境下ARM架构开发—东方仙盟练气期
arm开发·架构·仙盟创梦ide·东方仙盟
未来之窗软件服务1 天前
国产化系统(一)ARM轻量化系统开发与试用全指南—东方仙盟练气期
arm开发·仙盟创梦ide·东方仙盟·阿雪技术观·国产化操作系统
林政硕(Cohen0415)2 天前
ARM Linux Qt Widget 虚拟键盘输入法移植
linux·arm开发·qt·键盘·输入法
100编程朱老师2 天前
Linux 下互联网络编程的基础知识
arm开发
番茄灭世神3 天前
32位ARM单片机视频教程第一篇
arm开发·单片机·嵌入式·gd32·pn学堂
驱动探索者3 天前
[缩略语大全]之[ARM CPU]篇
arm开发
ArrebolJiuZhou4 天前
00 arm开发环境的搭建
linux·arm开发·单片机·嵌入式硬件
迪三达4 天前
智能体开发-2-MCP
arm开发