Linux 虚拟 USB 设备驱动程序

标签 linux usb linux-device-driver

我的目标是为 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 请求,代码将无法工作。

固定码可以在https://github.com/lcgamboa/USB-Emulation下载.

关于Linux 虚拟 USB 设备驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31164229/

相关文章:

python - 构建 pyinstaller 可执行文件时,我可以控制架构(32 位与 64 位)吗?

Linux 重启后字符设备文件不存在

linux - 在conda环境下运行screen jupyter notebook

ffmpeg - 使用 ffmpeg 在树莓派上录制 USB 摄像头 - USB 故障排除

linux - 获取linux中队列的大小

android - 通过 Android USB 主机与智能卡读卡器通信

linux - 如何构建使用自定义库的外部 linux 模块

c - 从用户空间访问 i2c 扩展器的 GPIO 引脚

java - 无法从 Java 程序执行 shell 脚本

php - 如何从 apache Web 服务器中删除 SUEXEC?