About Sensitive USB Devices

Some USB implementations are more sensitive than others. Since there are slight differences in the packets sent, when using USB/IP, those devices might break or behave differently as they would, if they were connected directly.

One mitigation is to disable the automatic binding to device drivers on the host side: By default the Kernel binds a matching driver, so that the device can be used immediately. When exporting a USB device though, we need to bind the device to the usbip-host driver instead of the default one. For most USB devices it is fine to just unbind the default driver and bind the USB/IP one. This however enumerates the device twice and can cause issues in sensitive USB stacks. So instead of unbinding the default driver and binding the USB/IP driver after that, we need to prevent binding the default driver in the first place. We do this by changing the drivers_autoprobe setting (see How to Export USB Devices) and deciding in user-space which driver we want to bind (with not-my-board uevent). One example of a USB implementation, that can’t handle being probed twice, is the i.MX 8M Nano ROM-Code USB stack.