USB 核心中存储了有关类驱动程序和 HCD 的信息在哪里,以供检查?

USB 核心中存储了有关类驱动程序和 HCD 的信息在哪里,以供检查?

显然,从这个问题来看,USB 核心是否有一个数组或类似的东西(可能是链接列表),其中存储了所有类驱动程序的信息和 HCD 的信息(名称或某种数字),以便在插入设备时检查并分配所需的信息?

答案1

在 Linux 内核中,当检测到新设备时,模块加载器会被唤醒。它通过一个“情态动词“字符串,用于标识设备,对于 USB 设备,它看起来像这样:

usb:v058Fp6387d0103dc00dsc00dp00ic08isc06ip50in00

您可以找到您的设备情态动词(和 HCD 驱动程序)使用以下命令:

udevadm info --export-db

这是与我的 USB 驱动器相关的部分:

P: /devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0
E: DEVPATH=/devices/pci0000:00/0000:00:14.0/usb3/3-2/3-2:1.0
E: DEVTYPE=usb_interface
E: DRIVER=usb-storage
E: ID_MODEL_FROM_DATABASE=Flash Drive
E: ID_VENDOR_FROM_DATABASE=Alcor Micro Corp.
E: INTERFACE=8/6/80
E: MODALIAS=usb:v058Fp6387d0103dc00dsc00dp00ic08isc06ip50in00
E: PRODUCT=58f/6387/103
E: SUBSYSTEM=usb
E: TYPE=0/0/0
E: USEC_INITIALIZED=530904794

此字符串包含设备类别(usb)和类别特定信息(供应商/产品/序列号、设备类别等)。每个内核驱动程序都包含一行,例如:

MODULE_ALIAS("usb:...")

必须与 usbalias 匹配(使用通配符来匹配多个设备)。如果 modalias 与驱动程序支持的 modalias 匹配,则加载此驱动程序(或通知新设备,如果新设备已经存在)。

你可以通过以下方式查看支持的设备(按模式)及其相关模块

more /lib/modules/`uname -r`/modules.alias

如果您搜索 usb-storage 设备驱动程序,您会看到它有一些根据供应商和设备 ID 支持的特定设备,并且还会尝试支持具有正确(存储)类别的任何设备,无论供应商/设备如何。

USB 模式可以像这样解码:

usb:
v   vendor_id (4 hex)
p   product_id (4 hex)
d   revision (4 hex)
dc  class (2 hex)
dsc subclass (2 hex)
dp  protocol (2 hex)
ic  interface_class (2 hex)
isc interface_subclass (2 hex)
ip  interface_protocol (2 hex)

来源

答案2

系统盘

文件

   /var/lib/usbutils/usb.ids
          A  list  of  all  known  USB  ID’s  (vendors, products, classes,
          subclasses and protocols).

仅当存在 USB 设备时该文件才会出现。

相关内容