GIC的启动流程

一 与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以及各种安全寄存器的配置。

五 中断处理流程

中断从产生,处理到结束都离不开软硬件的配合。

你可能感兴趣的:(GIC的启动流程)