跳过 USB 设备的容器 ID 和 BOS 描述符查询

跳过 USB 设备的容器 ID 和 BOS 描述符查询

当尝试执行fastboot命令时,传输总是错误的。快速搜索指出与 USB 3.0 端口存在某些不兼容性。

我的 BIOS 设置中不存在强制传统 USB 2.0 模式,并且在操作系统端不可能所以我必须依赖一个软件解决方案,它看起来至少是可行的,因为有几个来源通过添加注册表项在 Windows 上提供了解决方案:

reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\18D1D00D0100" /v "osvc" /t REG_BINARY /d "0000" /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\18D1D00D0100" /v "SkipContainerIdQuery" /t REG_BINARY /d "01000000" /f
reg add "HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\usbflags\18D1D00D0100" /v "SkipBOSDescriptorQuery" /t REG_BINARY /d "01000000" /f

因此,我的问题是:Linux 上的等效解决方案是什么?

我尝试在 Linux 上搜索 BOS 描述符和容器 ID,但除了libusb来源之外一无所获。

相关dmesg日志:

[ 1467.568758] usb 1-1: new high-speed USB device number 8 using xhci_hcd
[ 1467.718322] usb 1-1: New USB device found, idVendor=18d1, idProduct=d00d, bcdDevice= 1.00
[ 1467.718325] usb 1-1: New USB device strings: Mfr=1, Product=2, SerialNumber=3
[ 1467.718326] usb 1-1: Product: Android
[ 1467.718327] usb 1-1: Manufacturer: Google
[ 1467.718327] usb 1-1: SerialNumber: 832ec5e4
////// Here I executed `fastboot devices`
[ 1476.552829] usb usb5-port1: over-current condition
[ 1476.636501] usb usb6-port1: over-current condition
[ 1484.336743] usb usb5-port1: over-current condition
[ 1484.416485] usb usb6-port1: over-current condition
[ 1487.100726] xhci_hcd 0000:00:14.0: USB core suspending port 1-1 not in U0/U1/U2
[ 1487.100879] usb 1-1: USB disconnect, device number 8
[ 1487.100987] usb 1-1: Failed to suspend device, error -32
[ 1490.074492] ucsi_acpi USBC000:00: UCSI_GET_PDOS returned 0 bytes

答案1

在深入研究各种文档后,我是如何解决这个问题的:

echo -1 | sudo tee /sys/module/usbcore/parameters/autosuspend
echo '18d1:d00d:k' | sudo tee /sys/module/usbcore/parameters/quirks
echo 1 | sudo tee /sys/bus/usb/devices/1-1/power/pm_qos_no_power_off
echo | sudo tee /sys/bus/usb/devices/1-1/power/wakeup
echo on | sudo tee /sys/bus/usb/devices/1-1/power/control
echo -1 | sudo tee /sys/bus/usb/devices/1-1/power/autosuspend_delay_ms
echo n | sudo tee /sys/bus/usb/devices/1-1/power/usb2_hardware_lpm

可能有点多余,但它确实有效。根据插入的端口更换USB端口。我的设备是小米Mix 2S。根据需要更改18d1:d00d有问题的硬件。

参考:https://www.kernel.org/doc/html/v4.15/driver-api/usb/power-management.html https://www.kernel.org/doc/html/v4.15/admin-guide/kernel-parameters.html?highlight=usb-storage.quirks

我的理由是,

  • 该问题的发生有点不确定(有时是在插入后,有时甚至是在对引导加载程序进行几次查询后),因此不太可能是在fastboot其自身内部。与电源相关的问题往往会以这种方式表现出来,所以我怀疑这一点。
  • 该设备没有专用驱动程序 ( lsusb -t),因此usbcore“原始”USB 设备可能是感兴趣的点。

我仍然不太确定电源管理的底层机制以及它与绕过两个查询的 Windows 解决方案之间的关系。根据,这可能是BOS描述符和LPM容量之间的关系。

对此答案的进一步扩展将不胜感激。

相关内容