Quando o kernel detecta um novo dispositivo, ele executa o programa modprobe
e passa um nome para ele identifica o dispositivo. A maioria dos dispositivos é identificada através de números registrados para um fornecedor e modelo, por ex. PCI ou USB identificadores. O programa modprobe
consulta a tabela de alias do módulo /lib/modules/VERSION/modules.alias
para encontrar o nome do arquivo que contém o driver para esse dispositivo em particular. Um princípio semelhante se aplica a drivers para coisas que não são dispositivos de hardware, como sistemas de arquivos e algoritmos criptográficos. Para mais detalhes, veja O Debian não detectar placa PCI serial após a reinicialização
Uma vez que a modprobe identificou qual arquivo de módulo ( .ko
) contém o driver solicitado, ele carrega o arquivo do módulo no kernel: o código do módulo é dinamicamente carregado no kernel. Se o módulo for carregado com sucesso, ele aparecerá na listagem de lsmod
.
O carregamento automático de módulos acontece quando o kernel detecta um novo hardware hotpluggable, por ex. quando você conecta um periférico USB. O sistema operacional também faz um passo de enumerar todo o hardware que está presente no sistema mais cedo durante a inicialização, a fim de carregar os drivers dos periféricos que estão presentes no momento da inicialização.
Também é possível solicitar manualmente o carregamento de um módulo com o comando modprobe
ou insmod
. A maioria das distribuições inclui um script de inicialização que carrega os módulos listados em /etc/modules
. Outra maneira de carregar os módulos é se eles são uma dependência de um módulo: se o módulo A depende do módulo B, então modprobe A
carrega B antes de carregar A.
Quando um módulo é carregado, ele permanece carregado até ser descarregado explicitamente, mesmo que todos os dispositivos que usam esse driver tenham sido desconectados. Há muito tempo atrás, havia um mecanismo para descarregar automaticamente módulos não utilizados, mas foi removido, se bem me lembro, quando o udev entrou em cena. Eu suspeito que o descarregamento automático de módulos não é um recurso comum, porque os sistemas que tendem a precisar são principalmente desktops que têm muita memória de qualquer maneira (na escala do código do driver).