『壹』 linux ARM GIC中斷子系統和cpu timer
Linux在ARM GIC中斷子系統和CPU timer中實現了中斷的高效管理,包括不同類型的中斷(SPI、PPI、SGI、LPI)和中斷處理流程。本文將詳細探討GIC V3的中斷配置、使能,以及Linux驅動中的相關代碼示例,同時涉及LPI中斷的內存配置和路由機制,以及CPU timer的時鍾中斷關聯。
Linux下的ARM GIC(Generic Interrupt Controller)中斷子系統是個關鍵組件,它負責中斷的分發和路由。GIC V3有四種主要的中斷類型:SPI(共享外設中斷)處理多個CPU的公共設備,PPI(私有外設中斷)專供單個CPU,SGI(軟體生成中斷)用於核間通信,而LPI(局部性特定中斷)是GICv3新增,採用消息機制並支持PCIe MSI/MSI-x。
中斷流程分為一般和LPI兩種,前者涉及多個步驟,後者通過消息傳遞到相應處理器。Linux驅動中,設備會通過固定HWirq申請中斷,驅動會將其轉換為系統中斷並設置處理函數。
GICV3配置與使能涉及多個寄存器,如GICD_CTLR、GICD_IROUTER等,它們用於控制中斷的全局優先順序、路由方式和分組。特別是LPI中斷,需要在內存中初始化配置和pending表,然後寫入相關寄存器以啟用。
CPU timer則通過時鍾相關寄存器如CNTPS_CVAL_EL1來觸發中斷,當系統時間戳超過預設值時,中斷會被處理。整體而言,Linux與ARM GIC的協作確保了系統的穩定和高效。