Eles não são carregados automaticamente na inicialização ou em qualquer outro momento, embora muitos deles acabem sendo carregados durante a inicialização. Existem três mecanismos diferentes pelos quais isso acontece:
-
Solicitação de espaço do usuário: Que abrange tudo, desde serviços init até o udev até a linha de comando. Init ou udev são provavelmente os meios mais diretos se você quiser carregar um módulo específico no momento da inicialização.
-
Dispositivo Hotplugged: Quando você conecta algo a, por exemplo, USB ou PCI, o kernel detecta isso e solicita um módulo apropriado com base em como o dispositivo se identifica.
-
Protocolo necessário ou outra implementação : Quando o kernel precisa fazer alguma coisa, como ler um sistema de arquivos, e descobre que falta o conhecimento para isso, ele solicitará um módulo. / p>
Observe que, para os dois últimos, usei a frase "request a module" - isso é porque o kernel é carregado por meio de um daemon userspace, kmod
, que executa /sbin/modprobe
. De acordo com Wolfgang Mauerer em Linux Kernel Architecture , existem apenas ~ 100 pontos diferentes no kernel 2.6 onde ele chama uma função request_module()
interna.
modprobe
usa um banco de dados de MODULE_ALIAS instalados. Elas são especificadas no código-fonte do módulo explicitamente ou derivadas de seu MODULE_DEVICE_TABLE, que é uma lista de IDs de dispositivo do OEM que o módulo atende.