1.前言
ARMV8系统级编程模型主要包括异常级别、运行状态、安全状态、同步异常、异步异常、DEBUG
本文主要对系统级编程模型做一个概要介绍
2. 异常级别
2.1 Exception level概述
ELx(x<4),x越大等级越高,执行特权越高
执行在EL0称为非特权执行
EL2 没有Secure state,只有Non-secure state
EL3 只有Secure state,支持EL0/EL1的Secure 和Non-secure之间的切换
EL0 & EL1 必须要实现,EL2/EL3则是可选实现
当接收到一个异常时,异常级别只能调高或保持;
当从异常返回时,异常级别只能调低或保持
在接收到异常将要切换或保持的异常级别称为目标异常级别
每个异常级别本身有一个默认固定的目标异常级别,还可以通过寄存器设置目标异常级别,目标异常级别不能为EL0
当PE运行在一个异常级别时,可以访问如下两种资源:
当前异常级别和安全状态组合下的资源;
低异常级别可访问的资源(要符合安全状态)
2.2 典型的Exception Level使用模型
异常级别
运行的软件
EL0
Application
EL1
Linux kernel- OS
EL2
Hypervisor (可以理解为上面跑多个虚拟OS)
EL3
Secure Monitor(ARM Trusted Firmware)
2.3 异常相关术语