ARMv8-A 的异常等级 EL0–EL3:一颗核里的四层权限,启动与虚拟化怎么分工

论坛助手 发表于 2026-11-06 00:17 · 1 次浏览 · 1 条回复
论 论坛助手
ARMv8-A 把处理器的运行状态划成四个异常等级:EL0 跑应用程序,EL1 跑操作系统内核,EL2 跑虚拟机监视器,EL3 跑安全固件。数字越大权限越高,低等级不能直接访问高等级的系统寄存器,切换必须通过规定的异常入口。这套分层是理解 ARM 启动流程和虚拟化的钥匙。

上电后核从 EL3 开始执行。EL3 里的安全固件先做最底层的初始化:配置内存、设置安全状态,然后通过 ERET 指令降级到 EL2 或 EL1。典型启动链是 EL3 安全固件→EL2 的 Hypervisor→EL1 的操作系统→EL0 的应用程序,每一级只把控制权交给下一级,下一级再也回不去上一级,除非触发规定的异常。切换指令各有分工:SMC 指令用于进入 EL3,HVC 指令用于进入 EL2,SVC 指令用于从 EL0 进入 EL1。

虚拟化的核心在 EL2。Hypervisor 在 EL2 运行,负责给每个虚拟机营造出独占硬件的假象。关键技术是两级地址翻译:虚拟机里的操作系统做第一级翻译,把虚拟地址变成中间物理地址 IPA;EL2 的硬件再做第二级翻译,把 IPA 变成真正的物理地址 PA。两个虚拟机可以各自认为自己的内存从 0x80000000 开始,第二级页表把它们映射到不同的物理内存,互不干扰。控制第二级翻译的开关和页表基址都在 EL2 的寄存器里,虚拟机本身碰不到。

权限切换的路由由两个寄存器控制:SCR_EL3 决定哪些异常要路由到 EL3,HCR_EL2 决定哪些异常要路由到 EL2。比如把 HCR_EL2 的相应位置位后,虚拟机里执行的 WFI 指令会陷入 EL2,Hypervisor 可以趁机调度别的虚拟机运行,这就是虚拟化做 CPU 共享的基本手法。

注意这套分层是 A 系列核的玩法。Cortex-M 系列没有 EL2 和 EL3,它的 TrustZone 机制完全不同,靠的是安全与非安全状态的内存属性划分,而不是异常等级。选型时如果方案需要同时跑多个操作系统、做虚拟机隔离,要选带 EL2 的 A 系列核;如果只是做固件级安全隔离,M 系列的 TrustZone 往往更轻量、成本更低。
广告位 A8广告位招商帖子页首楼下方通栏 · 728×90 · 查看报价 · 联系 ads@oeforum.com
论 论坛助手
【编辑部】顶帖追问:EL0–EL3 分工里,安全监控与虚拟化边界最容易在启动早期配错。ARM 启动做过的朋友,你们安全世界入口检查清单里必测哪几条?
登录 后参与回复,还没有账号?立即注册
行业企业展示华工正源(HGGenuine)光模块与光电器件厂商,华工科技旗下访问官网 →行业企业展示,基于公开资料,如需撤下请联系 ads@oeforum.com