我如何在 Linux 上重现 Windows winusb 驱动程序的功能?我什至需要吗?

How would I reproduce the functionality of the Windows winusb driver on Linux? Do I even need to?

我需要在 Linux 上实现驱动 USB 连接设备(医疗仪器)的应用程序。该应用程序将使用 C++(2011 标准)编写。

当前应用程序是用 C# 为 Windows 10 编写的,并使用为设备枚举的标准 Winusb 驱动程序。我有一个完整的命令和 events/interrupts 返回的协议规范。不幸的是,我不确定如何将这些传递到 Linux 中的 USB 层。如果它是一个简单的串行设备,就没有问题,但我猜命令响应和中断事件是由驱动程序使用 Winusb 驱动程序中的功能多路复用的。

就文档而言,最好从哪里着手?或者,是否有 Linux 库(或驱动程序)为 Linux 提供与 winusb 大致相同的功能?

感谢任何帮助。谢谢

Alternatively, is there a Linux library (or driver) that provides more or less the same functionality as winusb for Linux?

一种方法是直接为 USB 使用通用内核 API(请参阅异步 I/O 部分以获取中断):

https://www.kernel.org/doc/html/v4.15/driver-api/usb/usb.html

这是 WinUSB 的严格 Linux 等价物。

可能不太困难的方法是使用 libusb,它还可以获得跨平台功能。

(我假设您的设备已被内核正确识别,并且不需要自定义驱动程序)

Is there a Linux library (or driver) that provides more or less the same functionality as winusb for Linux?

是的。 libusb is a popular USB abstraction library that supports Linux, macOS, and Windows. I also wrote a similar library called libusbp 具有一组不同的功能,这些功能对我的应用程序更有用。这些是 C 库,因此需要一些工作才能从 C# 与它们进行互操作,但是一旦你这样做,你可能可以在 Windows 或 Linux 上使用相同的代码(所以你不会维护调用 WinUSB 的代码)。