SlideShare uma empresa Scribd logo
1 de 54
Baixar para ler offline
Desenvolvimento
 do Kernel Linux
        Versões 2.6.X

   http://www.tchelinux.org

  Douglas Schilling Landgraf
Email: dougsland@tchelinux.org




                          OpenOffice Template by: Chih-Hao Tsai
Kernel Linux



  ●
      Sobre o palestrante
  ●
      Sobre a palestra




30/09/07
Kernel Linux

   Dicas Iniciais:

     - Kernel não é algo místico :)
     - Máquina exclusiva para desenvolvimento (VM pode?)
     - Precisa saber inglês ?
     - Desenvolvimento não é igual ao “dia-dia”
     - Crashs repentinos ?
     - Kernel, uma coleção de rotinas ?
     - Cliente de email




30/09/07
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.




30/09/07
Kernel Linux

   Como ajudar ?


     - Você é desenvolvedor ?
     - Você NÃO tem medo de crashs ?
     - Você sabe inglês ?
     - Gosta de traduzir ?




30/09/07
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




30/09/07
Kernel Linux

   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.


  ●
      Coleção de rotinas que oferecem, recursos para programas tradicionais.




30/09/07
Kernel Linux

                               User-Space


                       Aplicativo 1    Aplicativo 2




           System Call Interface (open, close, brk (malloc), etc)

                                 Kernel-Space

                   Kernel Subsystems




                              Device Drivers


                                 Hardware


30/09/07
Kernel Linux

    Onde obter o código fonte ?
            http://www.kernel.org
            ftp://ftp.kernel.org/pub
            rsync://rsync.kernel.org/pub/



            Alguns dados:

                      ~= 9.000 arquivos C
                      ~= 10.000 headers
                      ~= 800 arquivos assembly



DADOS: Professional Linux Programming 2007



 30/09/07
Kernel Linux

   Diretórios:
           arch/            Código específico de arquitetura (i386, mk68..)
           block/           Dispositivos de bloco (e.x: HDs)
           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




30/09/07
Kernel Linux

   Diretórios:
           lib/        Bibliotecas
           mm/         Gerenciamento de Memória
           net/        Sistema de Rede
           scripts/    Scripts de configuração
           security/   Subsistema de segurança (SELinux)
           sound/      Susbsistema de som (ALSA/OSS)
           usr/        initramfs




30/09/07
Kernel Linux

   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




30/09/07
Kernel

    Exemplo:

         Monolítico                      MicroKernel


            Kernel                           Kernel



                                                  IPC
         Softwares

                                   Servers              Softwares




IPC = Interprocess Communication


 30/09/07
Kernel Linux

  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)




30/09/07
Kernel Linux

   Versões:

    Estáveis:
                ●
                    Correções de bugs
                ●
                    Novos drivers

    Desenvolvimento:
              Alterações frequentes e drásticas
                ●



              Desenvolvedores testam novas soluções
                ●




30/09/07
Kernel Linux

   Versões:
                                   2.6.0
    Versão principal é 2                         Release é 0

                        Versão secundária é 6 (estável)

   No passado como eram as versões ?

           Números pares = versões estáveis
                 Ex.: (2.0, 2.4)

           Números ímpares = versões de desenvolvimento
                  Ex.: (1.3, 2.3)
                                                    Ex.: linux-2.6.20.3.tar.bz2


30/09/07
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




30/09/07
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



 30/09/07
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.




30/09/07
Kernel Linux

   CodingStyle:

           Ferramenta indent:

           $ indent -kr -i8 -ts8 -sob -180 -ss -bs -ps1 <arquivo>

           ou

           $ scripts/Lindent




30/09/07
Kernel Linux

   Kbuild (compilação):

       Kbuild é um framework para escrever Makefiles simples para tarefas
       complicadas. :)


       - Economiza nosso tempo
       - Comportamento similar em todas as plataformas suportadas
       - Internamente ele se basea em complexos templates
       - Atualmente poucas pessoas realmente sabem como ele funciona




