O que o DKMS faz? Como eu uso isso?

23

Vi algumas menções sobre o DKMS recentemente, mas não está claro o que está realmente fazendo no meu sistema.

O que o DKMS realmente faz e como eu o uso?

user238204
fonte

Respostas:

25

O pacote DKMS (Dynamic Kernel Module Support) ( http://linux.dell.com/dkms/ ) fornece suporte para a instalação de versões suplementares dos módulos do kernel. O pacote compila e instala na árvore do kernel. A desinstalação restaura os módulos anteriores. Por padrão, a instalação está na árvore atual do kernel, mas qualquer árvore do kernel pode ser selecionada com opções de linha de comando. Além disso, o DKMS é chamado automaticamente após a instalação dos novos pacotes de imagem do kernel do Ubuntu e, portanto, os módulos adicionados ao DKMS serão automaticamente transportados pelas atualizações.

visão global

Para usar um módulo com DKMS, coloca-se os arquivos de instalação do módulo (pode ser código-fonte ou binário) em / usr / src / -, junto com um arquivo de configuração dkms.conf que informa ao DKMS como construir / configurar o módulo e qual nome é. Em cenários mais avançados, instruções de construção condicional e correções podem ser feitas pelo sistema dkms, mas, considerando o seu caso, isso pode não ser necessário.

Walk-through

Digamos que você queira instalar um módulo para o seu "Awesome Awesome Adapter". Você recebe uma fonte tarball awesome-20091211-v1.1.tgz.

Com o DKMS, informamos ao DKMS como fazer isso criando um arquivo dkms.conf com as entradas apropriadas. Por exemplo, depois de descompactarmos o tarball:

# cd awesome-20091211-v1.1/
# touch dkms.conf 
# create dkms.conf file
# vi dkms.conf

Dentro dkms.conf, podemos adicionar as linhas:

MAKE="make -C src/ KERNELDIR=/lib/modules/${kernelver}/build"
CLEAN="make -C src/ clean"
BUILT_MODULE_NAME=awesome
BUILT_MODULE_LOCATION=src/
PACKAGE_NAME=awesome
PACKAGE_VERSION=1.1
REMAKE_INITRD=yes

Todos os diretórios estão relacionados ao local do arquivo dkms.conf. Isso diz ao DKMS

  1. O comando para construir o módulo (execute make no diretório src /).
  2. O comando para limpar a árvore de origem (execute make clean no diretório src /).
  3. O nome do módulo sem a extensão .o ou .ko. Isso pode realmente ser uma matriz de módulos se vários módulos forem construídos, consulte man dkms.
  4. Onde o DKMS pode encontrar o módulo incorporado.
  5. O nome e a versão DKMS devem ser associados ao (s) módulo (s).
  6. Para refazer a imagem do initrd após a instalação do módulo.

Você também pode adicionar opções para chamar scripts antes ou depois da compilação ou instalação, fornecer comandos make (condicionais) adicionais, comandos de correção, etc. se necessário. Essas opções e mais são descritas na seção dkms.conf no man dkms.

Em seguida, instalamos o módulo no DKMS, copiando os arquivos de instalação do módulo na árvore de origem do kernel / usr / src / - e informamos ao DKMS sobre o novo módulo:

# ls
    README dkms.conf lib src
# sudo cp -R . /usr/src/awesome-1.1
# sudo dkms add -m awesome -v 1.1
    dkms does its thing...

É isso aí! O DKMS agora adicionou nosso módulo à sua lista de módulos a serem construídos para futuras instalações do kernel. Para garantir que funcione e instalar o módulo em nosso kernel atual, podemos instruir os dkms a criar e instalar o módulo:

# sudo dkms build -m awesome -v 1.1
    dkms does its thing.... watch for build errors... you may need to tweak dkms.conf
# sudo dkms install -m awesome -v 1.1
    dkms does its thing.... module is copied into current kernel module tree

Com alguma sorte, seu módulo será instalado e reinstalado em futuras atualizações do kernel.

Exemplos

A página do manual DKMS contém informações úteis sobre a configuração do seu módulo de kernel favorito para uso com o DKMS. Não é uma documentação abrangente, mas responderá muitas perguntas. Pode ser útil observar os seguintes exemplos, mesmo que os módulos utilizados não sejam os que você deseja configurar:

  • RocketRaid - Dois exemplos de como configurar os drivers Highpoint RocketRaid RR26xx e RR62x com DKMS.

De: help.ubuntu.com

Mais informações podem ser encontradas aqui:

Rinzwind
fonte
2
FWIW, o projeto DKMS tem uma nova casa no GitHub github.com/dell/dkms
DDay