SMC全称:Secure Monitor Call
目的:进入到EL3异常等级
应用场景:大于等于EL1异常等级下使用(EL0下不能使用)
官方介绍以及使用方式如下:
主要配置:
(1) SCR_EL3.SMD:
(2) HCR_EL2.TSC
主要功能如下:
实验验证:
功能0
基本配置:安全状态,安全;异常等级EL3;执行状态,AArch64
具体操作:执行SMC #0x1234
操作前后相关寄存器变化对比见下图:
测试结论:进入到EL3,EC值等于0x17,并且能将值传递到ESR_EL3中的imm16字段中
功能1
基本配置:安全状态,安全;异常等级Supervisor;执行状态,AArch32
具体操作:执行SMC #0x08
操作前后相关寄存器变化对比见下图:
测试结论:进入到EL3,EC值等于0x13
疑问:传递参数不能超过15,并且参数不知道传递到哪里
功能2和功能3
略
功能4
基本配置:安全状态,非安全;异常等级EL1;执行状态,AArch64
具体操作:执行SMC #0x1234
操作前后相关寄存器变化对比见下图:
测试结论:进入到EL2,EC值等于0x17,并且能将值传递到ESR_EL2中的imm16字段中
注:
(1)从EL3切到EL1非安装状态的时候,HCR寄存器RW, bit [31]设置为1,否则设置不成功
(2)HCR寄存器TSC, bit [19]设置为1
功能5
基本配置:安全状态,非安全;异常等级Supervisor;执行状态,AArch32
具体操作:执行SMC #0x8
操作前后相关寄存器变化对比见下图:
测试结论:Hyp mode,EC值等于0x13
汇总:
结论:除了功能1外,其它功能经验证符合预期