GIC的启动流程
2017-07-21 本文已影响0人
欢仔_159a
一 与GIC有关的基本概念
GIC是ARM中统管异常的模块,所有加速器的中断信号都将发送给GIC,再由GIC路由给不同的核去处理该中断。
1 寄存器
VBAR_ELx:
ESR_ELx:
ELR_ELx:
MPIDR:
SCR_ELx:
HCR_ELx:
2 异常的分类:
(1)同步异常:DABT,IABT,PC Alignment
(2)异步异常:IRQ,FIQ,Serror
二 ARMv8是如何识别异常的?
在OS刚起来时的一段*.s的汇编文件中有个中断向量表,ARM支持的几种异常在该表中都有对应的入口。并且向量表的地址存放在对应的VBAR_ELx,一旦编译链接成功,VBAR_ELx的值就已经固定。
当系统产生异常时,首先会根据ESR_ELx判断是否有异常发生,若有则根据VBAR_ELx找到中断向量表,再根据ESR_ELx的EC域识别中断类型,在向量表中寻找对应中断类型的入口,然后开始中断处理。
三 中断路由
每个核都有一个MPIDR寄存器,并且每个核的MPIDR寄存器的值都不相同,这可以作为每个核的唯一标志。
比如我希望某个中断由核1处理,那么GIC中的路由寄存器需要根据核1的MPIDR值去配置。
四 中断在哪个EL上处理?
这取决于当前中断分组,当前所处ELx以及各种安全寄存器的配置。
五 中断处理流程
中断从产生,处理到结束都离不开软硬件的配合。