2012-06-01 33 views
2

我正在編寫一些定製的應用程序並允許更改linux內核中的中斷處理程序代碼。在linux中的中斷環境中運行用戶線程

我有一個正在等待中斷髮生的用戶線程。如果發生中斷,那麼我想要做的第一件事就是執行該用戶線程。

有什麼辦法可以使它工作。

感謝

回答

6

創建一個字符設備(也就是內核做什麼,處理設備)。讓用戶線程從該設備讀取。它會掛起,因爲沒有可讀的字符。

當中斷髮生時,從模塊向該設備輸出一個字符(或一些有意義的消息)。線程將醒來,閱讀消息並繼續。

給處理程序線程一些很好的優先級,以便它提前醒來。

或者,您可能只需要等待selectsleep的線程併發送一個信號(內核函數kill_proc_info),線程就會喚醒。確保線程處理信號。

+0

目前,我睡在線程和實施的信號。如果我做了「輪詢選擇」,那麼線程會在linux的同一個計時器中醒來嗎?在Windows中,我可以安排一個dpc並在該線程中做事件通知。我不確定信號/選擇是否同樣有效。 –

1

而不是做一個字符驅動程序做一個矯枉過正的做一個sysfs入口就足夠了。您可以執行任何阻塞調用,例如,讀取/選擇/輪詢該sysfs條目並從中斷處理程序反饋給它。解決

有趣的問題,你是

  1. 的情況下,另一箇中斷,而你已經在運行時會發生什麼。
  2. 如果中斷髮生了兩次,但只有一次醒來,該怎麼辦?

+0

netlink呢? – John