簡體   English   中英

編寫FreeBSD內核模塊,處理任意中斷並輸出到設備

[英]Writing a FreeBSD kernel module that handles arbitrary interrupt and output to device

我想編寫一個可以接受一些任意中斷的FreeBSD內核模塊,並在收到這些中斷后,將一些數據輸出到任意設備。 目前,我面臨幾個問題:

  1. 我如何通過特定的IRQ獲取中斷? 在Linux上有request_irq()調用,但似乎沒有類似的FreeBSD API ...說,我希望能夠通過我的內核模塊檢測所有鍵盤中斷(鍵盤在irq1上),我該怎么做那? (在Linux上可以通過調用free_irq(1, NULL)request_irq(1, ...) ,如果我錯了,請糾正我)。

  2. 是否有可能通過內核模塊寫入/ dev下的設備文件? 我已經閱讀了在FreeBSD內核模塊中讀取文本文件的問題示例 ; 按照這個例子,我能夠對常規文件進行讀/寫,但不能對/ dev下的設備文件進行讀/寫(“設備”是偽“回聲設備” ,這是char設備示例中使用的經典文件)。 我能夠打開文件。
    我確實理解在內核中執行文件I / O被認為是一種不好的做法,但我想不出任何其他方式......如果有人有更好的解決方案,請告訴我。 (即通過device_t節點寫入設備?)

我在內核中執行此操作的原因是我確實需要觸發所有中斷,並且在用戶空間中運行它可能會因內核線程搶占用戶線程而丟失中斷(中斷可能非常頻繁)。

如果有人能提供關於如何實現這個程序的其他想法,我也很感激(基本上,這個想法是一個可以完成微控制器工作的內核模塊......)

您可以使用bus_setup_intr注冊IRQ處理程序。

通常,在這種情況下做的是讓驅動程序收集中斷和任何其他有用數據,並通過設備導出,然后用戶空間中的(實時可能?)進程可以從一個設備讀取,做任何需要做的事情,並寫入其他設備。

暫無
暫無

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

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