O que é DKMS no Linux

O que é DKMS no Linux
DKMS ou suporte dinâmico do módulo do kernel é um sistema que permite que os módulos discretos do kernel atualizem sem a necessidade de modificar todo o kernel. É um software livre no GPL V2 e escrito pela equipe de engenharia Linux da Dell. O DKMS foi desenvolvido inicialmente para a Dell Computer Corporation distribuir patches de software para seus clientes de uma maneira bem definida.

DKMS tem muitos benefícios para as comunidades de provedores de serviços Linux, e.g.:

  1. Do ponto de vista do desenvolvedor do motorista, ele ajuda a adicionar drivers que ainda não estão no kernel da base. Além disso, os desenvolvedores de motoristas que são obrigados a disponibilizar drivers de dispositivo atualizados para testes e uso comum em uma grande variedade de kernels também se beneficiam. Outra vantagem do DKMS é que os desenvolvedores podem testar o código do motorista em diferentes máquinas. De fato, isso acelera o processo de desenvolvimento do motorista.
  2. Do ponto de vista do administrador do sistema, o DKMS simplifica o processo de instalação de atualizações do driver do dispositivo no kernel ativo sem adicionar nenhuma alteração a ele. Portanto, eles não precisam esperar pela chegada de um novo kernel.
  3. As correções ou patches selecionados de bugs podem ser lançados entre atualizações de tamanho grande.
  4. Novo hardware que requer modificação em um único módulo pode ser facilmente integrado. Novamente, isso pode ser alcançado sem testar inteiramente os novos kernels.

O que vamos cobrir?

Este guia discutirá várias terminologias relacionadas ao kernel e especificamente o que é DKMS.

Uma rápida revisão das terminologias

Qual é o kernel Linux?

É a parte central de um sistema operacional Linux. É a principal interface entre os processos em execução no sistema operacional e seu hardware. Ele gerencia as principais funções como gerenciamento de memória, gerenciamento de processos, gerenciamento de CPU, gerenciamento de driver de dispositivo e chamadas de sistema e gerenciamento de segurança.

Espaço do kernel
O kernel está realmente escondido do usuário e funciona em sua própria área chamada Kernel Space. O usuário interage com o kernel usando os aplicativos do usuário, como navegador de arquivos, navegador da web, etc. Essas interações usam uma construção de programação específica chamada chamada de sistema.

Árvore de origem do kernel
Tem todo o código -fonte para drivers de kernel e dispositivo. Consiste em muitos diretórios e subdiretórios como Arch, Block, cripto.

Módulos do kernel Linux
Os módulos do kernel Linux são basicamente pedaços de código. Estes podem ser adicionados e removidos do kernel conforme o requisito. Eles podem ser embutidos ou carregáveis. O módulo do kernel aumenta as funções do kernel sem exigir uma reinicialização do sistema. Ao contrário dos microkernels, onde a adição de novos componentes ao kernel requer configuração e construção de um novo kernel, podemos carregar e descarregar componentes ou módulos do sistema operacional em tempo de execução. Esses módulos são drivers de dispositivo, sistemas de arquivos, etc.

Depois que um módulo é carregado, é como um pedaço de código do kernel. Tem os mesmos privilégios e deveres que um código de kernel normal.

Definição de DKMS

Aqui está um trecho da definição DKMS que encontrei aqui:

“DKMS é uma estrutura em que a fonte do driver de dispositivo pode residir fora da árvore de origem do kernel, para que seja muito fácil reconstruir módulos à medida que você atualiza os grãos.”

Vamos elaborar no acima. O sistema DKMS é uma árvore fora da árvore do kernel base no chão. Ele contém a fonte do módulo e os binários do módulo compilado. Como resultado dessa replicação, os módulos não são acoplados ao kernel. (Embora os módulos não sejam totalmente dissociados).

