我连接到 CentOS 7 服务器的 USB 设备(OnePlus 10T 智能手机)偶尔会显示“错误”(Google 的)供应商:产品 IDLSSB重启后输出:
Bus 002 Device 003: ID 18d1:4ee8 Google Inc. Nexus/Pixel Device (MIDI)
当我断开并重新连接其 USB 电缆时,它们通常会更改为正确的电缆(22d9:2765 OPPO),但是有没有办法以某种方式自动强制使用正确的电缆,例如使用乌德夫?重置USB端口(例如使用诸如乌斯布雷塞特,uhubctl等)似乎没有帮助。
提前致谢!
答案1
不,你不能那样做。该信息在设备识别期间由硬件从设备读取,然后提供给内核。
您可以做的是强制某些驱动程序识别该设备:
echo 2-7:1.0 > /sys/bus/usb/drivers/<drivername>/bind
这2-7:1.0
是设备的USB总线地址,您可以推断它来自lsusb -t
输出。您甚至可以创建 udev 规则来自动执行此操作。
然而,这可能没有帮助。我认为您的手机没有提供预期的 PID:VID 对,因为它是在不同的模式下初始化的,实际上它是不同的设备。例如,当我的手机发现我将其连接到计算机时,它会询问“以哪种模式运行”,可选择“USB存储”或“MTP设备”或“仅充电”,然后将其呈现给计算机不同的方式并绑定到不同的驱动程序。强制将设备绑定到另一个驱动程序而不是自动绑定的驱动程序在我的情况下肯定不起作用。
为什么你的手机有时会以错误的方式初始化是一个完全不同的问题。最好解决这个问题,而不是试图强迫事情发生。
答案2
你不能。这是 USB 设备的基本属性。它不受您的电脑的控制。
您可以做的是使用 udev 规则重置总线以使设备重新注册。但这听起来是一个非常糟糕的主意,因为它通常会抛出该总线上的所有其他设备,并且在存储介质等情况下可能会导致数据丢失。
总而言之,如果您希望 USB 设备的行为与实际不同,那么您必须更改设备的固件,而不是主机的软件。