linux中斷處理原理分析

2021-06-06 22:21:48 字數 1950 閱讀 9729

1、 中斷概念

為什麼需要中斷?

1)外設的處理速度一般慢於cpu

2)cpu不能一直等待外部事件

所以裝置必須有一種方法來通知cpu它的工作進度,這種方法就是中斷。

2、 中斷實現

在linux驅動程式中,為裝置實現乙個中斷包含兩個步驟:

1)向核心註冊中斷

2)實現中斷處理函式

3、 中斷註冊

request_irq用於實現中斷的註冊功能:

int request_irq(unsigned int irq, void (*handler)(int, void*, struct pt_regs *), unsigned long flags, const char *devname, void *dev_id)

返回0表示成功,或者返回乙個錯誤碼

中斷註冊(引數)

1) unsigned int irq  中斷號。

2)void (*handler)(int,void *,struct pt_regs *)  中斷處理函式。

3)unsigned long flags 與中斷管理有關的各種選項。

4)const char * devname  裝置名

5)void *dev_id  共享中斷時使用。

a)中斷註冊(中斷標誌)

在flags引數中,可以選擇一些與中斷管理有關的選項,如:

1)irqf_disabled(sa_interrupt)

如果設定該位,表示是乙個「快速」中斷處理程式;如果沒有設定這位,那麼是乙個「慢速」中斷處理程式。

2)irqf_shared(sa_shirq)

該位表明中斷可以在裝置間共享。

b)快速/慢速中斷

這兩種型別的中斷處理程式的主要區別在於:快速中斷保證中斷處理的原子性(不被打斷),而慢速中斷則不保證。換句話說,也就是「開啟中斷」標誌位(處理器if)在執行快速中斷處理程式時是關閉的,因此在服務該中斷時,不會被其他型別的中斷打斷;而呼叫慢速中斷處理時,其它型別的中斷仍可以得到服務。

c) 共享中斷

共享中斷就是將不同的裝置掛到同乙個中斷訊號線上。linux對共享的支援主要是為pci裝置服務。共享中斷也是通過request_irq函式來註冊的,但有三個特別之處:

1)申請共享中斷時,必須在flags引數中指定 irqf_shared位

2)dev_id引數必須是唯一的。

3)共享中斷的處理程式中,不能使用disable_irq(unsigned int irq)  為什麼? 如果使用了這個函式,共享中斷訊號線的其它裝置將同樣無法使用中斷,也就無法正常工作了。

4、 中斷處理程式

什麼是中斷處理程式,有何特別之處?中斷處理程式就是普通的c**。特別之處在於中斷處理程式是在中斷上下文中執行的,它的行為受到某些限制:

1) 不能向使用者空間傳送或接受資料

2) 不能使用可能引起阻塞的函式

3) 不能使用可能引起排程的函式

5、 中斷處理函式流程

void short_sh_interrupt(int irq, void *dev_id, struct pt_regs *regs)

{/* 判斷是否是本裝置產生了中斷(為什麼要做這樣的檢測?) */

value = inb(short_base);

if (!(value & 0x80)) return;

/* 清除中斷位(如果裝置支援自動清除,則不需要這步) */

outb(value & 0x7f, short_base);

/* 中斷處理,通常是資料接收 */

。。。。。。。。。

/* 喚醒等待資料的程序 */

wake_up_interruptible(&short_queue);

6、 釋放中斷

當裝置不再需要使用中斷時(通常在驅動解除安裝時), 應當把它們返還給系統,使用:void free_irq(unsigned int irq, void *dev_id)

linux中斷處理原理分析

首先需要了解一下中斷的概念 乙個 中斷 僅僅是乙個訊號,當硬體需要獲得處理器對它的關注時,就可以傳送這個訊號。核心維護了乙個中斷訊號線的登錄檔,該登錄檔類似於i o埠的登錄檔。模組在使用中斷前要先請求乙個中斷通道 或中斷請求irq 然後在使用後釋放該通道。用到的api就是request irq 以及...

linux中斷處理原理分析

部落格 fireaxe.blog.chinaunix.net tasklet作為一種新機制,顯然可以承擔更多的優點。正好這時候smp越來越火了,因此又在tasklet中加入了smp機制,保證同種中斷只能在乙個cpu上執行。在軟中斷時代,顯然沒有這種考慮。因此同一種中斷可以在兩個cpu上同時執行,很可...

linux中斷處理原理分析

tasklet作為一種新機制,顯然可以承擔更多的優點。正好這時候smp越來越火了,因此又在tasklet中加入了smp機制,保證同種中斷只能在乙個cpu上執行。在軟中斷時代,顯然沒有這種考慮。因此同一種中斷可以在兩個cpu上同時執行,很可能造成衝突。linux中斷下半部處理有三種方式 軟中斷 tas...