我正在开发一个将与连接的 USB HID 设备通信的应用程序。问题是还没有真正的设备(它正在由我们团队的另一部分开发),所以,我真的很想有一些方法来模拟它。
我能想到的理想实用程序应该如下所示:一个内核模块,加载时会在系统中创建两个设备节点:
- 一个虚拟的 usb-hid 设备,可能与任何真实的 usb-hid 设备节点没有区别
/dev/hidraw0
;当然,我使用的任何 usb-hid 库都应该可以看到该设备,例如hidapi
. - 服务设备节点,例如
/dev/virtual_hid_1
.
因此,当任何人写入 时/dev/virtual_hid_1
,应该从字面上读取该数据/dev/hidraw0
,反之亦然。
这样,我可以用我想要的任何语言编写一些调试应用程序,无论是它python
还是其他语言;它应该只是写入和读取/dev/virtual_hid_1
。开发起来会非常方便。
有这样的事吗?
答案1
您可能正在寻找uhid
内核模块。看内核源代码中的文档:
使用 UHID,用户空间传输驱动程序可以为连接到用户空间控制总线的每个设备创建内核 hid 设备。 UHID API 定义从内核到用户空间提供的 I/O 事件,反之亦然。
./samples/uhid/uhid-example.c 中有一个示例用户空间应用程序
答案2
您可能对用于模拟开发中的 USB 设备的廉价、优雅且开放的硬件解决方案感兴趣:微型蟒蛇板。 (我与这个硬件没有任何关系)。
它是一个小型的独立运行 python 3 的板,并插入 USB,它可以显示为鼠标 HID 或键盘 HID。您只需将 python 源文件复制到设备即可运行它。一个美丽的概念。
好吧,它并不是真正适合你想要的,你可能需要下载 sdk 并在 C 中做一些工作才能让它完全按照你的需要出现,但你的大部分代码将在 python 中。有ttl电平串口、i2c、spi等端口。
对于替代解决方案,有一个使用 python 模拟 USB 设备的板但我不确定你是否可以购买成品。
还有使用 usbip 进行 USB 仿真没有额外的硬件,我还没有看过。