一 與GIC有關(guān)的基本概念
GIC是ARM中統(tǒng)管異常的模塊坡倔,所有加速器的中斷信號(hào)都將發(fā)送給GIC漂佩,再由GIC路由給不同的核去處理該中斷。
1 寄存器
VBAR_ELx:
ESR_ELx:?
ELR_ELx:?
MPIDR:
SCR_ELx:?
HCR_ELx:
2 異常的分類:
(1)同步異常:Abort(DABT投蝉,IABT瘩缆,PC Alignment等) + 系統(tǒng)調(diào)用指令(svc、hvc熟尉、smc)
Abort:
系統(tǒng)調(diào)用指令:
------svc: Supervisor Call 指令使用戶模式程序可以請(qǐng)求 OS 服務(wù)
------hvc: Hypervisor Call 指令使來賓 OS 可以請(qǐng)求系統(tǒng)管理程序服務(wù)。
------smc: 通過 Secure monitor Call 指令雇毫,普通世界可以請(qǐng)求安全世界服務(wù)枚粘。(security model 參考)
上述
(2)異步異常:IRQ福也,F(xiàn)IQ,Serror
二 ARMv8是如何識(shí)別異常的?
在OS剛起來時(shí)的一段*.s的匯編文件中有個(gè)異常向量表现喳,ARM支持的幾種異常在該表中都有對(duì)應(yīng)的入口冰单。并且向量表的地址存放在對(duì)應(yīng)的VBAR_ELx诫欠,一旦編譯鏈接成功,VBAR_ELx的值就已經(jīng)固定甩挫。
當(dāng)系統(tǒng)產(chǎn)生異常時(shí),首先會(huì)根據(jù)ESR_ELx判斷是否有異常發(fā)生亦渗,若有則根據(jù)VBAR_ELx找到中斷向量表痴突,再根據(jù)ESR_ELx的EC域識(shí)別中斷類型辽装,在向量表中尋找對(duì)應(yīng)中斷類型的入口殉挽,然后開始中斷處理。
三 中斷路由
每個(gè)核都有一個(gè)MPIDR寄存器傻唾,并且每個(gè)核的MPIDR寄存器的值都不相同伪煤,這可以作為每個(gè)核的唯一標(biāo)志带族。
比如我希望某個(gè)中斷由核1處理,那么GIC中的路由寄存器需要根據(jù)核1的MPIDR值去配置择克。
四 中斷在哪個(gè)EL上處理?
這取決于當(dāng)前中斷分組,當(dāng)前所處ELx以及各種安全寄存器的配置骡湖。
五 中斷處理流程
中斷從產(chǎn)生,處理到結(jié)束都離不開軟硬件的配合。