30/09/07
Kernel Linux

   Kbuild (exemplo):

   Módulos externos

            make -C <path> M=`pwd`


   Módulos (Kernel que esta em execução)

            make -C /lib/modules/`uname -r`/build M=`pwd`




30/09/07
Kernel Linux

   Compilando/Carregando/Listando/Descarregando:

                                                 Atenção aos WARNINGS

   $ linux/drivers/net> vi hello.c
   $ linux/drivers/net> vi Makefile


           $ insmod ./hello.ko
           $ modprobe hello.ko (procura por dependências)

           $ lsmod (lista os módulos carregados em memória)

           $ modinfo ./hello.ko
           $ modprobe -r hello
           $ rmmod hello.ko


30/09/07
Kernel Linux

   hello.c

   #include <linux/init.h>
   #include <linux/module.h>

   static int __init hello_init(void)
   {
      printk(KERN_ALERT "hello!n");
      return 0;
   }




30/09/07
Kernel Linux

   hello.c                                  Onde esta o main() ? :)

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

   MODULE_LICENSE("GPL");
   MODULE_AUTHOR("Douglas Landgaf <dougslan@tchelinux.org>");
   MODULE_DESCRIPTION("Um modulo hello world!");

   module_init(hello_init);
   module_exit(hello_exit);




30/09/07
Kernel Linux

   hello.c

           E para adicionar parâmetros ?

           module_param(io, int, 0);
           MODULE_PARM_DESC(io, "Informa o io do modulo! ");

           $ insmod ./hello io=0x300




30/09/07
Kernel Linux

   hello.c

           Exportando Símbolos

           O kernel tem centenas de funções e estruturas globais
           Responsável: /boot/System.map-versao-kernel

                /proc/kallsyms

           Module.symvers – informa os símbolos visiveis

           shell> cat /lib/modules/`uname -r`/build/Module.symvers | wc -l

           EXPORT_SYMBOL(funcao);
           EXPORT_SYMBOL_GPL(funcao);


30/09/07
Kernel Linux

   hello.c


           Como adicionar uma entrada no /proc ?

           create_proc_read_entry()
           remove_proc_entry()




30/09/07
Kernel Linux

   hello.c


   Como adicionar uma entrada no /dev e /sys ?


       KERNEL =”hello” executa o resto das regras quando
       aparecer hello /sys

       SYMLINK += (append) adicionar hello_world na lista de
       símbolos que devem ser criados

       MODE = 0444 – permite (dono, group e outros lerem)




30/09/07
Kernel Linux

   Interfaces com o Kernel

           Externas:

               - System Calls
               - Interface entre (userspace) e o Kernel
               - Solicitações de acesso via system calls
               - /proc e /sys
           Internas:

               - Símbolos exportados pelos módulos (EXPORT_SYMBOL)
                - Ex.: printk – chamadas pública




30/09/07
Kernel Linux

   System Calls (trace)

           - Faz o trace das chamadas de sistemas (system calls)
           - ptrace()

           $ strace ls
           $ strace -o saida.txt kradio


                 (programa) -> (open) GLIBC /lib/libc.so.6 -> (sys_open)




30/09/07
Kernel Linux

   Sistema de log - Timestamps
           Kernel hacking
               [*] Show timing information on printks


   Magic SysRq Keys

           Tecla SysRq pode atribuir funções durante a execução ou
           travamento.

            1. Alt + SysRq + R – takes the keyboard out of raw mode.
            2. Alt + SysRq + E – terminates all processes (except init).
            3. Alt + SysRq + I – kills all processes (except init).
            4. Alt + SysRq + S – synchronizes the disk.
            5. Alt + SysRq + U – remounts all filesystems read-only.
            6. Alt + SysRq + B – reboots the machine.


30/09/07
Kernel Linux

   Sistema de log - printk():


     Sistema de log via /proc/kmsg
     Klog -> /proc/kmsg -> syslogd

                        printk() ~= printf()




30/09/07
Kernel Linux

   Sistema de log - printk():


     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




30/09/07
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
     hg           Mercurial
     ctags        Tags no código fonte
     cscope       Navega no código fonte
     ketchup      Ferramenta para atualização do kernel




