一 與GIC有關的基本概念
GIC是ARM中統管異常的模塊,所有加速器的中斷信號都將發送給GIC,再由GIC路由給不同的核去處理該中斷。
1 寄存器
VBAR_ELx:
ESR_ELx:?
ELR_ELx:?
MPIDR:
SCR_ELx:?
HCR_ELx:
2 異常的分類:
(1)同步異常:Abort(DABT,IABT,PC Alignment等) + 系統調用指令(svc、hvc、smc)
Abort:
系統調用指令:
------svc: Supervisor Call 指令使用戶模式程序可以請求 OS 服務
------hvc: Hypervisor Call 指令使來賓 OS 可以請求系統管理程序服務。
------smc: 通過 Secure monitor Call 指令,普通世界可以請求安全世界服務。(security model 參考)
上述
(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以及各種安全寄存器的配置。
五 中斷處理流程
中斷從產生,處理到結束都離不開軟硬件的配合。