首先闡述下為什麼內核要將中斷分成上下半部
因為中斷本身打斷了正常的程序執行,中斷中不能進行任務調度,所以中斷需要快返回,但是某些操作必須在中斷中執行。
如果內核需要執行一個硬件相關、時間敏感、不能被中斷的操作,那麼這些操作就應該放到上半部中,其他能夠推遲的操作應該放到下半部中去,這樣完成了中斷中必須完成的操作,又能很好的進行調度。
看看內核對於下半部的支持
首先說以下如何添加自己的軟中斷程序
首先添加自己的軟中斷類型,值越低優先級越高
用open_softirq增加相對應的中斷處理函數
用raise_softirq將自己的軟件中斷有效
之後內核在do_softirq中便能調用軟件中斷了
然後看看tasklet
通過以上3個方法來聲明自己的tasklet
當然要編寫自己的執行函數 void func(unsigned long arg);
通過以上兩個函數,將自己的tasklet加入到調度中去
當然也有相應函數來取消自己的tasklet,這裡不介紹了
接下來看看工作隊列workqueue
通過以上方法能聲明一個work
當然得自己編寫執行函數
通過以上方法將work加入系統workquene
當然也可以創建自己的工作隊列,然後將work加入自己的工作隊列中