Eu mesmo encontrei o conceito DKMS quando comprei um laptop HP e instalei o Ubuntu 18.04 nele. Tudo estava funcionando bem, exceto pelo meu wifi. Meu laptop não foi capaz de localizar nenhum adaptador wifi. Nas configurações, o menu wifi exibiu uma mensagem “Nenhum adaptador de wifi encontrado”. Comecei a pesquisar fóruns na internet e descobri que muitas pessoas estavam enfrentando o mesmo problema. Encontrei muitas soluções sugerindo a instalação de arquivos de cabeçalho, drivers e outros pacotes.

Eu apenas segui cegamente esses guias sem realmente saber o que eles realmente queriam para transmitir. Enfim, esses guias me ajudaram, e eu comecei a Wi -Fi de alguma forma. Mas o problema era que sempre que eu atualizava meu sistema Ubuntu, surgiu o mesmo problema e tive que repetir as mesmas etapas de recompilar os drivers baixados. Além disso, tenho que corrigir o baixo problema de sinal todas as vezes depois de instalar o driver. Eu até instalei o sistema operacional do Windows e, para minha surpresa, o wifi estava realmente funcionando perfeitamente. Mas eu tenho que usar o Ubuntu para o meu trabalho de qualquer maneira. Então eu decidi viver com o patch temporário que recebi mais cedo.

DKMS vem em socorro

Uma solução recente que acabei de me deparar com a qual não me importava no passado usou o caminho DKMS. Em vez de usar o fazer ou faça instalar Comando, o DKMS executa três operações no código -fonte: Adicionar, construir e instalar.

Usando DKMS

Para que os DKMs funcionem, a fonte do módulo deve estar presente no sistema em que estamos construindo o módulo, e o caminho de localização deve ser como '/usr/src/-/' E lembre -se de que este é o primeiro requisito de DKMS. Outro requisito é um arquivo chamado 'dkms.conf ', que orientará como construir e instalar um módulo. E só para mencionar, os DKMs já devem ser instalados no sistema. Uma vez que tudo estiver no lugar, podemos adicionar um módulo à árvore DKMS.

Vamos ver essas etapas instalando um módulo de demonstração 'Demo-V0.1.alcatrão.gz ' com dkms. Estamos fazendo esta amostra é apenas com o objetivo de entender como o DKMS funciona. Depois de extrair o arquivo, precisamos 'cd' dentro dele:

# CD Demo-V0.1//

Agora crie um dkms.conf arquivo que contém as seguintes linhas:

Make = "make -c src/kerneldir =/lib/módulos/$ kernelver/build"
Limpo = "make -c $ kernel_source_dir m = $ dkms_tree/$ package_name/$ package_version/build limpo"
Built_module_name = "Demo"
Construído_module_location = "src"
Package_name = demonstração
Package_version = 0.1
Remake_initrd = "sim"
AutoInstall = Sim

Agora que nosso dkms.conf O arquivo está pronto, podemos adicionar nosso módulo de demonstração como:

# dkms add -m Demo -v 0.1

A beleza dos DKMs é que podemos especificar a versão do kernel contra a qual queremos construir ou módulo como mostrado aqui:

# DKMS Build -M Demo -v 0.1 -K 5.13.0-27

Se não especificarmos o kernel, o DKMS construirá o módulo com a versão atual do kernel.

Se tudo correr bem, agora podemos instalar o módulo usando:

# DKMS Install -M Demo -v 0.1

Se atualizarmos nosso kernel ou alterarmos a arquitetura de hardware, um módulo deve ser reconstruído manualmente novamente. Com a ajuda do DKMS, esse procedimento se torna redundante à medida que o DKMS constrói dinamicamente esses módulos de kernel para cada núcleo presente no sistema.

Conclusão

Ferramentas como o DKMS ajudaram muito os administradores, desenvolvedores de motoristas e outras reduzem a tarefa de gerenciamento do kernel. Enquanto os usuários finais não se importam com a forma como o sistema subjacente está funcionando até que seus objetivos sejam atingidos, o DKMS permite que desenvolvedores e administradores se concentrem em seu trabalho.