XML DOM 獲取節點值
1024
2025-03-31
1.中斷
#中斷使得硬件得以發出通知給處理器,本質上是一種電信號
#中斷隨時可以產生,內核隨時會被打斷
#不同設備的中斷不同,每個中斷都通過一個唯一的數字標識,稱為IRQ(中斷請求)
2.中斷處理程序
#響應中斷的時候,內核會執行一個函數(中斷處理程序或中斷服務例程)
#在Linux中,中斷程序為普通的C函數
3.上半部和下半部的對比
#中斷處理分為兩部分:上半部和下半部
#上半部:中斷處理程序,接收到一個中斷,立刻執行
#下半部:允許稍后完成的工作
4.注冊中斷處理程序
#中斷處理程序是硬件驅動程序的組成部分,如果設備使用中斷,那么相應的驅動就注冊一個中斷處理程序
#驅動程序通過request_irq()函數注冊一個中斷處理程序,并激活給定的中斷線
requset_irq(unsigned int irq, irq_handler_t handler, unsigned long flags, const char *name, void *dev)
1.中斷處理程序標識
#第一個參數irq表示要分配的中斷號
#第二個參數handler是一個指針,指向處理這個中斷的實際中斷處理程序
#第三個參數flags可以為0,也可以為:
-IRQF_DISABLED:該標志被設置后意味著處理中斷處理程序本身之間期間中斷所有其他中斷
-IRQF_SAMPLE_RANDOM:此標志表明這個設備產生的中斷對內核熵池有貢獻,內核熵池負責從各種隨機事件導出真正的隨機數
-IRQF_TIMER:該標志是特別為系統定時器的中斷處理準備的
-IRQF_SHARED:此標志表明可以在多個中斷處理程序之間共享中斷線
#第四個參數name是與中斷相關的設備的ASCII文本表示
#第五個參數dev用于共享中斷線
#request_irq()成功執行會返回0,如果返回非0,則有錯誤
#request_irq()函數可能會睡眠,因此,不能在中斷上下文或其他不允許阻塞的代碼中調用該函數
2.一個中斷例子:
request_irq():
if(request_irq(irqn, my_interrupt, IRQF_SHARED, "my device", my_dev)){
printk(KEEN_ERR, "my_device: cannot register IRQ %d\n", irqn);
return -EIO;
}
3.釋放中斷處理程序
#卸載驅動程序時,需要注銷相應的中斷處理程序,并釋放中斷線,調用:
void free_irq(unsigned int irq, void *dev)
如果這條中斷線不是共享的,則函數刪除中斷處理程序并禁用中斷線
如果這條中斷線是共享的,則只刪除*dev對應中斷處理程序,只要在刪除了該中斷線上的所有中斷處理程序后,才會禁用中斷線
5.編寫中斷處理程序
Linux
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。
版權聲明:本文內容由網絡用戶投稿,版權歸原作者所有,本站不擁有其著作權,亦不承擔相應法律責任。如果您發現本站中有涉嫌抄襲或描述失實的內容,請聯系我們jiasou666@gmail.com 處理,核實后本網站將在24小時內刪除侵權內容。