簡體   English   中英

在沒有實際硬件的情況下在 linux 上編寫中斷處理程序需要做什么?

[英]What needs to be done to write interrupt handler on linux without actual hardware?

是否有任何硬件模擬器可以在 Linux 上產生硬件中斷。 我正在尋找可以處理硬件中斷、讀取或寫入硬件 memory、延遲工作、上下半部分處理等的設備驅動程序。基本上,希望學習端到端的完整設備驅動程序。 但是障礙是——如何模擬硬件。 我真的需要一些可以產生中斷的硬件嗎? 我瀏覽了 LDD3 書,但他們使用的是skull - 一塊 kernel 空間 memory 模擬為硬件,但這不能產生中斷,還是可以? 請放一些光。

LDD3 的頭骨驅動程序不會產生中斷,因為沒有實際的硬件來產生它們。

設備驅動程序中斷是一種機制,它允許 CPU 開始參與其他任務,因為正在執行的操作將由異步中斷處理。

例如,如果沒有 dma 正在使用,則軟盤驅動器中斷的 cpu 因為磁盤傳輸的每個字節都被讀取。 如果使用 DMA,磁盤將直接傳輸以 ram 傳輸字節,直到實際傳輸一個完整塊(或一組)。 然后會出現一些硬件中斷。

串行接口以編程方式中斷您的計算機。 當單個字符到達時,當特定字符到達時(比如說一個\r字符)。

LDDP 向您展示了 linux 設備驅動程序是如何工作的......但是由於本書不能假設您有任何具體的設備,因此它無法選擇合適的硬件作為可用的(奇怪,因為通常每台電腦都有一個並行端口或一個串行端口)我認為LDDP3有一些使用並行端口的驅動程序,但是在開始中斷硬件之前,您必須繼續閱讀本書。

必須將異步中斷編程到設備中(設備必須知道它必須在傳輸結束時生成中斷),因此必須激活它們。 為了正確捕獲中斷,必須在第一個中斷發生之前安裝中斷處理程序,否則您將進入一個沒有中斷的 state,因為它到達並丟失了。 最后,必須確認中斷。 一旦存儲了來自設備的數據,就必須重新激活它們,因此可能會再次發生另一個中斷。 您需要了解您必須保護您的進程不訪問與中斷處理程序共享的數據結構以及如何執行此操作。 所有這些都在書中進行了解釋....但您必須閱讀它,並且不要停留在骷髏驅動程序中,這是本書中開發的第一個驅動程序。

順便說一下,用戶模式的kill(2)sigaction(2)系統調用是進入硬件中斷世界的一種非常接近的方法,因為它們是異步的,你可以在進入臨界區之前阻止它們發生,並且您可以通過kill(2)從另一個程序外部對您的進程進行模擬。 您不會看到差異,但是您不會導致整個系統崩潰,而只會殺死一個掛起的進程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM