Capítulo 40. Módulos do Kernel

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 hardware novo for adicionado após a instalação e este requer 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.

NotaNota
 

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.

40.1. Utilitários do Módulo do Kernel

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órionet/ 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 oo mdulo 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).