我有一个随机扬声器,我想为其开发一个驱动程序,以便我可以向dev
文件系统报告统计数据、电池等。但是,我很难找到扬声器的供应商和设备 ID 以便将其与驱动程序正确关联。
我什至不知道制造商是谁,我的 Linux 机器没有检测到它(lsusb
和其他实用程序),T&G 有一个扬声器,看起来和我的一模一样,但我的有一个不同的徽标(橙色花),而不是T&G 就是其中之一。
每个设备都有与其关联的供应商和产品 ID 吗?
如果是这样,如果您不知道您的设备并且您的机器无法识别它,您如何找到它?
是否甚至可以通过扬声器的 USB 端口向我的机器报告电池和其他统计数据,我相信该端口应该与 USB 卡一起使用?
答案1
每个通过 USB 通信的设备都有一个 VID(供应商 ID)和 PID(产品 ID)。供应商 ID 是通过 USB 实施者论坛 (USB.org) 获得的,这或多或少保证了其唯一性。
当您插入 USB 设备时,dmesg
即使该设备不受支持,您也应该在 的输出中看到它。我还没有见过不以这种方式显示的 USB 设备。
另一种选择是,该设备根本不通过 USB 进行通信,而仅使用 USB 连接器进行充电。
答案2
每个“USB 设备”都有一个供应商 ID 和产品 ID。然而,我们必须小心“USB 设备”的含义。并非所有带有 USB 端口的设备都是“USB 设备”。
首先,USB 主机不被视为“设备”。原则上(暂时忽略 USB C)主机应具有 A 连接器,设备应具有 B 连接器,能够充当两者的设备应具有 AB 连接器。在实践中,这一点常常被忽视。
其次,很多东西只是使用USB连接器作为充电的电源端口,根本不充当USB主机或设备。
如果它没有出现在 lsusb 中,则几乎可以肯定它不是 USB 设备。
USB C 进一步搅浑了水,该连接器可用于主机、设备和“双角色设备”(既可以充当主机又可以充当设备的设备)。
在最简单的层面上,仅在设备模式下运行的 C 端口可以使用“CC”引脚上的电阻来指示这一事实。固定主机端口稍微复杂一些,因为除非另一端连接了设备,否则它们不应该提供电源,但仍然相对简单。 IIRC 双角色端口应该在充当主机端口和充当设备端口之间快速来回切换。
然而,USB C 还可以选择在“CC”引脚上使用主动协商。这可用于协商更高的功率水平、协商与数据相反方向的功率传输,甚至协商使用除 USB 之外的协议。
答案3
每个 USB 设备必须使用包含 VID 和 PID 字段中 16 位值的数据包来标识自己。鉴于可能有超过 65,535 个实体生产 USB 设备,因此不可能所有生产 USB 设备的实体都具有与其关联的唯一 VID。
在许多情况下,USB 控制器芯片供应商允许配置其设备报告,使用该芯片的设备将使用供应商特定的名称进行编程,但使用制造商的默认 VID/PID 组合。这将允许供应商提供的驱动程序无需修改即可与设备一起使用,但需要软件检查设备名称以确定它应该尝试与哪些设备通信。
早在 20 世纪 90 年代,当 USB 正在开发时,使用 16 位 VID/PID 可能几乎是有意义的,但供应商和产品的数量意味着它们现在对于其预期用途来说少得可怜。
答案4
其他人已经提到,dmesg
一旦枚举完成,就会报告所连接的 USB 设备的 VID/PID。
dmesg
还可以报告无法枚举 USB 设备的错误。
例如,在 Ubuntu 18.04 下刚刚尝试插入 USB 2 设备,该设备没有显示在lsusb
.经检查发现dmesg
有以下错误:
[19852.532042] usb 3-6: new high-speed USB device number 6 using xhci_hcd
[19858.240057] usb 3-6: device descriptor read/64, error -110
[19874.656054] usb usb3-port6: Cannot enable. Maybe the USB cable is bad?
[19875.624047] usb usb3-port6: Cannot enable. Maybe the USB cable is bad?
[19875.624099] usb usb3-port6: attempt power cycle
[19876.668040] usb usb3-port6: Cannot enable. Maybe the USB cable is bad?
[19877.636052] usb usb3-port6: Cannot enable. Maybe the USB cable is bad?
[19877.636127] usb usb3-port6: unable to enumerate USB device
断开并重新连接 USB 设备,这次该设备出现在输出中,lsusb
并且dmesg
还报告了 VID/PID:
[20158.004079] usb 3-6: new high-speed USB device number 18 using xhci_hcd
[20158.152321] usb 3-6: New USB device found, idVendor=03fd, idProduct=0008
[20158.152324] usb 3-6: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[20158.152327] usb 3-6: Product: XILINX
[20158.152329] usb 3-6: Manufacturer: XILINX