A maneira como isso funciona normalmente é:
- O código-fonte do módulo contém chamadas para o
MODULE_DEVICE_TABLEmacro para declarar uma tabela de identificadores de dispositivo que este módulo suporta. - No módulo compilado, os aliases são armazenados como valores de símbolos chamados
__mod_alias_NNN, em que o NNN é inteiro. O valor codifica a identificação de barramento para o dispositivo, por ex.pci:v00009710d00009865sv*sd*bc*sc*i*para o dispositivo PCI identificado como fornecedor 0x9710 , dispositivo 0x9865.
também são armazenados sob o nome__mod_pci_device_tablepara dispositivos PCI,__mod_usb_device_tablepara dispositivos USB, etc. - O programa
depmodcria um mapeamento da tabela de alias__mod_alias_NNNvalues para o nome do módulo. Esta tabela é armazenada no arquivomodules.aliasna raiz do diretório de módulos do kernel, por exemplo./lib/modules/2.6.32-5-amd64/modules.alias.
Também cria arquivos comomodules.pcimap,modules.usbmap,…, que são usados pela infraestrutura de hotplug obsoleta que foi incluída novamente no modprobe. - Quando o kernel detecta um dispositivo para o qual nenhum driver está presente, ele tenta carregar um módulo chamando o programa indicado pelo
kernel.modprobesysctl , que é/sbin/modprobepor padrão. O kernel passa um argumento paramodprobeque indica qual driver é solicitado. Para um dispositivo PCI, esse é um nome comopci:v00009710d00009865sv*sd*bc*sc*i*. -
modprobeprocura por um módulo com o nome dado. Se encontrar um módulo com o nome solicitado (depois de seguir o alias definido em seus arquivos de configuração, que incluem/etc/modprobe.d/*.confe/lib/modules/$(uname -r)/modules.alias), ele carrega esse módulo.
modprobenão carregará um módulo que foi na lista negra de uma diretivablacklistem seus arquivos de configuração.
Execute lspci -n para ver os IDs PCI do seu dispositivo e verifique a cadeia acima para ver onde algo deu errado.
Às vezes, um driver funciona para um dispositivo que é muito semelhante ao dispositivo para o qual ele é destinado, mas tem um ID de PCI diferente. Nesse caso, é possível que o driver funcione, mas não será carregado automaticamente porque não declara o ID do PCI para o seu dispositivo. Você pode adicionar o alias manualmente em /etc/modprobe/my_aliases.conf .
Você pode forçar um módulo a ser carregado automaticamente no momento da inicialização, adicionando seu nome a /etc/modules .