DKMS ­ Dynamic Kernel Module Support
             Rômulo Jales




                   
Apresentação
Rômulo de Barros Correia Jales
  10º período do curso de engenharia da 
    computação (FINALMENTE!!!)
  10 a...
Fé, fe na catucagem


          
O que veremos?
Introdução a módulos para Linux
DKMS




Não veremos desenvolvimento de módulos !!!


                     ...
Módulos – O que são?
São peças que se encaixam em tempo de 
 execução ao kernel com o intuito de:


  Expandir uma funcion...
Exemplos:
Device Drivers
  Modems
Sistemas de arquivos
  Ntfs
Controle
  Cpufreq_ondemand



                        
Onde estão no meu sistema Linux?
/lib/modules/`uname ­r`/
Contém as referencias para:
  Dependências ­> modules.dep
  Orde...
Mais sobre os arquivos...
/etc/[modprobe.conf,modprobe.d]


/lib/modules/`uname ­r`/build


/proc/modules


/sys/module
  ...
Comandos para gerenciamento
insmod
rmmod
modprobe
depmod
lsmod 
modinfo


Providos pelo pacote module­init­tools
         ...
insmod
Carrega um módulo


insmod MODULO [opções do modulo]

  P/ opções do módulo vide o manual do módulo




ALGUNS KERN...
rmmod
Remove um módulo
rmmod ­fw MODULO
 ­f ­> força a remoção
 ­w ­> espera o termino do uso




 ALGUNS KERNELS NÂO SUPO...
depmod
Cria/Atualiza os arquivos modules.dep e de 
 mapeamento. 
Varre todo o /lib/modules/`uname ­r` lendo os 
 símbolos ...
modprobe
Agrega funções de insmod rmmod
Depende de um bom uso do depmod
Incrementa mais opções a gestão de módulos
Pode fo...
modprobe
Para adicionar
modprobe MODULO
Para remover
modprobe ­r MODULO




                     
 
lsmod
Mostra o status dos módulos em execução
É uma forma mais amigável de ver o conteúdo de 
 /proc/modules
lsmod




   ...
modinfo
Extrai informações do módulo como:
Licença
Autor
Vermagic
Dependências de outros módulos
Versão


                ...
Dependências
Vermagic
UTS_RELEASE
LINUX_VERSION_CODE
KERNEL_VERSION
Arquitetura do sistema




                          
Ok, show me the code!
#include <linux/init.h>
#include <linux/module.h>
MODULE_LICENSE("GPL");
static int hello_init(void)...
Compilando...


 obj­m := hello.o


all:
    make ­C /lib/modules/`uname ­r`/build M=$(shell pwd) 
modules



            ...
