ARM SVC、HVC、SMC
ARM SVC、HVC、SMC

SVC (Supervisor Call)
目标环境: EL1 (操作系统内核)。
作用: 这是传统的系统调用(System Call)指令。当运行在EL0(用户态)的应用程序需要操作系统内核(运行在EL1)提供服务(如文件操作、进程创建、网络通信等)时,就会执行SVC指令。
行为: 触发一个同步异常,处理器将异常原因设置为SVC调用,并跳转到操作系统内核在EL1设置的异常向量表中对应的处理程序(如Linux的syscall处理入口)。
安全状态: 通常在同一个安全状态下发生(例如,都在Non-secure world)。它本身不触发安全状态的切换。
典型应用: Linux/Android的系统调用机制。
HVC (Hypervisor Call)
目标环境: EL2 (Hypervisor)。
作用: 用于虚拟化环境。当运行在EL1(通常是虚拟机内核)或EL0(虚拟机用户程序)的软件需要Hypervisor(运行在EL2)提供服务或执行特权操作(例如配置虚拟设备、管理虚拟机状态)时,就会执行HVC指令。
行为: 触发一个同步异常,处理器将异常原因设置为HVC调用,并跳转到Hypervisor在EL2设置的异常向量表中对应的处理程序。
安全状态: 通常在同一个安全状态下发生(例如,都在Non-secure world)。它本身不触发安全状态的切换。HVC调用可以源自Non-secure EL1或EL0(如果Hypervisor允许)。
依赖: 需要处理器支持虚拟化扩展(ARMv7-A的Virtualization Extensions或ARMv8-A的EL2)。
典型应用: KVM, Xen等Hypervisor的“hypercalls”。
SMC (Secure Monitor Call)
目标环境: EL3 (Secure Monitor)。
作用: 这是ARM TrustZone 技术的核心指令。用于在安全状态(Secure World)和非安全状态(Non-secure World)之间切换,或者请求运行在EL3或安全EL1(如Trusted OS)的安全服务。
行为: 触发一个同步异常,处理器将异常原因设置为SMC调用,并跳转到Secure Monitor固件在EL3设置的异常向量表中对应的处理程序。这是唯一一条能够直接改变处理器当前安全状态(SCR_EL3.NS bit)的指令。
安全状态:
可以从Non-secure world (EL2, EL1, EL0)调用SMC进入Secure world EL3。
也可以从Secure world (S-EL1, S-EL0)调用SMC返回Non-secure world或请求其他安全服务。
关键性: SMC是实现硬件强制隔离安全世界和非安全世界的关键机制。
依赖: 需要处理器支持TrustZone安全扩展。
典型应用:
Normal world OS (Linux/Android)请求Trusted OS (如OP-TEE)执行敏感操作(加解密、指纹识别、密钥存储)。
Trusted OS请求切换回Normal world OS。
Secure Monitor固件本身的服务调用。
PSCI(电源状态控制接口)的实现通常也依赖SMC。

浙公网安备 33010602011771号