如何调试来自输入设备的输入 (/dev/input/event*)

如何调试来自输入设备的输入 (/dev/input/event*)

我有一个使用 imon 驱动程序的红外接收器,我想让它与内核一起工作。现在遥控器上的一半按键(图像)有效,但像数字键这样非常重要的想法却无效!

奇怪的想法是,内核键映射模块(rc-imon-pad)似乎是正确的,但似乎并没有真正使用它,因为在没有该模块的情况下完全相同的键也可以工作。

当我加载 imon 时,似乎 rc-imon-pad 模块总是被加载,然后我怀疑键码被缓存,所以如果我卸载 rc-imon-pad 也没有什么区别

现在我迷路了,如果我这样做了,cat /dev/input/event5或者ir-keytable -t无论我按哪个键都有数据,所以驱动程序注册了按钮,但似乎它们被转换为错误的键码。

我的内核是来自 Natty 的 ubuntu 库存内核(Linux xbmc 2.6.37-11-generic #25-Ubuntu SMP Tue Dec 21 23:42:56 UTC 2010 x86_64 GNU/Linux)

答案1

您可能会发现有用的xinput listxinput test <device>

例如,

$x输入列表
⎡ 虚拟核心指针id=2 [主指针(3)]
⎜ ↳ 虚拟核心 XTEST 指针 id=4 [从指针 (2)]
⎜ ↳ SynPS/2 Synaptics TouchPad id=11 [从指针 (2)]
⎣ 虚拟核心键盘 id=3 [主键盘 (2)]
    ↳ 虚拟核心 XTEST 键盘 id=5 [从键盘 (3)]
    ↳ 电源按钮 id=6 [从键盘 (3)]
    ↳ 视频总线 id=7 [从键盘 (3)]
    ↳ 睡眠按钮 id=8 [从键盘 (3)]
    ↳ 华硕笔记本电脑额外按钮 id=9 [从键盘 (3)]
    ↳ AT Translated Set 2 键盘 id=10 [从键盘 (3)]

我可以监控我的键盘 ( xinput test 10) 或触摸板 ( xinput test 11,甚至xinput test "SynPS/2 Synaptics TouchPad")对于各种输入事件,它们会被漂亮地打印到控制台,并且参数也会被提取和打印。

这不会解决您的问题,但至少会通过破译例如cat /dev/input/event1产生的混乱有所帮助。


编辑(来自评论中的@alphanum):

我 10 年前的回答并不准确……抱歉。享受这个快速图表:

┌─────────────────────┐            ┌─────────────────┐               ┌──────────────┐    ┌──────────────────┐
│                     │ HID events │                 │ xinput events │              │    │                  │
│  HID/input device   ├───────────►│ Device-specific ├──────────────►│  the kernel  ├───►│ Userspace (apps) │
│ (e.g. USB keyboard) │    ▲       │     driver      │     ▲         │              │    │                  │
└─────────────────────┘    │       └─────────────────┘     │         └──────────────┘    └──────────────────┘
                           │                               │
                  evtest /dev/input/XX            xinput test <xinput id>

表现出2点:

  • 你得到的结果xinput test是“xinput-unified”;即由设备驱动程序处理。这些与用户空间应用程序看到的更相似。
  • 您获得的结果evtest /dev/input/XX更加“原始”,尚未转换为 xinput 格式。这些与您的 HID 设备所看到的更相似。

根据您是否构建物理 HID 设备或应用程序,您可以选择使用evtestxinput test用于调试。比较两者还可能有助于解决设备驱动程序问题。

答案2

我有相同的遥控器,并且它可以将正确的键码发送到我的 2.6.38-gentoo-r3 内核。我没有将键码编译为模块,因为它们可能还没有时间来选择单独的键映射。要么全有要么全无,我不喜欢无数无用的模块让我混乱。相反,我让 v4l-utils 使用 udev 来处理它。

我学到了一些东西:

  • 检查 ir-keytable -r 的输出,它应该列出所有适用的键码到您的遥控器。
  • 手动加载密钥表: ir-keytable -c -w bleh/keymaps/imon_pad,之后 ir-keytable -r 应该会返回该表
  • 你实际上可能有一个有故障的接收器,你没有提到历史。我记得至少在上面看到过一条消息lirc 列表那家伙说将箱子退回并换一个新箱子解决了他的问题。

让我们知道进展如何。

相关内容