我正在尝试编写修改/自定义USB键盘驱动程序。我遇到了irq处理程序没有按预期接收按键的问题。
我做了什么:
/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
答案 0 :(得分:0)
问题在于我将设备与通用USBHID驱动程序分离的方式。列于上面的第4组:
如果我手动取消绑定设备并将其绑定到我的驱动程序,那么IRQ不再循环,事实上我确实看到每个按键的不同输入。我使用了https://lwn.net/Articles/143397/
中的说明