一、中断
接下来,我们将查看系统中的中断,如下图所示:
通用中断控制器(GIC)支持TrustZone。每个中断源,在GIC规范中称为INTID,分配到以下三个组之一:
• Group0:安全中断,以FIQ方式发出信号
• 安全Group1:安全中断,以IRQ或FIQ方式发出信号
• 非安全Group1:非安全中断,以IRQ或FIQ方式发出信号
这由软件写入GIC[D|R]_IGROUPR<n>和GIC[D|R]_IGRPMODR<n>寄存器来控制,而这只能在安全状态下完成。分配不是静态的,软件可以在运行时更新分配。
对于配置为安全的INTID,只有总线安全访问才能修改状态和配置。与安全中断对应的寄存器字段在非安全总线访问中读取为0。
对于配置为非安全的INTID,安全和非安全总线访问都可以修改状态和配置。
为什么有两个安全组?通常,Group0用于由EL3固件处理的中断。这些与低级系统管理功能有关。安全Group1用于所有其他安全中断源,通常由S.EL1或S.EL2软件处理。
二、中断处理
处理器有两种中断,即IRQ和FIQ。当中断变为挂起状态时,GIC根据中断的组和处理器当前