2013-05-07 83 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