2011-03-02 43 views
3

我正試圖編寫一個內核模塊,禁止一天中的特定時間之間的輸入。我發現如何獲得時間(How to get current hour (time of day) in linux kernel space)以及如何安排一個功能。 我似乎無法解決如何禁用輸入。我認爲必須有內核來做這件事,但讀過API後,我仍然沒有進一步向前。我想我應該直接訪問驅動程序並關閉它們或某些東西,但這似乎有點不通用。 這甚至可能嗎?如何禁止從Linux內核模塊訪問鍵盤和鼠標?

謝謝你的時間。

+0

我會去看鼠標驅動程序,鍵盤驅動程序和'tty'子系統。 – 2011-03-02 20:37:10

+0

我不確定,但我猜這在'X'級比在內核級更容易完成。 – Job 2011-03-02 20:38:47

回答

2

我不確定,但是如果您在用戶空間中,切換到未使用的虛擬控制檯,然後將鍵盤置於原始模式應該就足夠了。這將阻止通常會切換回另一個虛擬控制檯的組合鍵。這不會禁用鼠標,但如果不是當前VT,X應該忽略鼠標(只要確保gpm沒有運行)。

如果啓用該功能,您還必須禁用magic-sysrq組合鍵,因爲有一個sysrq鍵可以將鍵盤從原始模式中取出,否則會繞過該模式。


編輯:它應該有可能從內核空間做所有這些,只要你在正常的任務上下文中。內核線程會這樣做,我期望。

您可以從內核打開文件和設備,它不被推薦。一個包含/ dev的命名空間的任務(我不確定內核任務是否執行)。你可以調用filp_open(我認爲)並獲得一個文件*,然後你可以在它的file_operations(f_op)上調用適當的方法。這應該包括執行上述操作所需的ioctls。

可能有直接打開設備的方法,而不是通過filp_open。

總之,應該有可能。從內核空間執行是一件非常狡猾的事情。

+0

就是這樣。我在內核空間,所以這是行不通的。 – 2011-03-03 10:58:07

0

我能想到的一種方法是禁用關鍵字和鼠標的IRQ。 disable_irqenable_irq可以用來做到這一點。

Here is IRQ numbers for x86。如果需要的話,您可能需要諮詢其他表以獲得其他平臺(如SPARC,IA-64)的IRQ。

+0

如果您使用的是USB鍵盤,禁用傳統鍵盤IRQ將不會對您有所幫助。 – 2011-03-03 18:35:28