modprobe e lsmod: Gerenciando Modulos do Kernel

modprobe e lsmod: Gerenciando Modulos do Kernel

O Que Voce Vai Aprender

  • Como usar lsmod para ver quais modulos estao atualmente carregados
  • Como usar modprobe para carregar e descarregar modulos com suas dependencias
  • O fluxo de trabalho pratico para modinfo, blacklist e carregamento no boot

Resumo Rapido

  • Ver estado -> lsmod (somente leitura, formata /proc/modules)
  • Carregar / remover -> modprobe (resolve dependencias; evite insmod / rmmod diretamente)
  • Configurar -> /etc/modprobe.d/*.conf (opcoes, blacklist) e /etc/modules-load.d/*.conf (carregar no boot)

Premissas

  • Funciona da mesma forma no Ubuntu e nos sistemas da familia RHEL
  • Arquivos de modulos ficam em /lib/modules/$(uname -r)/
  • Carregar / remover modulos geralmente requer root (sudo)

O Que E o lsmod?

Conclusao: lsmod e um comando somente leitura que lista os modulos do kernel atualmente carregados. Ele simplesmente formata o conteudo 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 modulo
  • Size: tamanho na memoria (bytes)
  • Used by: a contagem de referencias seguida dos modulos que dependem dele

Um modulo cuja contagem de Used by nao e 0 esta em uso por outros e nao pode ser removido assim. Descarregue os dependentes primeiro, ou deixe modprobe -r resolver as dependencias por voce.

Para apenas verificar se um modulo esta carregado, combine com grep:

$ lsmod | grep nf_conntrack

O Que o modprobe Pode Fazer?

Conclusao: modprobe carrega e descarrega modulos enquanto resolve automaticamente as dependencias, diferente dos comandos de nivel mais baixo insmod e rmmod.

Carregar um modulo

$ sudo modprobe nf_conntrack

Quaisquer modulos dos quais ele depende sao carregados primeiro, automaticamente. Voce passa apenas o nome do modulo, sem necessidade do caminho .ko.

Descarregar um modulo (-r)

$ sudo modprobe -r nf_conntrack

-r (--remove) remove o alvo mais quaisquer modulos de dependencia que somente ele estava usando. Falha se o modulo ainda esta 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) nao carrega nada de fato; combinado com -v (--verbose) imprime os passos que seriam executados. Util antes de fazer de verdade.

modprobe busca em /lib/modules/$(uname -r)/. Um erro Module not found frequentemente significa uma incompatibilidade de versao entre o kernel em execucao e os modulos instalados (por exemplo, o kernel foi atualizado mas o sistema nao foi reiniciado).

Qual a Diferenca do insmod / rmmod?

Conclusao: insmod e rmmod operam em um unico arquivo .ko diretamente e nao fazem resolucao de dependencias, entao na pratica voce usa modprobe.

Operacao Recomendado (resolve deps) Baixo nivel (sem deps)
Carregar modprobe mod insmod /path/mod.ko
Descarregar modprobe -r mod rmmod mod
Nomeacao nome do modulo caminho completo (insmod)

insmod nao carrega dependencias, entao falha com erros como Unknown symbol quando elas estao faltando. Use modprobe a menos que tenha um motivo especifico para nao usar.

Inspecionando um Modulo com modinfo

Conclusao: modinfo mostra o caminho do arquivo, descricao, dependencias e parametros configuraveis de um modulo -- 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: modulos de dependencia (o que modprobe resolve automaticamente)
  • parm: parametros que voce pode passar no momento do carregamento
  • filename: o caminho real do .ko (confirme que corresponde ao kernel em execucao)

Carregar com um parametro temporariamente:

$ sudo modprobe nf_conntrack expect_hashsize=2048

Como Tornar Parametros ou Blacklists Persistentes?

Conclusao: Configuracoes persistentes vao em /etc/modprobe.d/*.conf -- options para parametros e blacklist para suprimir carregamento automatico.

Persistir um parametro (options)

/etc/modprobe.d/nf_conntrack.conf:

options nf_conntrack expect_hashsize=2048

Desabilitar um modulo (blacklist)

Quando voce quer suprimir o carregamento automatico de um modulo (por exemplo, para parar um driver conflitante).

/etc/modprobe.d/blacklist-mymod.conf:

blacklist mymod

blacklist nao impede que um modulo seja carregado como dependencia de outro modulo. Para bloquear completamente, adicione tambem install mymod /bin/true. E para parar um modulo embutido no initramfs, regenere-o com sudo update-initramfs -u (familia Debian).

Carregar no boot

Liste os nomes dos modulos (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?

Conclusao: depmod gera o mapa de dependencias de modulos (modules.dep) no qual o modprobe se baseia para resolver dependencias.

Quando voce adiciona um novo .ko em /lib/modules/$(uname -r)/ ou atualiza o kernel, atualize o mapa de dependencias.

$ sudo depmod -a

Isso normalmente e executado automaticamente durante o gerenciamento de pacotes (apt / dnf) e atualizacoes do kernel, entao voce so executa manualmente apos instalar um modulo compilado customizado.

Solucao de Problemas

Conclusao: A maioria das falhas sao incompatibilidade de versao, em uso, ou privilegios insuficientes. A mensagem de erro indica qual.

Sintoma Causa provavel Solucao
Module not found Incompatibilidade de kernel / nao instalado Verifique uname -r -> reinicie / depmod -a
Module ... is in use Used by diferente de zero Pare os dependentes, ou use modprobe -r (nao rmmod)
Operation not permitted Privilegios insuficientes Adicione sudo
Unknown symbol in module Deps nao 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 Inspecao da Acao

Conclusao: Inspecione com lsmod / modinfo, aja com modprobe, e mantenha configuracoes persistentes em /etc/modprobe.d/ e /etc/modules-load.d/.

  • Inspecionar -> lsmod (listar) / modinfo (detalhes)
  • Agir -> modprobe (carregar) / modprobe -r (remover)
  • Configurar -> options (parametros) / blacklist (desabilitar) / modules-load.d (no boot)
  • Quando travado -> refine com dmesg e modprobe -n -v

Proximas Leituras