30/09/07
Kernel Linux
                                                       Autor: Linus Torvalds.
 git / gitk:
                                                       Mantenedor: Junio Hamano
    Clonando árvore do Linus:
    $ git clone

    Manter árvore atualizada:
    $ git pull

    Fazer um Commit:
    $ git commit

    Log:
    $ git log

           $ git init-db / $git add . / git commit / git remove / git diff
           $ git branch teste / $git checkout teste



30/09/07
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.
30/09/07
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




30/09/07
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;




30/09/07
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/

30/09/07
Kernel Linux

   Assinaturas em patches:

       Signed-off-by: Assinatura
       Signed-off-by: Douglas Landgraf <dougsland@gmail.com>

       Acked-by: OK, sem problemas
       Acked-by: Douglas Landgraf <dougsland@gmail.com>


       Reviewed-by: Análise / Teste
       Reviewed-by: Douglas Landgraf <dougsland@gmail.com>




30/09/07
Kernel Linux

   Enviando um patch:

     SEM anexos, patchs INLINE
     Mensagem em TEXTO PURO ( 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?)


30/09/07
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)




30/09/07
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

  .config - O que é ?
           $ /proc/config.gz
           $ /boot/config-2-6-x-y-z



30/09/07
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+)




30/09/07
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
           ou
    $ make modules_install INSTALL_MOD_PATH=/tmp


    $ depmod -a 2.6.x.y          Disponibilizar módulos
                                 para modprobe




30/09/07
Kernel Linux

   Compilando (Cross-Compilation):

  Exemplo 1:
  $> export CROSS_COMPILE=”powerpc-cross-compile-aqui”
  $> ARCH=powerpc make menuconfig
  $> ARCH=powerpc make


  Exemplo 2:
  $> make ARCH=x86_64 defconfig
  $> make ARCH=arm CROSS_COMPILE=/usr/local/bin/arm-linux-




30/09/07
Kernel Linux

   Compilando:

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

  # cp /usr/src/linux/.config /boot/config-2.6.X
           Copiar o .config para /boot (backup)




30/09/07
Kernel Linux

   Compilando:

   # cp /usr/src/linux/System.map /boot/System.map-2.6.X

   System.map contém:

           * Tabela de símbolos exportados (usados na depuração)
           * A ferramenta top utiliza essa tabela




30/09/07
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




30/09/07
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




30/09/07
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




30/09/07
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


30/09/07
Dúvidas ?
                 Sugestões?
                   http://tchelinux.org
           http://dougsland.livejournal.com

             Douglas Schilling Landgraf
           Email: dougsland@tchelinux.org




30/09/07

Mais conteúdo relacionado

Mais procurados (20)

Núcleo do Linux (Kernel Linux)
Núcleo do Linux (Kernel Linux)Núcleo do Linux (Kernel Linux)
Núcleo do Linux (Kernel Linux)
 
Linux - Sobre a Disciplina + Introdução ao Linux
Linux - Sobre a Disciplina + Introdução ao LinuxLinux - Sobre a Disciplina + Introdução ao Linux
Linux - Sobre a Disciplina + Introdução ao Linux
 
Linux
LinuxLinux
Linux
 
Apresentação Final
Apresentação FinalApresentação Final
Apresentação Final
 
Arch Linux – Simplesmente Linux
Arch Linux – Simplesmente LinuxArch Linux – Simplesmente Linux
Arch Linux – Simplesmente Linux
 
Introdução ao Linux - aula 01
Introdução ao Linux - aula 01Introdução ao Linux - aula 01
Introdução ao Linux - aula 01
 
Aula 1 sistema operacional linux
Aula 1 sistema operacional linuxAula 1 sistema operacional linux
Aula 1 sistema operacional linux
 
Aula 2 Mini Curso de Linux
Aula 2 Mini Curso de LinuxAula 2 Mini Curso de Linux
Aula 2 Mini Curso de Linux
 
Distribuição Linux fedora
Distribuição Linux fedoraDistribuição Linux fedora
Distribuição Linux fedora
 
