为什么使用 libusb 需要分离内核驱动程序?

Why using the libusb requires detaching the kernel driver?

为什么使用libusb需要分离内核驱动?为什么不能与内核驱动程序一起执行一些 USB IOs?

主要是为了避免混淆USB设备的状态。每个接口在任何给定时间只能有一个"user"。

许多 USB 设备可以进入不同的执行域、缓存状态、DMA 传输等。这些类型的设备将在驱动程序中具有状态机跟踪器,并且很容易失去同步或其他类型的冲突。并非所有设备都是简单的 HID 接口(可以通过其他 API 顺便说一下)

为了进行通信,每个 USB 设备都有端点。这些端点就像管道,所有数据都在这些管道中传输。

一个端点只有一个方向,只能由 1 个驱动程序使用。

因此您需要分离内核驱动程序才能使这些端点可用。

如果需要,您可以随时检测并停用使用该设备的驱动程序,以避免使用分离内核驱动程序。