當前位置:吉日网官网 - 傳統美德 - Linux內核中斷之中斷調用流程

Linux內核中斷之中斷調用流程

本文基於 RockPI 4A 單板Linux4.4內核介紹中斷調用流程。

ARMv8包括兩種運行狀態:AArch64和AArch32。

AArch64中不再使用AArch32中的7種特權模式,而是提出了Exception Levels的概念,包括:

1)EL0:用於用戶態程序,權限最低

2)EL1:給內核使用,權限稍高

3)EL2:虛擬化相關,權限更高

4)EL3:安全相關,權限最高

Linux內核中壹般只使用EL0和EL1。

AArch64異常向量表中的異常包括:

1)Synchronous exception(同步異常)

2)SError

3)IRQ

4)FIQ

註:SError、IRQ和FIQ屬於異步異常。

在Linux內核中,在 arch/arm64/kernel/entry.S 文件中定義了異常向量表,內容如下:

選取 el1_irq() 函數介紹Linux內核中斷的調用流程。

文件: arch/arm64/kernel/entry.S ,調用流程如下:

1、handle_irq()初始化

在 DTS 解析階段完成 handle_irq() 函數的初始化,流程如下:

gic_irq_domain_map() 函數中完成了 handle_irq() 函數的賦值,具體執行如下:

2、handle_irq()實現

以***享外設中斷 SPI 的中斷處理函數 handle_fasteoi_irq() 為例,繼續跟蹤中斷的執行過程。

handle_irq_event_percpu() 函數會調用已經註冊的中斷處理函數,同時喚醒 irq_thread 線程。

3、中斷處理線程

在使用 request_threaded_irq() 函數申請中斷時,會創建壹個 irq_thread 線程,調用流程如下:

irq_thread 線程平時在睡眠狀態,等待 handle_irq_event_percpu() 函數喚醒,進壹步執行已註冊的中斷處理線程函數。

使用 DRM 框架中 HDMI 中斷驗證中斷調用流程。

文件: drivers\gpu\drm\bridge\synopsys\dw-hdmi.c

在中斷處理函數 dw_hdmi_hardirq() 和中斷處理線程函數 dw_hdmi_irq 中增加 dump_stack() 調用( 註:僅限於調試驗證 )。

插入 HDMI 線,系統啟動後,顯示中斷調用流程的日誌如下:

  • 上一篇:剁椒後手很辣怎麽辦?
  • 下一篇:十大公認的最佳甜酒。
  • copyright 2024吉日网官网