REE侧、TEE侧以及Monitor模式或EL3都可接收中断信号。
在系统中存在两个VBAR寄存器和一个MVBAR寄存器,REE侧的VBAR寄存器中存放的是Linux内核的异常向量表基地址,OP-TEE中的VBAR寄存器存放的是OP-TEE系统的中断向量表基地址,而Monitor或者EL3的MVBAR存放的是Monitor模式或EL3运行时的中断向量表基地址,即在Monitor或者EL3阶段是可以接收外部中断信号的。
本节将介绍OP-TEE中断的配置和Monitor或EL3阶段中断的配置。
3.1 ARMv7中Monitor模式的异常向量表
ARMv7架构在ARM扩展出了Monitor模式,Monitor模式属于安全世界状态,用于实现ARM核安全世界状态与正常世界状态之间的切换,且该模式具有独立的中断向量表。
使用MVBAR寄存器来保存该运行模式的中断向量表的基地址。在OP-TEE初始化过程中会调用sm_init函数来初始化Monitor模式的配置,并将Monitor模式的中断向量基地址写入到MVBAR寄存器中,该函数内容如下:
FUNC sm_init , :
UNWIND( .fnstart)
mrs r1, cpsr //设置Monitor模式使用的栈
cps #CPSR_MODE_MON
sub sp, r0, #(SM_CTX_SIZE - SM_CTX_NSEC)
msr cpsr, r1
ldr r0, =sm_vect_table //将Monitor模式的异常向量表地址保存到r0寄存器中
write_mvbar r0 //