Código intermediário
#include <linux/module.h>
#include <linux/vermagic.h>
#include <linux/compiler.h>
MODULE_INFO(vermagi...
Modinfo de hello.ko


filename:       hello.ko
license:        GPL
srcversion:     471D708B0804FE26B554DB1
depends:       ...
Carregando nosso módulo...
insmod hello.ko
dmesg | tail
Olá, VI encontro de sl POLI
rmmod hello
demsg | tail
xau, Vi encon...
Agora suponhamos...
Você é um fornecedor de módulo
  ATI
  REALTEK
  SUN
  Catucador
Observemos o cenário



             ...
Cenário
2^12344535634563472134123 builds de kernel
  Ou seja 2^12344535634563472134123 vermagic.o
  Algumas distros num me...
Ou seja...
Para cada vermagic diferente e arquitetura 
 diferente um novo build do módulo.
Para cada arquitetura disponíve...
Um módulo dois sistemas

Filename: /lib/modules/2.6.24­21­
server/kernel/fs/fuse/fuse.ko
alias:          char­major­10­229...
Um módulo dois sistemas
filename:       
/lib/modules/2.6.29.6­217.2.8.fc11.i586/kernel/fs/fu
se/fuse.ko
alias:          c...
DKMS
DYNAMIC KERNEL MODULE SUPPORT




               
O que é DKMS?
Um framework para auxiliar o build, 
 empacotamento e manutenção de módulos
Feito em shell script
Não é uma ...
Quais os objetivos?
Permitir a sysadmin saber o real estado dos 
 modulos instalados
Reduzir o tamanho do Makefile
Impacta...
O que dá para fazer?
Abstrair a versão do kernel que roda no cliente.
Abstrair a versão, quando possível, que roda no 
 cl...
Instalando...
Presente em distribuições como:
  Fedora
  Ubuntu
  ...
Da fonte
  make install
        Possível gerar debs ...
 
Usando
Apenas um comando dkms...
  install
  build
  remove
  uninstall




                     
dkms.conf
Semelhante a um shellscript
Variáveis primitivas:
  PACKAGE_NAME
  PACKAGE_VERSION
  BUILT_MODULE_NAME
  MAKE
  ...
PACKAGE_NAME
 Define o nome do pacote. Deve ter o mesmo nome 
  do modulo de /usr/scr/modulo­versao
PACKAGE_VERSION
 Defin...
DEST_MODULE_LOCATION
Algumas distribuições não funciona
  UBUNTU
  SUSE
  Fedora...
O alvo sempre será /updates/dkms




 ...
Iniciando o processo
Criar o diretório /usr/src/modulo­versao
Copiar o fonte para o diretório
Configurar o arquivo dkms.co...
Passo 1
dkms add ­m modulo ­v versao
Será criado um diretório:
  /var/lib/dkms/modulo/versao




                         ...
Passo 2
dkms build ­m modulo ­v versao
Será copiado o /usr/src/modulo­versao para 
 /var/lib/dkms/modulo/versao/build
Caso...
Passo 3
dkms install ­m modulo ­v versao ­k versao
É instalado no sistema principal em 
 /lib/module/`uname 
 ­r`/DEST_MOD...
Desinstalar
dkms uninstall ­m module ­v versao ­k kernel
Apenas retira o modulo para o kernel 
 especificado.




        ...
Remover
dkms remove ­m modulo ­v versao ­k kernel
dkms remove ­m modulo ­v versal ­­all




                        
Empacotamento
RPM
 dkms mkrpm ­m versao ­v versao ­k kernel
DEB
 dkms mkdeb ...




                         
dkms_autoinstaller
Serviço que detecta um kernel novo e realiza 
 todo o processo automaticamente.




                   ...
Nosso modulo


PACKAGE_NAME="hello”
PACKAGE_VERSION="1.0"
BUILT_MODULE_NAME[0]="hello"
DEST_MODULE_LOCATION[0]=/kernel/ext...
Executando
dkms add ­m hello ­v 1.0
dkms build ­m hello ­v 1.0
dkms install ­m hello ­v 1.0
modprobe hello
Pronto!!! 
Agor...
Dúvidas?

<romulojales@gmail.com>




            
Próximos SlideShares
Carregando em…5
×

DKMS ­ Dynamic Kernel Module Support

1.945 visualizações

Publicada em

Apresentação para o VI encontro de software Livre da escola politécnica de Pernambuco.

Não sei o que houve, que a organização da apresentação ficou bagunçada. Peguei do próprio site do evento.

0 comentários
0 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

  • Seja a primeira pessoa a gostar disto

Sem downloads
Visualizações
Visualizações totais
1.945
No SlideShare
0
A partir de incorporações
0
Número de incorporações
28
Ações
Compartilhamentos
0
Downloads
18
Comentários
0
Gostaram
0
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

DKMS ­ Dynamic Kernel Module Support

  1. 1. DKMS ­ Dynamic Kernel Module Support Rômulo Jales  
  2. 2. Apresentação Rômulo de Barros Correia Jales 10º período do curso de engenharia da  computação (FINALMENTE!!!) 10 anos de uso de Linux, mas ainda um noob Desenvolvimento de device drivers,  sistemas  embarcados e aplicações Linux. Atualmente na Fundação para Inovações  Tecnológicas – FITec www.romulojales.com <­ Bagunçado ao extremo  
  3. 3. Fé, fe na catucagem  
  4. 4. O que veremos? Introdução a módulos para Linux DKMS Não veremos desenvolvimento de módulos !!!  
  5. 5. Módulos – O que são? São peças que se encaixam em tempo de  execução ao kernel com o intuito de: Expandir uma funcionalidade Ampliar Controle São carregados sob­demanda  
  6. 6. Exemplos: Device Drivers Modems Sistemas de arquivos Ntfs Controle Cpufreq_ondemand  
  7. 7. Onde estão no meu sistema Linux? /lib/modules/`uname ­r`/ Contém as referencias para: Dependências ­> modules.dep Ordem ­> modules.ord Apelidos > modules.alias Mapeamentos ­> modules.{usb,pci,...}map Diretório de construção ­> build Diretórios de modulos kernel  
  8. 8. Mais sobre os arquivos... /etc/[modprobe.conf,modprobe.d] /lib/modules/`uname ­r`/build /proc/modules /sys/module  
  9. 9. Comandos para gerenciamento insmod rmmod modprobe depmod lsmod  modinfo Providos pelo pacote module­init­tools  
  10. 10. insmod Carrega um módulo insmod MODULO [opções do modulo] P/ opções do módulo vide o manual do módulo ALGUNS KERNELS NÂO SUPORTAM   
  11. 11. rmmod Remove um módulo rmmod ­fw MODULO ­f ­> força a remoção ­w ­> espera o termino do uso ALGUNS KERNELS NÂO SUPORTAM REMOÇÂO  
  12. 12. depmod Cria/Atualiza os arquivos modules.dep e de  mapeamento.  Varre todo o /lib/modules/`uname ­r` lendo os  símbolos de cada módulo depmod [opções] ­a ­> todos os módulos ­b ­> Varre outro diretório base  
  13. 13. modprobe Agrega funções de insmod rmmod Depende de um bom uso do depmod Incrementa mais opções a gestão de módulos Pode forçar situações que dão erro no insmod e  rmmod Qualquer mensagem ou erro será vista pelo  comando dmesg  
  14. 14. modprobe Para adicionar modprobe MODULO Para remover modprobe ­r MODULO  
  15. 15.  
  16. 16. lsmod Mostra o status dos módulos em execução É uma forma mais amigável de ver o conteúdo de  /proc/modules lsmod  
  17. 17. modinfo Extrai informações do módulo como: Licença Autor Vermagic Dependências de outros módulos Versão  
  18. 18. Dependências Vermagic UTS_RELEASE LINUX_VERSION_CODE KERNEL_VERSION Arquitetura do sistema  
  19. 19. Ok, show me the code! #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("GPL"); static int hello_init(void){     printk(KERN_ALERT "Olá, VI encontro de sl POLIn");     return 0; } static void hello_exit(void){     printk(KERN_ALERT "Xau, pessoaln"); } module_init(hello_init); module_exit(hello_exit)  
  20. 20. Compilando...  obj­m := hello.o all: make ­C /lib/modules/`uname ­r`/build M=$(shell pwd)  modules  
  21. 21. Código intermediário #include <linux/module.h> #include <linux/vermagic.h> #include <linux/compiler.h> MODULE_INFO(vermagic, VERMAGIC_STRING); struct module __this_module __attribute__((section(".gnu.linkonce.this_module"))) = {  .name = KBUILD_MODNAME,  .init = init_module, #ifdef CONFIG_MODULE_UNLOAD  .exit = cleanup_module, #endif  .arch = MODULE_ARCH_INIT, }; static const char __module_depends[] __used   __attribute__((section(".modinfo"))) = "depends=";
  22. 22. Modinfo de hello.ko filename:       hello.ko license:        GPL srcversion:     471D708B0804FE26B554DB1 depends:         Vermagic:  2.6.29.6­217.2.8.fc11.i586  SMP  mod_unload 586   
  23. 23. Carregando nosso módulo... insmod hello.ko dmesg | tail Olá, VI encontro de sl POLI rmmod hello demsg | tail xau, Vi encontro de sl Poli  
  24. 24. Agora suponhamos... Você é um fornecedor de módulo ATI REALTEK SUN Catucador Observemos o cenário  
  25. 25. Cenário 2^12344535634563472134123 builds de kernel Ou seja 2^12344535634563472134123 vermagic.o Algumas distros num mesmo release apresentam  mais de um kernel (e.g. Fedora!) Quantas arquiteturas temos mesmo? Quantas pessoas se dispõem a compilar um  módulo?  
  26. 26. Ou seja... Para cada vermagic diferente e arquitetura  diferente um novo build do módulo. Para cada arquitetura disponível um build novo Para cada atualização da distro um build novo A chance disso quebrar é de 100%  
  27. 27. Um módulo dois sistemas Filename: /lib/modules/2.6.24­21­ server/kernel/fs/fuse/fuse.ko alias:          char­major­10­229 license:        GPL description:    Filesystem in Userspace author:         Miklos Szeredi <miklos@szeredi.hu> srcversion:     E541E638476D5621E6382F8 depends:         vermagic: 2.6.24­21­server SMP mod_unload 686   
  28. 28. Um módulo dois sistemas filename:        /lib/modules/2.6.29.6­217.2.8.fc11.i586/kernel/fs/fu se/fuse.ko alias:          char­major­10­229 license:        GPL description:    Filesystem in Userspace author:         Miklos Szeredi <miklos@szeredi.hu> srcversion:     900C9E5D6A8FFEA327DB1CF depends:         vermagic:       2.6.29.6­217.2.8.fc11.i586 SMP  mod_unload 586  
  29. 29. DKMS DYNAMIC KERNEL MODULE SUPPORT  
  30. 30. O que é DKMS? Um framework para auxiliar o build,  empacotamento e manutenção de módulos Feito em shell script Não é uma ferramenta de desenvolvimento!! GPLv2 Desenvolvido pela DELL (um provedor de  módulos)  
  31. 31. Quais os objetivos? Permitir a sysadmin saber o real estado dos  modulos instalados Reduzir o tamanho do Makefile Impactar o menos possível na complicada tarefa  de fazer um modulo (basta um arquivo) Fácil para vários perfis de usuários:  desenvolvedores, administradores e usuários  comuns.  
  32. 32. O que dá para fazer? Abstrair a versão do kernel que roda no cliente. Abstrair a versão, quando possível, que roda no  cliente. Testar amplamente o número de kernels e  arquiteturas.  
  33. 33. Instalando... Presente em distribuições como: Fedora Ubuntu ... Da fonte make install Possível gerar debs e rpms  
  34. 34.  
  35. 35. Usando Apenas um comando dkms... install build remove uninstall  
  36. 36. dkms.conf Semelhante a um shellscript Variáveis primitivas: PACKAGE_NAME PACKAGE_VERSION BUILT_MODULE_NAME MAKE DEST_MODULE_LOCATION CLEAN  
  37. 37. PACKAGE_NAME Define o nome do pacote. Deve ter o mesmo nome  do modulo de /usr/scr/modulo­versao PACKAGE_VERSION Define a versão corrente do modulo BUILT_MODULE_NAME O nomo do modulo, é o modulo objeto DEST_MODULE_LOCATION Onde será instalo o modulo a partir de  /lib/modules/`uname ­r` MAKE  & CLEAN O comando de build e limpeza  
  38. 38. DEST_MODULE_LOCATION Algumas distribuições não funciona UBUNTU SUSE Fedora... O alvo sempre será /updates/dkms  
  39. 39. Iniciando o processo Criar o diretório /usr/src/modulo­versao Copiar o fonte para o diretório Configurar o arquivo dkms.conf  
  40. 40. Passo 1 dkms add ­m modulo ­v versao Será criado um diretório: /var/lib/dkms/modulo/versao  
  41. 41. Passo 2 dkms build ­m modulo ­v versao Será copiado o /usr/src/modulo­versao para  /var/lib/dkms/modulo/versao/build Caso queira especificar um kernel adicione a flag  ­k <VERSAO>  
  42. 42. Passo 3 dkms install ­m modulo ­v versao ­k versao É instalado no sistema principal em  /lib/module/`uname  ­r`/DEST_MODULE_LOCATION  
  43. 43. Desinstalar dkms uninstall ­m module ­v versao ­k kernel Apenas retira o modulo para o kernel  especificado.  
  44. 44. Remover dkms remove ­m modulo ­v versao ­k kernel dkms remove ­m modulo ­v versal ­­all  
  45. 45. Empacotamento RPM dkms mkrpm ­m versao ­v versao ­k kernel DEB dkms mkdeb ...  
  46. 46. dkms_autoinstaller Serviço que detecta um kernel novo e realiza  todo o processo automaticamente.  
  47. 47. Nosso modulo PACKAGE_NAME="hello” PACKAGE_VERSION="1.0" BUILT_MODULE_NAME[0]="hello" DEST_MODULE_LOCATION[0]=/kernel/extra MAKE[0]="make" CLEAN[0]=”make clean AUTOINSTALL=”yes”  
  48. 48. Executando dkms add ­m hello ­v 1.0 dkms build ­m hello ­v 1.0 dkms install ­m hello ­v 1.0 modprobe hello Pronto!!!  Agora qualquer novo kernel não teremos mais  que reinstalar, rebuildar um hello.ko  
  49. 49. Dúvidas? <romulojales@gmail.com>  

×