2013-05-07 39 views
1

我正在對android內核中的輸入設備驅動程序進行一些編輯。內核開發新手:內核中的「虛擬」輸入驅動程序?

該器件的鍵位和evbits有效範圍有限。我想要做的是創建一個與任何物理設備無關的新的/ dev/input事件節點,啓用更多的keybits和evbits,以便我可以將實際的輸入信號從物理驅動程序發送到用戶空間,用戶空間我聽他們和收到我可以注入輸入事件到寫入其事件節點的「虛擬」驅動程序。

linux/android內核提供這樣的選項嗎?我應該遵循哪條路?除此之外還有其他選擇嗎?

作爲第二種選擇,我可以在同一個驅動程序中創建兩個輸入節點並僅將input_reports發送到「物理」節點嗎?

+0

不當然我明白。如果物理驅動程序不支持某些鍵位,您將如何計劃在用戶空間中接收不受支持的鍵? – msh 2013-05-20 16:02:18

+0

@msh我基本上需要兩個設備,一個綁定到一個有限的可用密鑰集的真實設備:我會通過input_report_key將它們從內核空間發送到用戶空間。第二個「虛擬」設備不應該綁定到任何真實設備,並且應該有更廣泛的可用鍵位,然後在用戶空間中,我想傾聽來自真實設備的鍵輸入並注入,將數據寫入輸入事件節點,到虛擬設備。 – Vektor88 2013-05-21 13:32:51

回答

1

我看到兩個選擇:

  1. 創建虛擬輸入設備 - 你可以寫自己的驅動程序,或使用uinput

  2. 繞道低電平輸入susbsystem和inject key events at the Android framework level

+0

我認爲'uinput'或自定義的驅動程序可能是我需要的。你能提供一些指南/文章或任何方向?我不太瞭解內核結構。而且,即使沒有指定輸入事件應該有可能更少的滯後,考慮到這個新的條件,輸入是否可靠呢? – Vektor88 2013-05-22 09:26:10

+1

http://thiemonge.org/getting-started-with-uinput – msh 2013-05-23 00:24:48

+0

詢問有關輸入的人可能在使用c/C++。上面的備選方案2是Java,可能與許多人不相關。 – 2016-10-24 18:58:53