0
Introdução ao Desenvolvimento  
        do Kernel Linux
              Versões 2.6.X

                                 
   ...
Kernel Linux



  ●
      Sobre o palestrante
  ●
      Sobre a palestra
  ●
      Dicas iniciais




2007­03­24
Kernel Linux 

   Onde começar ?  TODO List ?

                http://www.kernelnewbies.org
                http://br.kern...
Kernel Linux 


   Onde obter o código fonte ? 

      http://www.kernel.org
      ftp://ftp.kernel.org/pub
      rsync://...
Kernel Linux


  Licença: 
  ●
      GPL ( versão 2 )   
      http://www.gnu.org/copyleft/gpl.html


  Como funciona?
  ●...
Kernel


  Definição:

  ●
      É no kernel que estão definidas funções para operação com 
      periféricos (mouse, disc...
Kernel

                                    User-Space


                          Aplicativo 1    Aplicativo 2




      ...
Kernel


  Design: Monolítico versus MicroKernel
  ●
      Monolítico:
             ●
                 Criado em meados de...
Kernel 

     Exemplo:

          Monolítico                     MicroKernel


             Kernel                        ...
Kernel Linux


  Design: 
  ●
      Executa em um único processo
  ●
      Kernel Linux é monolítico 
  ●
      Implementa...
Kernel Linux 

   Versões: 

     Estáveis:
                 ●
                     Correções de bugs
                 ●
 ...
Kernel Linux 


   Versões: 

                                   2.6.0
      Versão principal é 2                       Re...
Kernel Linux


  Versões, e hoje como funciona? 

  ●
      Hoje só temos a versão 2.6.X
  ●
      Decisão tomada no Linux...
Kernel Linux 

   Diretórios: 
              arch/            Código específico de arquitetura
              crypto/      ...
Kernel Linux

  Diretórios: 

             lib/        Bibliotecas  
             mm/         Gerenciamento de Memória
   ...
Kernel Linux 

   CodingStyle:  

              Identação         1 TAB = 8 caracteres (!= 8 espaços)
              Coluna...
Kernel Linux 

   CodingStyle:  

              Funções:
                            1, 2 páginas?
                       ...
Kernel Linux 

   CodingStyle:  

              Ferramenta indent:

              $ indent ­kr ­i8 ­ts8 ­sob ­180 ­ss ­bs ...
Kernel Linux 

   Compilando/Carregando/Listando/Descarregando:  
                                          Atenção aos WA...
Kernel Linux 

   hello.c  

   #include <linux/init.h>
   #include <linux/module.h>
   MODULE_LICENSE("Dual BSD/GPL");

 ...
Kernel Linux 

   hello.c  

   static void hello_exit(void)
   {
        printk(KERN_ALERT "Goodbyen");
   }

   module_i...
Kernel Linux 

   Depuração com printfk():  


      printk() ~= printf()

      printk(KERN_WARNING “mensagem de warning!...
Kernel Linux 

   Ferramentas:  
      diff                           Ferramenta para comparar arquivos
      patch       ...
Kernel Linux 

   Ctags:  

      $ make tags

      $ vi .vimrc
          set tags=/usr/src/linux/tags

      :ta printk
...
Kernel Linux 

   Ferramentas Diff e Patch:  

      $ diff ­ruN linux­x.y.z/ linux/ > meu­patch.diff

      ­r      Recur...
Kernel Linux 

   Ferramentas Diff e Patch (exemplo):  

   ­­­ linux­2.6.20.3.orig/drivers/net/ni65.c
   +++ linux­2.6.20...
Kernel Linux 

   Ferramenta Quilt:  

              $ mkdir patches
              $ quilt new nome­do­patch.diff
        ...
Kernel Linux 

   Enviando um patch:  
      SEM anexos, patchs INLINE
      Mensagem em TEXTO PURO ( SEM HTML ) 
        ...
Kernel Linux 

   Enviando um patch (exemplo):  

      To: kerneljanitors@....
      Subject: [PATCH] ni65.c: cleanup not...
Kernel Linux 

   Instalando o código fonte: 
   Diretório padrão:
              /usr/src/linux  (Devemos usar esse path ?...
Kernel Linux

  Compilando: 

  $ make help         ajuda
  $ make mrproper     Remover todos os arquivos + .config + back...
Kernel Linux

  Compilando: 

  Opções:
             [ *   ]  ­ Habilitado (built­in)     [     ]   ­ Não esta habilitado
...
Kernel Linux

  Compilando: 

  # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz­2.6.X
             vmlinuz = Kern...
Kernel Linux

   Compilando: 

   Será necessário criar uma imagem inicial para que o kernel carregue 
   alguns módulos  ...
Kernel Linux 

   Compilando (Grub boot loader): 

         $ vi /boot/grub/menu.list


                title Kernel­2.6.X...
Kernel Linux 

   Compilando (LILO boot loader): 

   $ vi /etc/lilo/lilo.conf
      image=/boot/vmlinuz­2.6.X­default
   ...
Kernel Linux 

   Documentação:  
      linux­2.6.X/Documentation

      Linux Kernel Development 2rd Edition (Robert Love...
Dúvidas ?
                    Sugestões?

                     http://tchelinux.org
             http://dougsland.livejour...
Upcoming SlideShare
Loading in...5
×

Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf

2,581

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
2,581
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
71
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Transcript of "Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilling Landgraf "

  1. 1. Introdução ao Desenvolvimento   do Kernel Linux Versões 2.6.X   http://www.tchelinux.org Palestrante: Douglas Schilling Landgraf Email: dougsland@gmail.com
  2. 2. Kernel Linux ● Sobre o palestrante ● Sobre a palestra ● Dicas iniciais 2007­03­24
  3. 3. Kernel Linux  Onde começar ?  TODO List ? http://www.kernelnewbies.org http://br.kernelnewbies.org/ http://kerneljanitors.org http://kernelnewbies.org/KernelJanitors/Todo http://kernelnewbies.org/KernelMentors http://www.kernel.org 2007­03­24
  4. 4. Kernel Linux  Onde obter o código fonte ?  http://www.kernel.org ftp://ftp.kernel.org/pub rsync://rsync.kernel.org/pub/ 2007­03­24
  5. 5. Kernel Linux Licença:  ● GPL ( versão 2 )    http://www.gnu.org/copyleft/gpl.html Como funciona? ● Podemos baixar o software e alterar, desde que publiquemos este  software com as licenças originais, incluindo a disponibilização do  código fonte. 2007­03­24
  6. 6. Kernel Definição: ● É no kernel que estão definidas funções para operação com  periféricos (mouse, discos, impressoras, interface serial/interface  paralela, usb etc.), gerenciamento de memória, entre outros.  ● Conjunto de programas que fornece, para os programas de usuário  (aplicativos), uma interface para utilizar os recursos do sistema. 2007­03­24
  7. 7. Kernel User-Space Aplicativo 1 Aplicativo 2 System Call Interface (open, close, brk (malloc), etc.) Kernel-Space Kernel Subsystems Device Drivers Hardware 2007­03­24
  8. 8. Kernel Design: Monolítico versus MicroKernel ● Monolítico: ● Criado em meados de 1980 ● Um grande e único processo (imenso) ● Comunicação trivial (todos rodam em um único processo) ● MicroKernel: ● Separado em dois processos (“servers” / user­space) ● Comunicação via IPC (interprocess communication) ● Modularidade 2007­03­24
  9. 9. Kernel  Exemplo: Monolítico MicroKernel Kernel Kernel IPC Softwares Servers Softwares IPC = Interprocess Communication 2007­03­24
  10. 10. Kernel Linux Design:  ● Executa em um único processo ● Kernel Linux é monolítico  ● Implementa recursos do microkernel design ● Capacidade de carregar dinamicamente módulos ● Suporte a processadores SMP (symmetrical multiprocessor) ● Sistema de acesso ao dispositivos (sysfs) 2007­03­24
  11. 11. Kernel Linux  Versões:  Estáveis: ● Correções de bugs ● Novos drivers Desenvolvimento: ● Alterações frequentes e drásticas ● Desenvolvedores testam novas soluções 2007­03­24
  12. 12. Kernel Linux  Versões:    2.6.0 Versão principal é 2 Release é 0 Versão secundária é 6 (estável) Números pares = versões estáveis   Ex.: (2.0, 2.4, 2.6) Números ímpares = versões de desenvolvimento   Ex.: (1.3, 2.3, 2.5) Ex.: linux­2.6.20.3.tar.bz2 2007­03­24
  13. 13. Kernel Linux Versões, e hoje como funciona?  ● Hoje só temos a versão 2.6.X ● Decisão tomada no Linux Kernel Developers Summit ( 2004 ) ● Todas novas implementações são enviadas para o Andrew Morton  (Árvore  ­mm) ● Após tornar­se estável o patch entra na versão principal. ● Versão 2.7 ~=  Árvore ­mm 2007­03­24
  14. 14. Kernel Linux  Diretórios:  arch/ Código específico de arquitetura crypto/ API de criptografia Documentation/ Documentação drivers/ Device Drivers fs/ File systems include/ Headers init/ Kernel boot ipc/ Interprocess communication kernel/ Core do Kernel 2007­03­24
  15. 15. Kernel Linux Diretórios:  lib/ Bibliotecas   mm/ Gerenciamento de Memória net/ Sistema de Rede  scripts/ Scripts em geral security/ Subsistema de segurança sound/ Susbsistema de som usr/ initramfs 2007­03­24
  16. 16. Kernel Linux  CodingStyle:   Identação 1 TAB = 8 caracteres (!= 8 espaços) Colunas 80  if(teste) { blah(); } else {         bleh(); } if(foo) bar(); $ linux/Documentation/CodingStyle  2007­03­24
  17. 17. Kernel Linux  CodingStyle:   Funções: 1, 2 páginas? < 10 variáveis locais ? Comentários: /*       *  Olá, Eu sou um comentário!       */  Outros: typedef, structs, etc.  2007­03­24
  18. 18. Kernel Linux  CodingStyle:   Ferramenta indent: $ indent ­kr ­i8 ­ts8 ­sob ­180 ­ss ­bs ­ps1 <arquivo> ou  $ scripts/Lindent 2007­03­24
  19. 19. Kernel Linux  Compilando/Carregando/Listando/Descarregando:    Atenção aos WARNINGS $ linux/drivers/net> vi hello.c     $ linux/drivers/net> vi Makefile                                 obj­m += hello.o  $ linux/drivers/net> make ­C /usr/src/linux SUBDIRS=$PWD modules $ insmod ./modulo.ko        $ lsmod $ modprobe modulo.ko  (procura por dependências) $ rmmod modulo.ko 2007­03­24
  20. 20. Kernel Linux  hello.c   #include <linux/init.h> #include <linux/module.h> MODULE_LICENSE("Dual BSD/GPL"); static int hello_init(void) {     printk(KERN_ALERT "hello!n");     return 0; } 2007­03­24
  21. 21. Kernel Linux  hello.c   static void hello_exit(void) {      printk(KERN_ALERT "Goodbyen"); } module_init(hello_init); module_exit(hello_exit); 2007­03­24
  22. 22. Kernel Linux  Depuração com printfk():   printk() ~= printf() printk(KERN_WARNING “mensagem de warning!n”); printk(KERN_DEBUG “mensagem de debug!n”); printk(<1> “mensagem de alerta!!n”);   <linux/kernel.h>  valores das MACROS {0,1,2,3, ... 7} Prioridade:  0 ­> 7 2007­03­24
  23. 23. Kernel Linux  Ferramentas:   diff                           Ferramenta para comparar arquivos patch                       Ferramenta para aplicar patchs  quilt Scripts para manutenção de patchs   vimdiff Feramenta para comparar arquivos qemu Emulador git Controle de fontes/versões ctags Tags no código fonte cscope Navega no código fonte ketchup                   Ferramenta para atualização do kernel 2007­03­24
  24. 24. Kernel Linux  Ctags:   $ make tags $ vi .vimrc set tags=/usr/src/linux/tags :ta printk $ vim ­t printk CTRL + ] CTRL + t http://ctags.sourceforge.net. 2007­03­24
  25. 25. Kernel Linux  Ferramentas Diff e Patch:   $ diff ­ruN linux­x.y.z/ linux/ > meu­patch.diff ­r  Recursivo ­u Formato compreensivo ­N Incluir arquivos novos $ patch ­p1 < ../meu­patch.diff (diretório abaixo) ­p1  Indica qual ponto da árvore ele vai aplicar o patch linux/drivers/net/arquivo.c 2007­03­24
  26. 26. Kernel Linux  Ferramentas Diff e Patch (exemplo):   ­­­ linux­2.6.20.3.orig/drivers/net/ni65.c +++ linux­2.6.20.3/drivers/net/ni65.c @@ ­295,7 +295,7 @@ static void ni65_set_performance(struct  */  static int ni65_open(struct net_device *dev)  { ­       struct priv *p = (struct priv *) dev­>priv; +       struct priv *p = dev­>priv; 2007­03­24
  27. 27. Kernel Linux  Ferramenta Quilt:   $ mkdir patches $ quilt new nome­do­patch.diff $ quilt add nome_do_arquivo $ quilt refresh $ quilt top $ quilt diff $ quilt pop [­f] [­a] $ quilt push [­f] [­a] $ quilt remove http://savannah.nongnu.org/projects/quilt/ 2007­03­24
  28. 28. Kernel Linux  Enviando um patch:   SEM anexos, patchs INLINE Mensagem em TEXTO PURO ( SEM HTML )  ( SEM HTML ) Você testou ? Escolheu a lista certa?  O patch esta conforme o CodingStyle? Mensagem:  O que o patch faz com detalhes Assunto: [PATCH] arquivo.c  O que ele faz  Assinatura: Signed­off­by: Autor <email> No máximo um patch por email ( Depende de outro patch?) 2007­03­24
  29. 29. Kernel Linux  Enviando um patch (exemplo):   To: kerneljanitors@.... Subject: [PATCH] ni65.c: cleanup not needed casts Mensagem: Removed all unnecessary casts. Signed­off­by: Douglas Schilling Landgraf <dougsland@gmail.com> ­­­ linux­2.6.20.3.orig/drivers/net/ni65.c +++ linux­2.6.20.3/drivers/net/ni65.c @@ ­295,7 +295,7 @@ static void ni65_set_performance(struct  */  static int ni65_open(struct net_device *dev) 2007­03­24
  30. 30. Kernel Linux  Instalando o código fonte:  Diretório padrão: /usr/src/linux  (Devemos usar esse path ?) Descompactando: $ tar xvjf linux­x­y­z.tar.bz2 linux­x.y.z/Documentation/device­mapper/linear.txt linux­x.y.z/Documentation/device­mapper/snapshot.txt linux­x.y.z/Documentation/device­mapper/striped.txt 2007­03­24
  31. 31. Kernel Linux Compilando:  $ make help ajuda $ make mrproper Remover todos os arquivos + .config + backup  $ make config  modo texto  $ make menuconfig   modo texto (ncurses) $ make xconfig modo gráfico (Xwindows) $ make gconfig modo gráfico (GTK+) 2007­03­24
  32. 32. Kernel Linux Compilando:  Opções: [ *   ]  ­ Habilitado (built­in)   [     ]   ­ Não esta habilitado [ M ]   ­ Habilitado (Módulo) $ make Compilando o Kernel  $ make modules_install   Instalando os módulos 2007­03­24
  33. 33. Kernel Linux Compilando:  # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz­2.6.X vmlinuz = Kernel Linux Compactado # cp /usr/src/linux/System.map /boot/System.map­2.6.X System.map = Tabela de Símbolos # cp /usr/src/linux/.config /boot/config­2.6.X Copiar o .config para /boot (backup) 2007­03­24
  34. 34. Kernel Linux Compilando:    Será necessário criar uma imagem inicial para que o kernel carregue  alguns módulos  básicos (IDE, SCSI, RAID) antes de acessar o  filesystem.       # mkinitrd ­k /boot/vmlinuz­2.6.X ­i /boot/initrd­2.6.X ou #  mkinitrd /boot/initrd­2.6.X.img 2.6.X                  2007­03­24
  35. 35. Kernel Linux  Compilando (Grub boot loader):  $ vi /boot/grub/menu.list title Kernel­2.6.X­default      root (hd0,5)      kernel /boot/vmlinuz­2.6.X­default root=/dev/hda6  vga=0x314 resume=/dev/hda5 splash=silent showopts      initrd /boot/initrd­2.6.X­default 2007­03­24
  36. 36. Kernel Linux  Compilando (LILO boot loader):  $ vi /etc/lilo/lilo.conf image=/boot/vmlinuz­2.6.X­default label=2.6.X root=/dev/hda3 read­only $ /sbin/lilo Grava as configurações $ reboot Reiniciando o sistema $ uname ­a Exibe o kernel atual 2007­03­24
  37. 37. Kernel Linux  Documentação:   linux­2.6.X/Documentation Linux Kernel Development 2rd Edition (Robert Love)   ISBN: 0­672327201 Linux Device Drivers 3rd Edition  (Cobert, Rubini, Kroah­Hartman) ISBN: 0­596­00590­3 Versão Online (free): http://kroah.com/lkn/ Linux Weekly News http://www.lwn.net Google http://www.google.com 2007­03­24
  38. 38. Dúvidas ? Sugestões? http://tchelinux.org http://dougsland.livejournal.com Palestrante: Douglas Schilling Landgraf 2007­03­24 Email: dougsland@gmail.com
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×