Introducao ao linux
Introducao ao linuxIntroducao ao linux
Introducao ao linux
 
Introdução ao Linux - aula 02
Introdução ao Linux - aula 02Introdução ao Linux - aula 02
Introdução ao Linux - aula 02
 
IntroduçãO Ao Linux
IntroduçãO Ao LinuxIntroduçãO Ao Linux
IntroduçãO Ao Linux
 
Linux para leigos
Linux para leigos Linux para leigos
Linux para leigos
 
História do linux ppt
História do linux pptHistória do linux ppt
História do linux ppt
 
Introdução Linux
Introdução LinuxIntrodução Linux
Introdução Linux
 
Kernel do Linux
Kernel do LinuxKernel do Linux
Kernel do Linux
 
Mandriva - Sistema Operacional
Mandriva - Sistema OperacionalMandriva - Sistema Operacional
Mandriva - Sistema Operacional
 
Sistemas Operativos - Linux
Sistemas Operativos - LinuxSistemas Operativos - Linux
Sistemas Operativos - Linux
 
08 red hat - tarcisio
08   red hat - tarcisio08   red hat - tarcisio
08 red hat - tarcisio
 
Conhecendo Melhor O Linux
Conhecendo Melhor O LinuxConhecendo Melhor O Linux
Conhecendo Melhor O Linux
 

Destaque (9)

Fibromialgia
FibromialgiaFibromialgia
Fibromialgia
 
A2760 04 proposed elevations
A2760 04 proposed elevationsA2760 04 proposed elevations
A2760 04 proposed elevations
 
Anatomia del dolor
Anatomia del dolorAnatomia del dolor
Anatomia del dolor
 
Semiología - dolor
Semiología - dolor Semiología - dolor
Semiología - dolor
 
Anatomía y fisiología del dolor.
Anatomía y fisiología del dolor.Anatomía y fisiología del dolor.
Anatomía y fisiología del dolor.
 
Dolor
DolorDolor
Dolor
 
Semiologia del dolor
Semiologia del dolorSemiologia del dolor
Semiologia del dolor
 
Dolor (fisiologia y mecanismos)
Dolor (fisiologia y mecanismos)Dolor (fisiologia y mecanismos)
Dolor (fisiologia y mecanismos)
 
Fisiologia Del Dolor
Fisiologia Del DolorFisiologia Del Dolor
Fisiologia Del Dolor
 

Semelhante a Desenvolvimento do Kernel Linux Versões 2.6.X

Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...Tchelinux
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2Daniel
 
(01) intro+inicializacao+boot loader+fhs
(01) intro+inicializacao+boot loader+fhs(01) intro+inicializacao+boot loader+fhs
(01) intro+inicializacao+boot loader+fhsAnderson Lago
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux EmbarcadoDiego Sueiro
 
Aspectos do kernel Linux e Instalação
Aspectos do kernel Linux e InstalaçãoAspectos do kernel Linux e Instalação
Aspectos do kernel Linux e InstalaçãoMauro Tapajós
 
Mini-curso de Linux na CPRecife2
Mini-curso de Linux na CPRecife2Mini-curso de Linux na CPRecife2
Mini-curso de Linux na CPRecife2Adriano Melo
 
Sistemas Operacionais.pptx
Sistemas Operacionais.pptxSistemas Operacionais.pptx
Sistemas Operacionais.pptxstenio medeiros
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsFernando Mercês
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Leo Amorim
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1Leo Amorim
 
01.01 - Introdução ao Linux.pdf
01.01 - Introdução ao Linux.pdf01.01 - Introdução ao Linux.pdf
01.01 - Introdução ao Linux.pdfSergio778021
 
Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Adriano Melo
 
Complemento rodrigo f ormatado
Complemento rodrigo f ormatadoComplemento rodrigo f ormatado
Complemento rodrigo f ormatadoNeon Online
 
Aula 1 Mini Curso de Linux
Aula 1 Mini Curso de LinuxAula 1 Mini Curso de Linux
Aula 1 Mini Curso de LinuxRogério Cardoso
 

