O kernel do Linux tem um design modular. No momento da inicialização, somente um kernel residente mínimo é carregado na memória. Depois disso, sempre que um usuário requisitar uma funcionalidade que não está presente no kernel residente, um módulo do kernel, por vezes referido como um driver, é dinamicamente carregado na memória.
Durante a instalação, o sistema detecta o hardware. Baseado nesta detecção e nas informações providas pelo usuário, o programa de instalação decide quais módulos precisam ser carregados no momento da inicialização. O programa de instalação configura o mecanismo de carregamento dinâmico para funcionar transparentemente.
Se for adicionado hardware novo após a instalação e este requerer um módulo do kernel, o sistema deve ser configurado para carregar o módulo do kernel apropriado para o hardware novo. Quando o sistema é inicializado com o hardware novo, o programa Kudzu roda, detecta o hardware novo se for suportado e configura o módulo para ele. O módulo também pode ser especificado manualmente editando o arquivo de configuração do módulo, /etc/modules.conf.
![]() | Nota |
---|---|
Os módulos da placa de vídeo costumavam exibir a interface do Sistema X Window como parte do pacote XFree86 e não do kernel; portanto, este capítulo não se aplica a eles. |
Por exemplo: se um sistema inclui um adaptador de rede SMC EtherPower 10 PCI, o arquivo de configuração do módulo contém a seguinte linha:
alias eth0 tulip |
Se uma segunda placa de rede idêntica à primeira for adicionada ao sistema, adicione a seguinte linha ao /etc/modules.conf:
alias eth1 tulip |
Consulte o Guia de Referência do Red Hat Enterprise Linux para uma lista alfabética dos módulos do kernel e hardware suportados pelos módulos.
Um grupo de comandos para administrar módulos do kernel é disponibilizado se o pacote modutils está instalado. Use estes comandos ao determinar se um módulo foi carregado com sucesso ou ao tentar módulos diferentes para um novo componente de hardware.
O comando /sbin/lsmod exibe uma lista dos módulos carregados no momento. Por exemplo:
Module Size Used by Not tainted iptable_filter 2412 0 (autoclean) (unused) ip_tables 15864 1 [iptable_filter] nfs 84632 1 (autoclean) lockd 59536 1 (autoclean) [nfs] sunrpc 87452 1 (autoclean) [nfs lockd] soundcore 7044 0 (autoclean) ide-cd 35836 0 (autoclean) cdrom 34144 0 (autoclean) [ide-cd] parport_pc 19204 1 (autoclean) lp 9188 0 (autoclean) parport 39072 1 (autoclean) [parport_pc lp] autofs 13692 0 (autoclean) (unused) e100 62148 1 microcode 5184 0 (autoclean) keybdev 2976 0 (unused) mousedev 5656 1 hid 22308 0 (unused) input 6208 0 [keybdev mousedev hid] usb-uhci 27468 0 (unused) usbcore 82752 1 [hid usb-uhci] ext3 91464 2 jbd 56336 2 [ext3] |
Para cada linha, a primeira coluna é o nome do módulo; a segunda coluna é o tamanho do módulo e a terceira é a contagem de uso.
As informações após a contagem de uso variam ligeiramente por módulo. Se (unused) está listado na linha do módulo, este não está em uso. Se (autoclean) está na linha do módulo, este pode ser limpo automaticamente pelo comando rmmod -a. Quando este comando é executado, quaisquer módulos marcados com 'autoclean' que não foram usados desde a última ação de auto-limpeza, são descarregados. O Red Hat Enterprise Linux não executa a ação de auto-limpeza por default.
Se há um nome de módulo listado no fim da linha entre parênteses, este módulo é dependente do módulo listado na primeira coluna da linha. Por exemplo: na linha
usbcore 82752 1 [hid usb-uhci] |
os módulos hid e usb-uhci do kernel dependem do módulo usbcore.
O output do /sbin/lsmod é o mesmo que o output da visualização /proc/modules.
Para carregar um módulo do kernel, use o comando /sbin/modprobe seguido do nome do módulo do kernel. Por default, modprobe tenta carregar o módulo dos sub-diretórios /lib/modules/<kernel-version>/kernel/drivers/. Há um sub-diretório para cada tipo de módulo, como o sub-diretório net/ para drivers de interface de rede. Alguns módulos do kernel têm dependências de módulo; ou seja, outros módulos devem ser carregados primeiro para que estes sejam carregados. O comando /sbin/modprobe verifica estas dependências e as carrega antes de carregar o módulo especificado.
Por exemplo: o comando
/sbin/modprobe hid |
carrega quaisquer dependências de módulo e então o módulo hid.
Para exibir todos os comandos na tela, enquanto /sbin/modprobe os executa, use a opção -v. Por exemplo:
/sbin/modprobe -v hid |
Aparece um output similar ao seguinte:
/sbin/insmod /lib/modules/2.4.21-1.1931.2.399.ent/kernel/drivers/usb/hid.o Using /lib/modules/2.4.21-1.1931.2.399.ent/kernel/drivers/usb/hid.o Symbol version prefix 'smp_' |
O comando /sbin/insmod também serve para carregar o módulo do kernel; no entanto, não resolve as dependências. Sendo assim, é recomendado usar o comando /sbin/modprobe.
Para descarregar os módulos do kernel, use o comando /sbin/rmmod seguido do nome do módulo do kernel. O utilitário rmmod descarrega somente os módulos que não estão em uso e não são uma dependência de outros módulos em uso.
Por exemplo: o comando
/sbin/rmmod hid |
descarrega o módulo hid do kernel.
Um outro utilitário útil para módulos do kernel é o modinfo. Use o comando /sbin/modinfo para exibir informações sobre um módulo do kernel. A sintaxe geral lé:
/sbin/modinfo [options] <module> |
As opções incluem -d para exibir uma breve descrição do módulo e -p para listar os parâmetros suportados pelo módulo. Para obter uma lista completa das opções, consulte a página man do modinfo (man modinfo).