LDD:中斷處理

1. Linux處理中斷的方式很大程度上與它在用戶空間處理信號時一樣的。

2. 從本質上講,中斷處理例程和其他代碼併發運行。會不可避免引起併發問題,並競爭數據結構和硬件。

3.請求中斷信號線

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

void free_irq(unsigned int irq, void *dev_id); 

中斷處理例程可以在驅動程序初始化或者設備第一次打開時安裝。但在驅動程序初始化時安裝會一直佔用中斷線。調用request_irq的正確位置應該是在設備第一次打開、硬件被告知產生中斷之前。調用free_irq的位置是最後一次關閉設備、硬件被告知不用再中斷處理器之後。這種技術的缺點是必須爲每個設備維護一個打開計數,這樣我們才能知道什麼時候可以禁用中斷。

 

查詢某個中斷線是否可用:int can_quest_irq(unsigned int irq, unsigned long flags);

4. /proc接口

/proc/interrupts

/proc/stat

 

5. 自動檢測IRQ號

驅動程序初始化時,最迫切的問題之一如何決定將要使用那條IRQ信號線。中斷號的自動檢測對於驅動程序可用性來說是一個基本要求。

有時,自動檢測依賴於一些設備擁有的默認特性,驅動程序可以假定設備使用了這些默認值。有些設備的設備更爲先進,驅動程序可以通過從設備的某個I/O端口或者PCI配置空間中讀出一個狀態字來獲得中斷號。如PCI標準要求外設聲明它們打算使用的中斷線。

然而並不是所有設備都對程序員很友好。自動檢測可能還是需要做一些探測工作。

 

 

 

 

 

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章