Semelhante a Desenvolvimento do Kernel Linux Versões 2.6.X (20)

Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
Introdução ao Desenvolvimento do Kernel Linux Versões 2.6.X - Douglas Schilli...
 
Linux4all#2
Linux4all#2Linux4all#2
Linux4all#2
 
(01) intro+inicializacao+boot loader+fhs
(01) intro+inicializacao+boot loader+fhs(01) intro+inicializacao+boot loader+fhs
(01) intro+inicializacao+boot loader+fhs
 
1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado1º IoT Day - O que é Linux Embarcado
1º IoT Day - O que é Linux Embarcado
 
Minicurso GNU/Linux
Minicurso GNU/LinuxMinicurso GNU/Linux
Minicurso GNU/Linux
 
Aspectos do kernel Linux e Instalação
Aspectos do kernel Linux e InstalaçãoAspectos do kernel Linux e Instalação
Aspectos do kernel Linux e Instalação
 
Mini-curso de Linux na CPRecife2
Mini-curso de Linux na CPRecife2Mini-curso de Linux na CPRecife2
Mini-curso de Linux na CPRecife2
 
Sistemas Operacionais.pptx
Sistemas Operacionais.pptxSistemas Operacionais.pptx
Sistemas Operacionais.pptx
 
O kernel do linux
O kernel do linuxO kernel do linux
O kernel do linux
 
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux SystemsLinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
LinuxCon 2010: Tutorial - Reverse Engineering on GNU/Linux Systems
 
Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1Aula - Comandos Linux - Parte 1
Aula - Comandos Linux - Parte 1
 
Comandos Linux Parte 1
Comandos Linux Parte 1Comandos Linux Parte 1
Comandos Linux Parte 1
 
Linux como funciona esta fera
Linux como funciona esta feraLinux como funciona esta fera
Linux como funciona esta fera
 
S.o iuras
S.o iurasS.o iuras
S.o iuras
 
Windows x Linux - O que preciso saber!
Windows x Linux - O que preciso saber!Windows x Linux - O que preciso saber!
Windows x Linux - O que preciso saber!
 
01.01 - Introdução ao Linux.pdf
01.01 - Introdução ao Linux.pdf01.01 - Introdução ao Linux.pdf
01.01 - Introdução ao Linux.pdf
 
Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)Linux Desktop (Campus Party Recife)
Linux Desktop (Campus Party Recife)
 
Sistema operacional-1-ano-de-informatica-completa
Sistema operacional-1-ano-de-informatica-completaSistema operacional-1-ano-de-informatica-completa
Sistema operacional-1-ano-de-informatica-completa
 
Complemento rodrigo f ormatado
Complemento rodrigo f ormatadoComplemento rodrigo f ormatado
Complemento rodrigo f ormatado
 
Aula 1 Mini Curso de Linux
Aula 1 Mini Curso de LinuxAula 1 Mini Curso de Linux
Aula 1 Mini Curso de Linux
 

Mais de Tchelinux

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Tchelinux
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeTchelinux
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Tchelinux
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Tchelinux
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeTchelinux
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...Tchelinux
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Tchelinux
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...Tchelinux
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Tchelinux
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeTchelinux
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeTchelinux
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Tchelinux
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...Tchelinux
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...Tchelinux
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Tchelinux
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Tchelinux
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.Tchelinux
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Tchelinux
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygameTchelinux
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Tchelinux
 

