假设我有一个供应商 ID (VID)0123
和产品 ID (PID) 的USB 设备abcd
。
0123:abcd
Run Code Online (Sandbox Code Playgroud)
根据USB.org,产品 ID 分配完全取决于制造商。
产品 ID (PID) 由每个供应商按他们认为合适的方式分配
因此,没有什么可以阻止被误导的供应商销售各种 USB 设备,它们都需要不同的驱动程序,并且都使用相同的供应商和产品 ID。
USB Device A (needs driver X) -> 0123:abcd
USB Device B (needs driver Y) -> 0123:abcd
USB Device C (needs driver Z) -> 0123:abcd
Run Code Online (Sandbox Code Playgroud)
USB.org 承认这种潜在的供应商行为可能存在问题。
重复的数字可能会导致驱动程序错误
在 ID 被重用于需要不同驱动程序的卡的情况下,操作系统可以做些什么来确定合适的驱动程序?
USB 设备提供的任何其他字段是否可用于(或通常用于)推断适当的驱动程序?我假设只有供应商 ID 和产品 ID 用于做出该决定。
或者典型的 *nix 系统会假设0123:abcd
应该使用的驱动程序和驱动程序之间存在一个 <-> 一个关系,因此它所能做的就是选择它认为合适的1 个驱动程序?
我猜,如果通常只使用供应商 id 和产品 id,那么只有手动用户干预才能加载正确的驱动程序,而且除了对供应商让事情变得混乱而感到不安之外,没有什么可做的。
还有一些其他信息可用于选择设备驱动程序:版本号、设备类、子类和协议以及接口类、子类和协议。(对于 Linux 上的驱动程序方面,请查看宏。您可以通过查看USB_DEVICE
的输出来了解可用的信息lsusb -v
。)
正如您\xe2\x80\x99d 所期望的\xe2\x80\x99s 仍然不够,因此在驱动程序实际为设备注册之前,内核会调用驱动程序中的探测函数。该函数可以决定驱动程序是否真正支持该设备。一般来说,在 Linux 上,具有相同 id 但不同实现的设备由同一个驱动程序处理,这避免了将多个驱动程序映射到一个设备。要查看此规则的例外情况,您可以运行
\nfind /lib/modules/$(uname -r) -name \\*.ko | xargs /sbin/modinfo | awk \'/^filename:/ { filename = $2 } /^alias:/ { printf "%s %s\\n", filename,$2 }\' | sort | uniq -D -f 1 | uniq -u | less\n
Run Code Online (Sandbox Code Playgroud)\n这将列出几个与冲突 ID 匹配的驱动程序(都不是 USB 设备驱动程序)。
\n 归档时间: |
|
查看次数: |
2623 次 |
最近记录: |