Kernel中斷處理模型

2021-09-25 11:22:18 字數 1296 閱讀 7019

kernel

中斷處理模型結構圖如下:

下面簡單介紹一下:1.

linux

定義了名字為irq_desc的中斷例程描述符表:(include/linux/irq.h)

struct irqdesc irq_desc[nr_irqs];

nr_irqs

表示中斷源的數目。2.

irq_desc

是乙個指向irq_desc_t結構的陣列, irq_desc_t結構是各個裝置中斷服務例程的描述符。irq_desc_t結構體中的成員action指向該中斷號對應的irqaction結構體鍊錶。

irqaction

結構體定義如下:

/* include/linux/interrupt.h */

struct

irqaction ;

其中關鍵的handler成員指向了該裝置的中斷服務程式,由執行request_irq時建立。3.

在驅動程式初始化時,若使用到中斷,通常呼叫函式

request_irq

()建立該驅動程式對應的

irqaction

結構體,並把它登記到

irq_desc[irq_num]-> action

鍊錶中。

iqr_num

為驅動程式申請的中斷號。

request_irq

()函式的原型如下:

/* kernel/irq/manage.c */

intrequest_irq 

( unsigned

intirq

, irqreturn_t 

(*handler

)(int

,void

*,struct

pt_regs 

*),unsigned

long

irqflags

,const

char

*devname

,void

*dev_id );

這樣當cpu接收到中斷請求後,就可以根據中斷號通過irq_desc找到該裝置的中斷服務程式。流程如上圖所示。

4.關於共享中斷

共享中斷的不同裝置的iqraction結構體都會新增進該中斷號對應的irq_desc結構體的action成員所指向的irqaction鍊錶內。當核心發生中斷時,它會依次呼叫該鍊錶內所有的

handler

函式。因此,若驅動程式需要使用共享中斷機制,其中斷處理函式必須有能力識別是否是自己的硬體產生了中斷。通常是通過讀取該硬體裝置提供的中斷flag

標誌位進行判斷。

Kernel中斷處理模型

linux 2.6.25.20 kernel 中斷處理模型結構圖如下 下面簡單介紹一下 1 linux 定義了名字為irq desc的中斷例程描述符表 include linux irq.h struct irqdesc irq desc nr irqs nr irqs 表示中斷源的數目。2 irq...

窺探 kernel 關於中斷

管理系統中的各個裝置是核心的任務,核心可以通過2中方式來實現。1 輪詢 以一定的時間來訪問裝置,參看其狀態並處理。2 中斷 裝置向核心傳送請求,核心再來完成處理。中斷的分類 中斷可分為同步中斷和非同步中斷。同步中斷是由cpu產生的,又稱為內部中斷。這裡的同步是指中斷指令訊號和 同時執行,在一條 執行...

Kernel硬體中斷的初始化流程

kernel硬體中斷的初始化流程 porting kernel到乙個全新的開發板時,通常hardware irq的初始化函式是要我們自己實現的。那我們實現了自己硬體的中斷初始化函式之後,核心是如何呼叫到它的呢?核心有自己的一套支援多平台的架構。下面我們分析核心中斷初始化的過程以及如何呼叫到乙個新平台...