一、Bl31中断处理流程概述
中断处理需要软件和硬件配合完成,GICv3根据中断分组情况以及系统当前运行的异常等级确定中断是以IRQ还是FIQ触发。
CPU通过设置SCR_EL3.IRQ和SCR_EL3.FIQ确定IRQ和FIQ中断分别是被路由到当前异常等级还是被路由到EL3。
若中断被路由到EL3,根据异常发生时系统所处的异常等级,使用的栈指针是SP_EL0还是SP_ELx(x> 0),以及使用的aarch32还是aarch64架构,在每个异常等级下都包含了四张异常等级表。以上具体的中断的路由规则可参考博文:【armv8中断路由机制】
bl31的异常向量表定义在runtime_exceptions.S中,其与下图的定义一致。
但在ATF中只实现了后面两种情形下的中断处理函数,即若当前系统运行在EL3下,则不允许异常发生。为简化讨论,我们只关注aarch64的情形,则实际上bl31只实现了下图中的第三种异常发生时中断的处理。
这是因为除了系统启动时以外