我的目标是为 Linux 2.6.32 及更高版本(我使用 debian squeeze)创建一个可以被系统识别的虚拟 USB 字符设备(不是 block 设备)。
我希望该设备作为普通 USB 设备与 lsusb 一起列出,并且每个应用程序都可以使用 libusb 来打开设备、发送控制消息以及进行批量写入/读取。但是在这个虚拟设备的背后,它的行为将由我的应用程序设置。我想设置它的产品 ID、供应商 ID、对 USB 状态的回答以及批量读取。
我已经阅读了一些关于如何使用 USB/IP 来创建虚拟 USB 设备的帖子,而这正是我想要做的 Installation and emulation of virtual USB Device http://breaking-the-system.blogspot.fr/2014/08/emulating-usb-devices-in-python-with-no.html
但不幸的是,当我尝试使用 2.6.32 及更高版本的内核时,我没有成功使其工作。所以我研究了如何创建一个可以创建虚拟设备的内核模块: http://pete.akeo.ie/2011/08/writing-linux-device-driver-for-kernels.html
这个看起来也不错,但提供的示例并未说明如何使其成为 USB 设备。 我看过一些关于 Windows 的帖子,但没有一个可以帮助我使用 Linux。
我想避免购买一些可以用软件完成的 USB 可编程卡。
有没有人知道如何使第一种方法在较新的内核下工作,或者转换第二种方法的示例代码来制作 USB 设备?
最佳答案
我已经修复了 http://breaking-the-system.blogspot.fr/2014/08/emulating-usb-devices-in-python-with-no.html 的代码(使用 USB/IP 的第一种方法)与 linux 4.3 一起工作。
原始代码中缺少 USB 请求,例如设置配置 和获取状态。如果没有实现用于操作系统驱动程序的所有 USB 请求,代码将无法工作。
关于Linux 虚拟 USB 设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164229/