【问题标题】:Write something to linux hid device?向linux隐藏设备写一些东西?
【发布时间】:2011-07-27 14:46:02
【问题描述】:

我正在学习 linux hid 驱动程序编程,我知道如何从 hid 设备读取消息
但是,我很困惑如何在设备上写一些东西?比如usb hid键盘,我可以用 xset 或其他一些程序来控制键盘的 LED,如何存档?请有任何提示!
提前谢谢。

【问题讨论】:

  • 我会帮助您了解您如何从设备中读取数据。您是在编写内核驱动程序还是用户态应用程序?你在使用 /dev/hidraw 吗?设备、libusb、/dev/input/*?
  • 我正在为qemu编程扩展设备,目标当然是学习内核驱动编程,所以我的想法是:添加一个leds usb hid设备,然后编写简单的usb驱动来测试虚拟设备,我从 qemu 的 usb-hid.c 学习,我知道如何编写一个隐藏设备来向内核发送一些东西,但我不知道如何向设备写入一些东西,我希望我的工作会有所帮助,谢谢。

标签: linux usb driver kernel hid


【解决方案1】:

USB HID 设备主要是输入设备,因此它们通常不提供 OUT 端点(HID 规范允许它们,但我从未见过)。如果未提供 OUT 端点,则通过控制端点 (EP0) 发送输出报告。 URB 应该是这样的:

bmRequestType = 0x21     (To class interface)
bRequest = 0x09          (SET_REPORT)
wValue = 0x02 <report_code>
wIndex = <interface>     (Usually 0x0001)
wLength = <Data length>
Data = <report_code> <data>...

当然,有一些函数可以做到这一点。从内核中,您可以查看 hiddev_lookup_report/usbhid_submit_report。从用户态,如果你使用 /dev/usb/hiddev?你可以试试 HIDIOCSREPORT ioctl,如果你使用 /dev/hidraw?您只需将其 write() 即可。

HID 还定义了“Features”,这是一种输出控制机制,但我从未使用过它们。

【讨论】:

  • 非常感谢您的提示!
  • 需要输入的 HID 设备的示例是 Fido U2F(通用第二因子)令牌。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-01-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-20
  • 2012-08-11
  • 1970-01-01
相关资源
最近更新 更多