linux 驅動中斷部分學習

2021-08-14 14:30:01 字數 453 閱讀 2506

學習按鍵中斷,中斷程式可以在中斷函式中一次實現,也可以分開在中斷的上下半部實現,上半部實現緊急的處理,下半部做些不緊急的處理。上下半部的實現分為:軟中斷、tasklet、工作佇列、執行緒中斷。軟中斷和tasklet處理函式中不能睡眠。

問題1:    

今天做工作佇列的實驗,在初始化函式中需要申請中斷號同時初始化關聯work_struct和下半部的處理函式,剛開始我把初始化放在申請中斷號之後,載入模組的時候系統報很多錯誤。如果把工作佇列初始化放在申請中斷號之前就可以正常執行了。

不知道為什麼申請中斷後成功之後gpio引腳會自動觸發一次中斷,可能是這個中斷的觸發導致初始化不能放在申請中斷號之後,申請中斷號會同時使能中斷,中斷觸發後呼叫不到正確下半部處理函式可能就導致出錯了。至於為什麼觸發一次中斷還沒找到原因。

問題2:

發現如果連續觸發,進入上半部的中斷次數大於下半部,思考為什麼?怎麼才能讓上下半部的觸發次數相等。

linux中斷部分

linux中斷處理程式分為兩部分,上半部 top half 與底半部 bottom half 上半部響應中斷,底半部為中斷處理函式 申請中斷 int request irq unsigned int irq,irqreturn t handler int,void struct pt regs un...

linux驅動學習 linux中斷程式編寫流程

linux中斷 1 確定中斷號 2 申請中斷號 request irq 不用一定要釋放free irq 3 編寫中斷服務函式 request irq unsigned int irq,irq handler t handler,unsigned long flags,const char name,...

Linux 裝置驅動 中斷處理

為什麼需要中斷 1,外設的處理速度一般慢於 cpu 2,cpu 不能一直等待外部事件 所以裝置必須有一種方法來通知 cpu 它 的工作進度,這種方法就是中斷.在 linux 驅動程式中,為裝置實現乙個中斷包含兩個步驟 1,向核心註冊中斷 2,實現中斷處理函式 request irq 用於實現中斷的註...