Mais de Tchelinux (20)

Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
Do Zero ao YouTube em menos de 10 softwares livres - Vinícius Alves Hax - Tch...
 
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio GrandeInsegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
Insegurança na Internet - Diego Luiz Silva da Costa - Tchelinux 2019 Rio Grande
 
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
Explorando Editores de Texto Open Source - Gabriel Prestes Ritta - Tchelinux ...
 
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
Desenvolvendo Jogos com PyGame - Jerônimo Medina Madruga - Tchelinux 2019 Rio...
 
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio GrandeMe formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
Me formei. E agora? - Matheus Cezar - Tchelinux 2019 Rio Grande
 
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
APIs, REST e RESTful: O que os programadores precisam saber? - Marcos Echevar...
 
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
Shell Script: Seu melhor amigo na automatização de instalações e configuraçõe...
 
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
WebRTC: Comunicação aberta em tempo real - Nelson Dutra Junior - Tchelinux 20...
 
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
Introdução à programação funcional com Clojure - Victor Hechel Colares - Tche...
 
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio GrandeConstruindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
Construindo um Data Warehouse - Vítor Resing Plentz - Tchelinux 2019 Rio Grande
 
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio GrandeBikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
Bikeshedding - Márcio Josué Ramos Torres - Tchelinux 2019 Rio Grande
 
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
Produção de textos com Latex - Samuel Francisco Ferrigo - Tchelinux Caxias do...
 
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
A tecnologia no futuro e nas mãos de quem ela estará - Jaqueline Trevizan, Ne...
 
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
oVirt uma solução de virtualização distribuída opensource - Daniel Lara - Tch...
 
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
Sistemas Embarcados e Buildroot - Renato Severo - Tchelinux Caxias do Sul 2019
 
Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.Com que ônibus eu vou? Uma gentil introdução ao Python.
Com que ônibus eu vou? Uma gentil introdução ao Python.
 
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
O TCC... um dia ele chega! (The beautiful and easy LaTeX way.
 
Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes. Não deixe para testar depois o que você pode testar antes.
Não deixe para testar depois o que você pode testar antes.
 
Desenvolvendo jogos com pygame
Desenvolvendo jogos com pygameDesenvolvendo jogos com pygame
Desenvolvendo jogos com pygame
 
Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?Essa câmera faz fotos muito boas, né?
Essa câmera faz fotos muito boas, né?
 

Desenvolvimento do Kernel Linux Versões 2.6.X

  • 1. Desenvolvimento do Kernel Linux Versões 2.6.X http://www.tchelinux.org Douglas Schilling Landgraf Email: dougsland@tchelinux.org OpenOffice Template by: Chih-Hao Tsai
  • 2. Kernel Linux ● Sobre o palestrante ● Sobre a palestra 30/09/07
  • 3. Kernel Linux Dicas Iniciais: - Kernel não é algo místico :) - Máquina exclusiva para desenvolvimento (VM pode?) - Precisa saber inglês ? - Desenvolvimento não é igual ao “dia-dia” - Crashs repentinos ? - Kernel, uma coleção de rotinas ? - Cliente de email 30/09/07
  • 4. 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. 30/09/07
  • 5. Kernel Linux Como ajudar ? - Você é desenvolvedor ? - Você NÃO tem medo de crashs ? - Você sabe inglês ? - Gosta de traduzir ? 30/09/07
  • 6. 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 30/09/07
  • 7. Kernel Linux 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. ● Coleção de rotinas que oferecem, recursos para programas tradicionais. 30/09/07
  • 8. Kernel Linux User-Space Aplicativo 1 Aplicativo 2 System Call Interface (open, close, brk (malloc), etc) Kernel-Space Kernel Subsystems Device Drivers Hardware 30/09/07
  • 9. Kernel Linux Onde obter o código fonte ? http://www.kernel.org ftp://ftp.kernel.org/pub rsync://rsync.kernel.org/pub/ Alguns dados: ~= 9.000 arquivos C ~= 10.000 headers ~= 800 arquivos assembly DADOS: Professional Linux Programming 2007 30/09/07
  • 10. Kernel Linux Diretórios: arch/ Código específico de arquitetura (i386, mk68..) block/ Dispositivos de bloco (e.x: HDs) 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 30/09/07
  • 11. Kernel Linux Diretórios: lib/ Bibliotecas mm/ Gerenciamento de Memória net/ Sistema de Rede scripts/ Scripts de configuração security/ Subsistema de segurança (SELinux) sound/ Susbsistema de som (ALSA/OSS) usr/ initramfs 30/09/07
  • 12. Kernel Linux 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 30/09/07
  • 13. Kernel Exemplo: Monolítico MicroKernel Kernel Kernel IPC Softwares Servers Softwares IPC = Interprocess Communication 30/09/07
  • 14. Kernel Linux 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) 30/09/07
  • 15. Kernel Linux Versões: Estáveis: ● Correções de bugs ● Novos drivers Desenvolvimento: Alterações frequentes e drásticas ● Desenvolvedores testam novas soluções ● 30/09/07
  • 16. Kernel Linux Versões: 2.6.0 Versão principal é 2 Release é 0 Versão secundária é 6 (estável) No passado como eram as versões ? Números pares = versões estáveis Ex.: (2.0, 2.4) Números ímpares = versões de desenvolvimento Ex.: (1.3, 2.3) Ex.: linux-2.6.20.3.tar.bz2 30/09/07
  • 17. 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 30/09/07
  • 18. 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 30/09/07
  • 19. 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. 30/09/07
  • 20. Kernel Linux CodingStyle: Ferramenta indent: $ indent -kr -i8 -ts8 -sob -180 -ss -bs -ps1 <arquivo> ou $ scripts/Lindent 30/09/07
  • 21. Kernel Linux Kbuild (compilação): Kbuild é um framework para escrever Makefiles simples para tarefas complicadas. :) - Economiza nosso tempo - Comportamento similar em todas as plataformas suportadas - Internamente ele se basea em complexos templates - Atualmente poucas pessoas realmente sabem como ele funciona 30/09/07
  • 22. Kernel Linux Kbuild (exemplo): Módulos externos make -C <path> M=`pwd` Módulos (Kernel que esta em execução) make -C /lib/modules/`uname -r`/build M=`pwd` 30/09/07
  • 23. Kernel Linux Compilando/Carregando/Listando/Descarregando: Atenção aos WARNINGS $ linux/drivers/net> vi hello.c $ linux/drivers/net> vi Makefile $ insmod ./hello.ko $ modprobe hello.ko (procura por dependências) $ lsmod (lista os módulos carregados em memória) $ modinfo ./hello.ko $ modprobe -r hello $ rmmod hello.ko 30/09/07
  • 24. Kernel Linux hello.c #include <linux/init.h> #include <linux/module.h> static int __init hello_init(void) { printk(KERN_ALERT "hello!n"); return 0; } 30/09/07
  • 25. Kernel Linux hello.c Onde esta o main() ? :) static void __exit hello_exit(void) { printk(KERN_ALERT "Goodbyen"); } MODULE_LICENSE("GPL"); MODULE_AUTHOR("Douglas Landgaf <dougslan@tchelinux.org>"); MODULE_DESCRIPTION("Um modulo hello world!"); module_init(hello_init); module_exit(hello_exit); 30/09/07
  • 26. Kernel Linux hello.c E para adicionar parâmetros ? module_param(io, int, 0); MODULE_PARM_DESC(io, "Informa o io do modulo! "); $ insmod ./hello io=0x300 30/09/07
  • 27. Kernel Linux hello.c Exportando Símbolos O kernel tem centenas de funções e estruturas globais Responsável: /boot/System.map-versao-kernel /proc/kallsyms Module.symvers – informa os símbolos visiveis shell> cat /lib/modules/`uname -r`/build/Module.symvers | wc -l EXPORT_SYMBOL(funcao); EXPORT_SYMBOL_GPL(funcao); 30/09/07
  • 28. Kernel Linux hello.c Como adicionar uma entrada no /proc ? create_proc_read_entry() remove_proc_entry() 30/09/07
  • 29. Kernel Linux hello.c Como adicionar uma entrada no /dev e /sys ? KERNEL =”hello” executa o resto das regras quando aparecer hello /sys SYMLINK += (append) adicionar hello_world na lista de símbolos que devem ser criados MODE = 0444 – permite (dono, group e outros lerem) 30/09/07
  • 30. Kernel Linux Interfaces com o Kernel Externas: - System Calls - Interface entre (userspace) e o Kernel - Solicitações de acesso via system calls - /proc e /sys Internas: - Símbolos exportados pelos módulos (EXPORT_SYMBOL) - Ex.: printk – chamadas pública 30/09/07
  • 31. Kernel Linux System Calls (trace) - Faz o trace das chamadas de sistemas (system calls) - ptrace() $ strace ls $ strace -o saida.txt kradio (programa) -> (open) GLIBC /lib/libc.so.6 -> (sys_open) 30/09/07
  • 32. Kernel Linux Sistema de log - Timestamps Kernel hacking [*] Show timing information on printks Magic SysRq Keys Tecla SysRq pode atribuir funções durante a execução ou travamento. 1. Alt + SysRq + R – takes the keyboard out of raw mode. 2. Alt + SysRq + E – terminates all processes (except init). 3. Alt + SysRq + I – kills all processes (except init). 4. Alt + SysRq + S – synchronizes the disk. 5. Alt + SysRq + U – remounts all filesystems read-only. 6. Alt + SysRq + B – reboots the machine. 30/09/07
  • 33. Kernel Linux Sistema de log - printk(): Sistema de log via /proc/kmsg Klog -> /proc/kmsg -> syslogd printk() ~= printf() 30/09/07
  • 34. Kernel Linux Sistema de log - printk(): 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 30/09/07
  • 35. 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 hg Mercurial ctags Tags no código fonte cscope Navega no código fonte ketchup Ferramenta para atualização do kernel 30/09/07
  • 36. Kernel Linux Autor: Linus Torvalds. git / gitk: Mantenedor: Junio Hamano Clonando árvore do Linus: $ git clone Manter árvore atualizada: $ git pull Fazer um Commit: $ git commit Log: $ git log $ git init-db / $git add . / git commit / git remove / git diff $ git branch teste / $git checkout teste 30/09/07
  • 37. 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. 30/09/07
  • 38. 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 30/09/07
  • 39. 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; 30/09/07
  • 40. 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/ 30/09/07
  • 41. Kernel Linux Assinaturas em patches: Signed-off-by: Assinatura Signed-off-by: Douglas Landgraf <dougsland@gmail.com> Acked-by: OK, sem problemas Acked-by: Douglas Landgraf <dougsland@gmail.com> Reviewed-by: Análise / Teste Reviewed-by: Douglas Landgraf <dougsland@gmail.com> 30/09/07
  • 42. Kernel Linux Enviando um patch: SEM anexos, patchs INLINE Mensagem em TEXTO PURO ( 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?) 30/09/07
  • 43. 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) 30/09/07
  • 44. 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 .config - O que é ? $ /proc/config.gz $ /boot/config-2-6-x-y-z 30/09/07
  • 45. 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+) 30/09/07
  • 46. 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 ou $ make modules_install INSTALL_MOD_PATH=/tmp $ depmod -a 2.6.x.y Disponibilizar módulos para modprobe 30/09/07
  • 47. Kernel Linux Compilando (Cross-Compilation): Exemplo 1: $> export CROSS_COMPILE=”powerpc-cross-compile-aqui” $> ARCH=powerpc make menuconfig $> ARCH=powerpc make Exemplo 2: $> make ARCH=x86_64 defconfig $> make ARCH=arm CROSS_COMPILE=/usr/local/bin/arm-linux- 30/09/07
  • 48. Kernel Linux Compilando: # cp /usr/src/linux/arch/i386/boot/bzImage /boot/vmlinuz-2.6.X vmlinuz = Kernel Linux Compactado # cp /usr/src/linux/.config /boot/config-2.6.X Copiar o .config para /boot (backup) 30/09/07
  • 49. Kernel Linux Compilando: # cp /usr/src/linux/System.map /boot/System.map-2.6.X System.map contém: * Tabela de símbolos exportados (usados na depuração) * A ferramenta top utiliza essa tabela 30/09/07
  • 50. 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 30/09/07
  • 51. 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 30/09/07
  • 52. 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 30/09/07
  • 53. 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 30/09/07
  • 54. Dúvidas ? Sugestões? http://tchelinux.org http://dougsland.livejournal.com Douglas Schilling Landgraf Email: dougsland@tchelinux.org 30/09/07