0
我正在尝试编写修改的/自定义的USB键盘驱动程序。我遇到了irq处理程序没有按预期收到按键的问题。修改的USB键盘驱动程序未接收按键(Linux)
我所做的:
- 制成的
/linux/driver/hid/usbhid/usbkbd.c
link副本,并修改usb_kbd_id_table
只具有销售商ID以及与我的键盘相关的产品ID。 - 构建修改后的驱动程序。
- 插入修改后的驱动程序
sudo insmod usbkbd.ko
。 - 通过将
usbhid:quirks=0x03eb:0x20ff:0x4
添加到/etc/default/grub
,防止键盘与标准HID驱动程序相关联。
行为:
- 在键盘堵漏,它是正确与我的司机有关。我知道这是因为我看到
printk
声明,我在usb_kbd_probe
中添加了/var/log/syslog
。它实际上显示了两次,因为该设备有2个接口。 - 函数
usb_kbd_irq
在循环中重复调用。我在这里也添加了一个printk
,我看到kbd->new
在每个字节中总是有0
。 - 该循环快速继续,按下任何按键都不起作用(无论按下哪个按键,每个字节中的
kbd->new
总是有0
)。
我已经尝试使用wireshark查看USB交通,我看到主机和设备来回。我期待着单向的交通。 wireshark screenshot
我很困惑为什么按键没有效果。如果按键被按下,我不应该在kbd->new
中看到一些数据吗?
编辑:截屏与设备信息在https://i.stack.imgur.com/lNq4e.png