SlideShare une entreprise Scribd logo
1  sur  49
Télécharger pour lire hors ligne
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 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
                           
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 funcionalidade
  Ampliar Controle


São carregados sob­demanda


                          
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
  Ordem ­> modules.ord
  Apelidos > modules.alias
  Mapeamentos ­> modules.{usb,pci,...}map
Diretório de construção ­> build
Diretórios de modulos
  kernel                      
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 KERNELS NÂO SUPORTAM 
                  
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
                          
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

                          
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

                        
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){
    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)
                            
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(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=";
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 



                         
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


                               
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 mesmo release apresentam 
    mais de um kernel (e.g. Fedora!)
Quantas arquiteturas temos mesmo?
Quantas pessoas se dispõem a compilar um 
 módulo?


                         
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%




                         
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 
                         
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                
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 ferramenta de desenvolvimento!!
GPLv2
Desenvolvido pela DELL (um provedor de 
 módulos)

                         
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.

                         
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.




                         
Instalando...
Presente em distribuições como:
  Fedora
  Ubuntu
  ...
Da fonte
  make install
        Possível gerar debs e rpms



                                 
 
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
  DEST_MODULE_LOCATION
  CLEAN
                         
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
                          
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.conf




                          
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 queira especificar um kernel adicione a flag 
 ­k <VERSAO>




                         
Passo 3
dkms install ­m modulo ­v versao ­k versao
É instalado no sistema principal em 
 /lib/module/`uname 
 ­r`/DEST_MODULE_LOCATION




                         
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/extra
MAKE[0]="make"
CLEAN[0]=”make clean
AUTOINSTALL=”yes”

                     
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

                          
Dúvidas?

<romulojales@gmail.com>




            

Contenu connexe

Tendances

Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalaçãoLuís Eduardo
 
Quero Slack! (Parte 3)
Quero Slack! (Parte 3)Quero Slack! (Parte 3)
Quero Slack! (Parte 3)Felipe Santos
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers DockerMatheus Fidelis
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosDiego Santos
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linuxeliezer
 
Proftpd instalação
Proftpd   instalaçãoProftpd   instalação
Proftpd instalaçãoSENAC RIO
 
SENAI - Segurança firewall
SENAI - Segurança   firewall SENAI - Segurança   firewall
SENAI - Segurança firewall Carlos Melo
 
Procedimentos iniciais v_ms_atualizado
Procedimentos iniciais v_ms_atualizadoProcedimentos iniciais v_ms_atualizado
Procedimentos iniciais v_ms_atualizadoEdmilson João Silva
 
Atividade sor-sambapfmgpo
Atividade sor-sambapfmgpoAtividade sor-sambapfmgpo
Atividade sor-sambapfmgpoCarlos Melo
 
Tópicos - Computacao Paralela Intalação Cluster Beowulf
Tópicos - Computacao Paralela Intalação Cluster BeowulfTópicos - Computacao Paralela Intalação Cluster Beowulf
Tópicos - Computacao Paralela Intalação Cluster BeowulfLuiz Arthur
 

Tendances (19)

Proftpd
ProftpdProftpd
Proftpd
 
Rancher e ansible
Rancher e ansibleRancher e ansible
Rancher e ansible
 
Crud
CrudCrud
Crud
 
Opennebula instalação
Opennebula instalaçãoOpennebula instalação
Opennebula instalação
 
Quero Slack! (Parte 3)
Quero Slack! (Parte 3)Quero Slack! (Parte 3)
Quero Slack! (Parte 3)
 
Introdução a Containers Docker
Introdução a Containers DockerIntrodução a Containers Docker
Introdução a Containers Docker
 
Vamos falar de docker
Vamos falar de dockerVamos falar de docker
Vamos falar de docker
 
Testes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizadosTestes em aplicações JEE: Montando sua infra de testes automatizados
Testes em aplicações JEE: Montando sua infra de testes automatizados
 
Curso de perl
Curso de perlCurso de perl
Curso de perl
 
Apostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em LinuxApostila Treinamento AvançAdo Em Linux
Apostila Treinamento AvançAdo Em Linux
 
Proftpd instalação
Proftpd   instalaçãoProftpd   instalação
Proftpd instalação
 
SENAI - Segurança firewall
SENAI - Segurança   firewall SENAI - Segurança   firewall
SENAI - Segurança firewall
 
Procedimentos iniciais v_ms_atualizado
Procedimentos iniciais v_ms_atualizadoProcedimentos iniciais v_ms_atualizado
Procedimentos iniciais v_ms_atualizado
 
Aulão de docker
Aulão de dockerAulão de docker
Aulão de docker
 
Atividade sor-sambapfmgpo
Atividade sor-sambapfmgpoAtividade sor-sambapfmgpo
Atividade sor-sambapfmgpo
 
Tópicos - Computacao Paralela Intalação Cluster Beowulf
Tópicos - Computacao Paralela Intalação Cluster BeowulfTópicos - Computacao Paralela Intalação Cluster Beowulf
Tópicos - Computacao Paralela Intalação Cluster Beowulf
 
Mercurial hg
Mercurial hgMercurial hg
Mercurial hg
 
Trab linux+sarg
Trab linux+sargTrab linux+sarg
Trab linux+sarg
 
Apostila samba
Apostila sambaApostila samba
Apostila samba
 

Similaire à DKMS ­ Dynamic Kernel Module Support

Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerBruno Ricardo Siqueira
 
Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Alefe Variani
 
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Eliel Simoncelo
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao dockerBenicio Ávila
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxDiego Santos
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersFrancisco Gonçalves
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linhamatheuscmpm
 
Redes Linux comandos gerais e servidores de redes
Redes Linux comandos gerais e servidores de redesRedes Linux comandos gerais e servidores de redes
Redes Linux comandos gerais e servidores de redesSoftD Abreu
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Elton Minetto
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2Cezar Souza
 
Inter Aula1
Inter  Aula1Inter  Aula1
Inter Aula1willians
 

Similaire à DKMS ­ Dynamic Kernel Module Support (20)

O que é Docker?
O que é Docker?O que é Docker?
O que é Docker?
 
Apresentacao docker
Apresentacao dockerApresentacao docker
Apresentacao docker
 
Desenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando DockerDesenvolvendo e implantando aplicações PHP utilizando Docker
Desenvolvendo e implantando aplicações PHP utilizando Docker
 
Tutorial: Instalação de Ubuntu em uma Gumstix Overo
Tutorial: Instalação de Ubuntu em uma Gumstix OveroTutorial: Instalação de Ubuntu em uma Gumstix Overo
Tutorial: Instalação de Ubuntu em uma Gumstix Overo
 
Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!Zend Framework 2 é legal ! Mas como ele funciona ?!
Zend Framework 2 é legal ! Mas como ele funciona ?!
 
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
Mercurianos - .Net na Prática - Da instalação até o debug da nossa API em um ...
 
Introdução ao docker
Introdução ao dockerIntrodução ao docker
Introdução ao docker
 
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/LinuxWebcast Tutorial: Análise de dumps de memória no GNU/Linux
Webcast Tutorial: Análise de dumps de memória no GNU/Linux
 
Docker
DockerDocker
Docker
 
Re pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containersRe pensando-virtualização-através-linux containers
Re pensando-virtualização-através-linux containers
 
Orchestrando na linha
Orchestrando na linhaOrchestrando na linha
Orchestrando na linha
 
IntroduçãO Ao Linux
IntroduçãO Ao LinuxIntroduçãO Ao Linux
IntroduçãO Ao Linux
 
Asterisk
AsteriskAsterisk
Asterisk
 
Redes Linux comandos gerais e servidores de redes
Redes Linux comandos gerais e servidores de redesRedes Linux comandos gerais e servidores de redes
Redes Linux comandos gerais e servidores de redes
 
Apostilaredeslinux
ApostilaredeslinuxApostilaredeslinux
Apostilaredeslinux
 
Introdução ao Zend Framework 2
Introdução ao Zend Framework 2Introdução ao Zend Framework 2
Introdução ao Zend Framework 2
 
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
ZF2 básico : Desenvolvendo um Blog com o Zend Framework 2
 
Docker
DockerDocker
Docker
 
Docker para maiores
Docker para maioresDocker para maiores
Docker para maiores
 
Inter Aula1
Inter  Aula1Inter  Aula1
Inter Aula1
 

Plus de Rômulo Jales

Conhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoasConhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoasRômulo Jales
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologiaRômulo Jales
 
Introdução a Model Based User Interface Design
Introdução a Model Based User Interface DesignIntrodução a Model Based User Interface Design
Introdução a Model Based User Interface DesignRômulo Jales
 
Usando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuáriosUsando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuáriosRômulo Jales
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a Rômulo Jales
 
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...Rômulo Jales
 
Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+Rômulo Jales
 

Plus de Rômulo Jales (10)

Conhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoasConhecimentos básicos para construir um portal que atenda 10milhões de pesoas
Conhecimentos básicos para construir um portal que atenda 10milhões de pesoas
 
Construindo sua primeira ontologia
Construindo sua primeira ontologiaConstruindo sua primeira ontologia
Construindo sua primeira ontologia
 
Introdução a Model Based User Interface Design
Introdução a Model Based User Interface DesignIntrodução a Model Based User Interface Design
Introdução a Model Based User Interface Design
 
Bridge GoF Patern
Bridge GoF PaternBridge GoF Patern
Bridge GoF Patern
 
Usando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuáriosUsando Django para servir 12 milhões de usuários
Usando Django para servir 12 milhões de usuários
 
Uma implementação de suporte a
Uma implementação de suporte a Uma implementação de suporte a
Uma implementação de suporte a
 
Implementação de
Implementação de Implementação de
Implementação de
 
Seminario pic
Seminario picSeminario pic
Seminario pic
 
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...IMPLEMENTAÇÃO DO UNIVERSEAL  HOST CONTROLLER INTERFACE    (UHCI) PARA O MEMTE...
IMPLEMENTAÇÃO DO UNIVERSEAL HOST CONTROLLER INTERFACE (UHCI) PARA O MEMTE...
 
Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+Implementação UHCI para Memtest86+
Implementação UHCI para Memtest86+
 

DKMS ­ Dynamic Kernel Module Support