modprobe e lsmod: Gerenciando Módulos do Kernel
O Que Você Vai Aprender
- Como usar
lsmodpara ver quais módulos estão atualmente carregados - Como usar
modprobepara carregar e descarregar módulos com suas dependências - O fluxo de trabalho prático para
modinfo,blackliste carregamento no boot
Resumo Rápido
- Ver estado ->
lsmod(somente leitura, formata/proc/modules) - Carregar / remover ->
modprobe(resolve dependências; eviteinsmod/rmmoddiretamente) - Configurar ->
/etc/modprobe.d/*.conf(opções, blacklist) e/etc/modules-load.d/*.conf(carregar no boot)
Premissas
- Funciona da mesma forma no Ubuntu e nos sistemas da família RHEL
- Arquivos de módulos ficam em
/lib/modules/$(uname -r)/ - Carregar / remover módulos geralmente requer
root(sudo)
O Que É o lsmod?
Conclusão: lsmod é um comando somente leitura que lista os módulos do kernel atualmente carregados. Ele simplesmente formata o conteúdo de
/proc/modules.
$ lsmod
Module Size Used by nf_conntrack 172032 2 nf_nat,xt_conntrack xfs 2068480 1 vfat 24576 1
O que as colunas significam:
- Module: o nome do módulo
- Size: tamanho na memória (bytes)
- Used by: a contagem de referências seguida dos módulos que dependem dele
Um módulo cuja contagem de Used by não é 0 está em uso por outros e não pode ser removido assim. Descarregue os dependentes primeiro, ou deixe modprobe -r resolver as dependências por você.
Para apenas verificar se um módulo está carregado, combine com grep:
$ lsmod | grep nf_conntrack
O Que o modprobe Pode Fazer?
Conclusão: modprobe carrega e descarrega módulos enquanto resolve automaticamente as dependências, diferente dos comandos de nível mais baixo insmod e rmmod.
Carregar um módulo
$ sudo modprobe nf_conntrack
Quaisquer módulos dos quais ele depende são carregados primeiro, automaticamente. Você passa apenas o nome do módulo, sem necessidade do caminho .ko.
Descarregar um módulo (-r)
$ sudo modprobe -r nf_conntrack
-r (--remove) remove o alvo mais quaisquer módulos de dependência que somente ele estava usando. Falha se o módulo ainda está em uso (Used by diferente de zero).
Visualizar o que aconteceria (-n -v)
$ modprobe -n -v nf_conntrack
insmod /lib/modules/6.8.0-106-generic/kernel/net/netfilter/nf_conntrack.ko.zst
-n (--dry-run) não carrega nada de fato; combinado com -v (--verbose) imprime os passos que seriam executados. Útil antes de fazer de verdade.
modprobe busca em /lib/modules/$(uname -r)/. Um erro Module not found frequentemente significa uma incompatibilidade de versão entre o kernel em execução e os módulos instalados (por exemplo, o kernel foi atualizado mas o sistema não foi reiniciado).
Qual a Diferença do insmod / rmmod?
Conclusão: insmod e rmmod operam em um único arquivo .ko diretamente e não fazem resolução de dependências, então na prática você usa modprobe.
| Operação | Recomendado (resolve deps) | Baixo nível (sem deps) |
|---|---|---|
| Carregar | modprobe mod |
insmod /path/mod.ko |
| Descarregar | modprobe -r mod |
rmmod mod |
| Nomeação | nome do módulo | caminho completo (insmod) |
insmod não carrega dependências, então falha com erros como Unknown symbol quando elas estão faltando. Use modprobe a menos que tenha um motivo específico para não usar.
Inspecionando um Módulo com modinfo
Conclusão: modinfo mostra o caminho do arquivo, descrição, dependências e parâmetros configuráveis de um módulo -- use para investigar antes de carregar.
$ modinfo nf_conntrack
filename: /lib/modules/6.8.0-106-generic/.../nf_conntrack.ko.zst license: GPL description: Netfilter connection tracking core depends: nf_defrag_ipv4,nf_defrag_ipv6,libcrc32c parm: expect_hashsize:uint
Linhas que valem anotar:
- depends: módulos de dependência (o que
modproberesolve automaticamente) - parm: parâmetros que você pode passar no momento do carregamento
- filename: o caminho real do
.ko(confirme que corresponde ao kernel em execução)
Carregar com um parâmetro temporariamente:
$ sudo modprobe nf_conntrack expect_hashsize=2048
Como Tornar Parâmetros ou Blacklists Persistentes?
Conclusão: Configurações persistentes vão em
/etc/modprobe.d/*.conf--optionspara parâmetros eblacklistpara suprimir carregamento automático.
Persistir um parâmetro (options)
/etc/modprobe.d/nf_conntrack.conf:
options nf_conntrack expect_hashsize=2048
Desabilitar um módulo (blacklist)
Quando você quer suprimir o carregamento automático de um módulo (por exemplo, para parar um driver conflitante).
/etc/modprobe.d/blacklist-mymod.conf:
blacklist mymod
blacklist não impede que um módulo seja carregado como dependência de outro módulo. Para bloquear completamente, adicione também install mymod /bin/true. E para parar um módulo embutido no initramfs, regenere-o com sudo update-initramfs -u (família Debian).
Carregar no boot
Liste os nomes dos módulos (um por linha) em /etc/modules-load.d/mymod.conf, e systemd-modules-load.service os carrega no boot.
nf_conntrack
Para Que Serve o depmod?
Conclusão: depmod gera o mapa de dependências de módulos (
modules.dep) no qual o modprobe se baseia para resolver dependências.
Quando você adiciona um novo .ko em /lib/modules/$(uname -r)/ ou atualiza o kernel, atualize o mapa de dependências.
$ sudo depmod -a
Isso normalmente é executado automaticamente durante o gerenciamento de pacotes (apt / dnf) e atualizações do kernel, então você só executa manualmente após instalar um módulo compilado customizado.
Solução de Problemas
Conclusão: A maioria das falhas são incompatibilidade de versão, em uso, ou privilégios insuficientes. A mensagem de erro indica qual.
| Sintoma | Causa provável | Solução |
|---|---|---|
Module not found |
Incompatibilidade de kernel / não instalado | Verifique uname -r -> reinicie / depmod -a |
Module ... is in use |
Used by diferente de zero |
Pare os dependentes, ou use modprobe -r (não rmmod) |
Operation not permitted |
Privilégios insuficientes | Adicione sudo |
Unknown symbol in module |
Deps não resolvidas (ao usar insmod) | Use modprobe / execute depmod -a |
Erros do lado do kernel durante carregamento / descarregamento aparecem no dmesg.
$ sudo dmesg | tail
Resumo: Separar Inspeção da Ação
Conclusão: Inspecione com lsmod / modinfo, aja com modprobe, e mantenha configurações persistentes em /etc/modprobe.d/ e /etc/modules-load.d/.
- Inspecionar ->
lsmod(listar) /modinfo(detalhes) - Agir ->
modprobe(carregar) /modprobe -r(remover) - Configurar ->
options(parâmetros) /blacklist(desabilitar) /modules-load.d(no boot) - Quando travado -> refine com
dmesgemodprobe -n -v