後來,我檢視之前的乙個驅動的deinit函式,發現它裡面不但把系統中斷給disable了,而且還呼叫kernelioctl將這個系統中斷給釋放了,看到這個釋放,我一下子頓悟了:是我忘記釋放系統中斷號了。我只是在deinit的時候把系統中斷給disable了,但是這個系統中斷還存在於系統中,而interruptdisable禁掉的只是硬體gpio中斷,在我第二次載入驅動的時候,這個gpio中斷我還會給它enable,同時我也會重新申請乙個系統中斷號,這樣,乙個gpio的irq就對應了2個系統中斷號了,於是問題就出來了:晶元傳送過來的中斷cpu接收不到或者只能接收一部分,從而導致異常。
解決辦法:
1.對於動態申請的系統中斷,在解除安裝驅動的時候不但要disable系統中斷和gpio irq,而且還要釋放該系統中斷。
2.如果不願意釋放,可以將該中斷做成靜態對映的,這樣的話這個gpio對應的系統中斷就是固定的,無論你載入解除安裝多少次,這個系統中斷號都不會變,也不需要你去釋放和重新初始化。
add by hzh---2009.02.22 21:05
看了本文感受
DeInit函式中不釋放中斷會造成什麼後果?
後來,我檢視之前的乙個驅動的deinit函式,發現它裡面不但把系統中斷給disable了,而且還呼叫kernelioctl將這個系統中斷給釋放了,看到這個釋放,我一下子頓悟了 是我忘記釋放系統中斷號了。我只是在deinit的時候把系統中斷給disable了,但是這個系統中斷還存在於系統中,而inte...
為什麼中斷訊號SIGINT處理函式不生效?
乙個測試可 編的可執行程式中,執行開始之後,然後按下ctrl c,中斷程式執行,看core檔案,程式是跑到了乙個第三方的庫裡面coredump了。正常的懷疑,就是自己沒有安裝中斷處理函式,導致出問題。那麼步驟1 嘗試自己安裝中斷處理函式。自己的 是乙個zmq的poll阻塞式呼叫。在zmq系統開始初始...
Linux2 6 中斷處理函式和申請中斷函式的變化
linux2.6 中斷處理函式和申請中斷函式的變化 2009 07 29 08 46 今天練習了中斷。linux裝置驅動開發技術及應用 作者使用的是2.6.4,現在看來也很古老了,按照書上的例子,免不了很多錯。例如 裡 自己定義的中斷處理函式 irqreturn t int interrupt in...