USB键盘(HID)在linux中没有响应但在grub中没有响应
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了USB键盘(HID)在linux中没有响应但在grub中没有响应,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含4123字,纯文字阅读大概需要6分钟。
内容图文
![USB键盘(HID)在linux中没有响应但在grub中没有响应](/upload/InfoBanner/zyjiaocheng/958/f0b355f51cd44ff78ca08eaff5de0207.jpg)
我想要使??用的外部USB键盘被识别为USB HID设备,但在Linux启动时它不起作用.它在插入Windows桌面时确实有效,并且在grub中可以正常工作,但在系统启动时却无法工作.
设备在USB端口上可见(05a4:8003):
$lsusb
Bus 001 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 002 Device 002: ID 8087:0024 Intel Corp. Integrated Rate Matching Hub
Bus 003 Device 002: ID 046d:c078 Logitech, Inc.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 003 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 004 Device 001: ID 1d6b:0003 Linux Foundation 3.0 root hub
Bus 001 Device 004: ID 05a4:8003 Ortek Technology, Inc.
dmesg在设备连接时没有显示错误:
[ 466.932272] usb 1-1.2: new full-speed USB device number 4 using ehci_hcd
[ 467.026740] usb 1-1.2: New USB device found, idVendor=05a4, idProduct=8003
[ 467.026745] usb 1-1.2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 467.026756] usb 1-1.2: Product: USB Keypad
[ 467.026758] usb 1-1.2: Manufacturer: Keypad
[ 467.027939] input: Keypad USB Keypad as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.0/input/input13
[ 467.028099] hid-generic 0003:05A4:8003.0004: input,hidraw1: USB HID v1.10 Keyboard [Keypad USB Keypad ] on usb-0000:00:1a.0-1.2/input0
[ 467.029600] input: Keypad USB Keypad as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.2/1-1.2:1.1/input/input14
[ 467.029726] hid-generic 0003:05A4:8003.0005: input,hidraw2: USB HID v1.10 Mouse [Keypad USB Keypad ] on usb-0000:00:1a.0-1.2/input1
输入/事件设备已创建,但未响应.
我想知道设备是否有两次注册是有问题的,如键盘输入和鼠标输入.
我正在测试Ubuntu 13.04系统.预期的目标系统是带有Rasbian的Raspberry Pi.由于问题以同样的方式出现在Rasbian上,我认为它与Linux有关.
我该如何进一步调试?
知道什么可能导致这种无反应的行为吗?
解决方法:
这个USB HID设备在Windows中工作的原因是因为可能会为它编写特定的驱动程序,因此它适用于GRUB的原因是设备在所谓的启动模式下运行. USB HID设备支持两种操作模式,即启动模式和HID模式.前者使得可以在BIOS中使用该设备而无需BIOS实现完整的HID堆栈.后者提供了更大的灵活性,可以添加扩展功能(如额外的按钮).接口描述符中存在Boot Interface Subclass标志表示支持引导模式(请参阅lsusb -v -d 05a4:8003):
Interface Descriptor:
...
bInterfaceSubClass 1 Boot Interface Subclass
快速浏览Linux内核源代码(3.14-rc8)并未显示此USB HID设备的特殊驱动程序.因此,内核回退到通用HID驱动程序(hid-generic).但是,似乎与此设备和Linux使用的驱动程序不兼容.
要查看设备是否生成任何(不可见)活动,请安装evtest程序并运行sudo evtest.提示输入设备时,请输入与键盘匹配的数字.如果事情有效,那么你应该看到按键上的事件.
如果您没有看到任何键并且想要进一步调试,请安装wireshark以捕获USB接口(使用usbmon).正如您在lsusb输出中看到的那样,输入设备连接到总线1,因此您应该将usbmon1指定为接口.捕获USB流量的命令是:
sudo dumpcap -i usbmon1 -w - > usb.pcapng
(此方法允许您将usb.pcapng作为常规用户编写,替代方法是使/ dev / usbmon1对常规用户可读或在创建文件后更改所有权.)
分析USB HID捕获
作为非特权用户,您现在可以开始分析捕获的USB流量.您需要了解USB和HID的基础知识才能理解它.最简单的HID设备通常有两个端点,一个双向控制端点(EP0,这总是存在)和一个中断端点,用于将数据从设备传输到USB主机(“计算机”).
我已经做了一个带注释捕获的示例并将其上传到https://www.cloudshark.org/captures/a6c9580208b7.我建议您阅读数据包注释以更好地了解它是如何工作的.当您在Wireshark中离线打开此数据包时,我建议添加一些颜色(查看 – >着色规则):
> frame.comment – 更容易看到哪些帧获得了命令
> usb和frame.len == 64(或者它的否定,usb而不是frame.len == 64) – 注意到哪些数据包获得有效载荷的速度更快.
还建议添加一些额外的列(右键单击列,列首选项):
> usb.urb_type – 查看是否将数据包提交(URB_SUBMIT)或从设备接收(URB_COMPLETE).
> usb.transfer_type – 查看您是在查看控制数据(通过EP0)还是其他数据(例如USB HID设备的中断数据).
> usb.endpoint_number.direction – 查看数据传输的方向(IN是从设备到主机(“PC”),OUT是从主机(“PC”)到设备).
我已将这些列拖到Len(gth)列旁边并调整大小,以便在这三个USB列的右侧仍然可以看到Info列.
通过这些设置,您现在可以开始分析了.按任意键应该生成一个中断,其数据符合HID描述符的格式.如果没有,那么可能需要一些特定于供应商的命令(即特殊驱动程序)或Linux USB(HID)堆栈中存在错误.
内容总结
以上是互联网集市为您收集整理的USB键盘(HID)在linux中没有响应但在grub中没有响应全部内容,希望文章能够帮你解决USB键盘(HID)在linux中没有响应但在grub中没有响应所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。