Informational | Operating Systems

O que são módulos DKMS no Linux?

Muitas distribuições compilam módulos DKMS ao atualizar, mas o que exatamente são eles?

Módulos “normais”

Para entender os módulos dinâmicos, primeiro precisamos olhar para um módulo normal.

Esses módulos normais são compilados para uma versão específica do kernel, o que significa que, se por qualquer motivo você trocar ou atualizar o kernel, o módulo pode deixar de funcionar.

Isso acontece porque os módulos do kernel dependem da versão e da configuração com que aquele kernel foi compilado. Portanto, um módulo que funciona corretamente em uma determinada versão pode não ser compatível com outra. Esses módulos são relativamente comuns em sistemas de lançamento pontual (como Debian, Ubuntu ou Fedora).

Módulos dinâmicos

Já os módulos dinâmicos do kernel, em vez de armazenar apenas o módulo já compilado, armazenam seu código-fonte e as informações necessárias para recompilá-lo, geralmente em /usr/src.

Depois disso, você deve compilá-lo para o kernel que vai usar, seja executando o comando dkms manualmente ou por meio de um hook do gerenciador de pacotes, que é o que costuma acontecer. Dessa forma, o mesmo código-fonte pode ser usado para gerar um módulo compatível com diferentes versões do kernel.

Portanto, quando um kernel é instalado ou atualizado, o DKMS detecta os módulos que tem registrados e verifica se já existe uma versão compilada para aquele kernel:

  • Se não existir, o DKMS pode compilar o módulo usando os headers correspondentes àquela versão do kernel. Isso é especialmente útil quando você tem vários kernels instalados, pois ele pode manter uma cópia compilada do módulo para cada um deles.
  • Se um kernel não estiver mais instalado, dependendo de como o sistema está configurado e dos pacotes envolvidos, o DKMS também pode remover as compilações associadas a esse kernel, porque não são mais necessárias.

Depois que os módulos são recompilados para um kernel específico, o DKMS os instala na árvore de módulos desse kernel, geralmente em /lib/modules/<versão>/updates/dkms.

A partir daí, o sistema pode encontrar e carregar esses módulos da mesma forma que outros módulos externos do kernel. É importante esclarecer que o DKMS não transforma esses módulos em módulos oficiais do kernel: ele apenas automatiza sua compilação e instalação fora da árvore principal do kernel.

Administração

Por fim, para gerenciar os módulos manualmente, você pode usar o comando dkms:

  • dkms status para ver quais módulos você tem registrados e para quais kernels eles estão compilados.
  • dkms build para compilar manualmente um módulo para um kernel específico.
  • dkms install para instalar uma compilação na árvore de módulos correspondente.
  • dkms remove para remover módulos registrados ou suas compilações.

O dkms tem mais funções; estas são as básicas. Recomendo consultar as páginas de manual dkms(8) para mais informações.

Funcionalidade prática

Graças ao DKMS, sistemas de lançamento contínuo como o Arch Linux, pacotes do AUR (geralmente firmware) ou hardware sem suporte no kernel principal podem continuar funcionando usando módulos DKMS.

Isso pode incluir drivers proprietários, módulos para hardware específico ou antigo, ou projetos que precisam se manter atualizados conforme o kernel muda (por exemplo, o v4l2-loopback).

Um exemplo conhecido inclui certos drivers da NVIDIA ou módulos de hardware antigo distribuídos fora da árvore principal do kernel que a NVIDIA não mantém mais (por exemplo, GPUs anteriores à Pascal).

Conclusão

Em resumo, o DKMS não é realmente um tipo diferente de módulo: é um sistema que mantém o código-fonte de módulos externos e automatiza sua recompilação para as versões do kernel que você tem instaladas. Assim, quando você atualiza o kernel, não precisa compilar manualmente cada módulo do zero.

linux


Avatar

ItsZariep

YouTuber e programador, utiliza Linux desde 2015

Sobre mim


© 2026 ItsZariep

Powered by Tessera for Hugo