这个问题很明显,USB内核是否具有存储所有类驱动程序信息和HCD信息(名称或某种数字)的阵列或某物(可能是链表),以便在以下情况下检查并分配所需的信息:设备已插入?
在Linux内核中,检测到新设备时会唤醒模块加载程序。它传递了一个“ modalias ”字符串,该字符串标识该设备,对于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
如果您使用grep表示usb-storage设备驱动程序,则会看到该设备具有按供应商和设备ID支持的某些特定设备,并且还将尝试支持具有正确(存储)类的任何设备,无论供应商/设备如何。
USB Modalias可以这样解码:
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)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句