GIC的啟動(dòng)流程

一 與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é)束都離不開軟硬件的配合。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容