2016-11-26 139 views
0

我正在嘗試編寫修改的/自定義的USB鍵盤驅動程序。我遇到了irq處理程序沒有按預期收到按鍵的問題。修改的USB鍵盤驅動程序未接收按鍵(Linux)

我所做的:

  1. 製成的/linux/driver/hid/usbhid/usbkbd.clink副本,並修改usb_kbd_id_table只具有銷售商ID以及與我的鍵盤相關的產品ID。
  2. 構建修改後的驅動程序。
  3. 插入修改後的驅動程序sudo insmod usbkbd.ko
  4. 通過將usbhid:quirks=0x03eb:0x20ff:0x4添加到/etc/default/grub,防止鍵盤與標準HID驅動程序相關聯。

行爲:

  1. 在鍵盤堵漏,它是正確與我的司機有關。我知道這是因爲我看到printk聲明,我在usb_kbd_probe中添加了/var/log/syslog。它實際上顯示了兩次,因爲該設備有2個接口。
  2. 函數usb_kbd_irq在循環中重複調用。我在這裏也添加了一個printk,我看到kbd->new在每個字節中總是有0
  3. 該循環快速繼續,按下任何按鍵都不起作用(無論按下哪個按鍵,每個字節中的kbd->new總是有0)。

我已經嘗試使用wireshark查看USB交通,我看到主機和設備來回。我期待着單向的交通。 wireshark screenshot

我很困惑爲什麼按鍵沒有效果。如果按鍵被按下,我不應該在kbd->new中看到一些數據嗎?

編輯:截屏與設備信息在https://i.stack.imgur.com/lNq4e.png

回答

0

的問題是與我解離與通用USBHID驅動程序的設備的方式。列在上述套4:

  • 從通過添加USBHID與標準HID驅動器被關聯防止鍵盤:怪癖= 0x03eb:0x20ff:爲0x4到/ etc /默認/蠐螬
  • 如果我改爲手動取消綁定設備並將其綁定到我的驅動程序,那麼IRQ不會再循環,而且實際上每次按鍵都會看到不同的輸入。我用這裏找到的說明https://lwn.net/Articles/143397/