modprobe e lsmod: Gerenciando Módulos do Kernel

modprobe e lsmod: Gerenciando Módulos do Kernel

O Que Você Vai Aprender

  • Como usar lsmod para ver quais módulos estão atualmente carregados
  • Como usar modprobe para carregar e descarregar módulos com suas dependências
  • O fluxo de trabalho prático para modinfo, blacklist e carregamento no boot

Resumo Rápido

  • Ver estado -> lsmod (somente leitura, formata /proc/modules)
  • Carregar / remover -> modprobe (resolve dependências; evite insmod / rmmod diretamente)
  • 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 modprobe resolve 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 -- options para parâmetros e blacklist para 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 dmesg e modprobe -n -v

Próximas Leituras