No kernel do Linux, o carregador de módulos é ativado quando um novo dispositivo é detectou. Ela passou por uma string " modalias ", que identifica o dispositivo e parece algo assim para dispositivos USB:
usb:v058Fp6387d0103dc00dsc00dp00ic08isc06ip50in00
Você pode encontrar o seu dispositivo modalias (e o driver HCD) usando o seguinte comando:
udevadm info --export-db
Esta é a seção relacionada ao meu pen drive:
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
Esta string contém a classe de dispositivo (usb) e informações específicas da classe (fornecedor / produto / número de série, classe de dispositivo, etc). Cada driver do kernel contém uma linha como:
MODULE_ALIAS("usb:...")
Qual deve combinar os usbalias (os curingas são usados para combinar múltiplos dispositivos). Se os modalias correspondem a um que o driver suporta, este driver é carregado (ou notificado do novo dispositivo, se já estiver lá).
Você pode ver os dispositivos compatíveis (por modalias) e seus módulos associados com
more /lib/modules/'uname -r'/modules.alias
Se você usar o driver de dispositivo de armazenamento usb, verá que ele tem algum dispositivos específicos suportados pelo fornecedor e pelo ID do dispositivo e também para suportar qualquer dispositivo com a classe certa (armazenamento), não importa o fornecedor / dispositivo.
Os modalias USB podem ser decodificados da seguinte forma:
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)