Desenvolvendo	
  Sistemas	
  de	
  
    Linux	
  Embarcado	
  
       Marcelo	
  Veiga	
  Neves	
  
            marcelo.veiga@gmail.com	
  



                    Tchelinux	
  2009	
  
        Porto	
  Alegre,	
  14	
  de	
  novembro	
  de	
  2009	
  
Roteiro	
  
•    Introdução	
  
•    Projeto	
  de	
  Linux	
  Embarcado	
  
•    Demonstração	
  
•    Referências	
  




                                                  1	
  
Roteiro	
  
•  Introdução	
  
    –  Sistemas	
  Embarcados	
  
    –  Linux	
  Embarcado	
  
    –  Exemplo	
  de	
  Hardware	
  para	
  Sistemas	
  Embarcados	
  
    –  Inicialização	
  do	
  Linux	
  em	
  Sistemas	
  Embarcados	
  
•  Projeto	
  de	
  Linux	
  Embarcado	
  
•  Demonstração	
  
•  Referências	
  




                                                                          2	
  
Introdução	
  
•  ObjeRvos:	
  
    –  Compreender	
  o	
  funcionamento	
  de	
  um	
  Sistema	
  de	
  Linux	
  
       Embarcado	
  
    –  Quais	
  os	
  componentes	
  de	
  soVware	
  precisam	
  ser	
  
       preparados	
  
    –  Como	
  criar	
  um	
  Linux	
  Embarcado	
  completo	
  

•  Pré-­‐requisitos:	
  
    –  Compreensão	
  do	
  papel	
  e	
  funcionamento	
  do	
  Kernel	
  do	
  
       Linux	
  
    –  Familiaridade	
  com	
  ambiente	
  de	
  desenvolvimento	
  Linux	
  

                                                                                     3	
  
Sistemas	
  Embarcados	
  
•  Definição	
  de	
  Sistema	
  Embarcado:	
  
     “Um	
  sistema	
  embarcado	
  é	
  um	
  computador	
  que	
  é	
  
     completamente	
  encapsulado	
  ou	
  dedicado	
  ao	
  
     disposiRvo	
  ou	
  sistema	
  que	
  ele	
  controla.”	
  (Wikipedia)	
  


•  Requisitos/CaracterísRcas	
  de	
  Sistemas	
  Embarcados	
  
    –  Recursos	
  reduzidos	
  (CPU,	
  memória,	
  energia,	
  etc.)	
  
    –  Armazenamento	
  de	
  estado	
  sólido	
  (flash)	
  
    –  Operação	
  “Head	
  less”	
  (sem	
  display)	
  
    –  Etc.	
  

                                                                                  4	
  
Linux	
  Embarcado	
  
•  Não	
  é	
  apenas	
  o	
  Kernel	
  
•  SoVware	
  necessário	
  para	
  o	
  Linux	
  funcionar	
  em	
  
   um	
  Sistema	
  Embarcado	
  
   – Aplicações	
  para	
  prover	
  funcionalidades	
  específicas	
  
     do	
  sistema	
  
   – Kernel	
  com	
  configuração	
  específica	
  
   – Bootloader	
  para	
  configurar	
  o	
  hardware	
  e	
  iniciar	
  o	
  
     sistema	
  operacional	
  


                                                                            5	
  
Exemplo	
  de	
  Hardware	
  para	
  Sistema	
  Embarcado	
  


•  Kit	
  de	
  desenvolvimento:	
  Freescale	
  
   MPC8313E-­‐RDB	
  

•  PowerPC	
  PowerQUICC	
  II	
  PRO	
  
   MPC8313E	
  (a	
  333/133	
  MHz)	
  
•  128	
  MByte	
  DDR2	
  
•  32	
  MByte	
  NAND	
  Flash	
  




                                                             6	
  
7	
  
Inicialização	
  do	
  Linux	
  




                                   8	
  
O	
  que	
  precisa	
  ser	
  preparado?	
  




                                               9	
  
O	
  que	
  precisa	
  ser	
  preparado?	
  




                                               10	
  
O	
  que	
  precisa	
  ser	
  preparado?	
  




                                               11	
  
O	
  que	
  precisa	
  ser	
  preparado?	
  




                                               12	
  
O	
  que	
  precisa	
  ser	
  preparado?	
  




                                               13	
  
O	
  que	
  precisa	
  ser	
  preparado?	
  




                                               14	
  
Roteiro	
  
•  Introdução	
  
•  Projeto	
  de	
  Linux	
  Embarcado	
  
    –  Toolchain	
  
    –  Bootloader	
  
    –  Kernel	
  
    –  Root	
  Filesystem	
  
•  Demonstração	
  
•  Considerações	
  Finais	
  




                                                15	
  
Toolchain	
  
•  Conjunto	
  de	
  ferramentas	
  necessárias	
  para	
  compilar	
  (ou	
  cross-­‐
   compilar)	
  um	
  sistema	
  Linux	
  

•  Componentes:	
  
     –  BinuRls	
  (as,	
  ld,	
  ar,	
  ramlib,	
  strip,	
  etc.)	
  
     –  Kernel	
  headers	
  (#include	
  <linux/*>,	
  <asm/*>,	
  etc.)	
  
     –  Compilador	
  C	
  (GCC)	
  
     –  Biblioteca	
  C	
  (glibc,	
  uClibc,	
  dietlibc,	
  etc.)	
  

•  Opções	
  para	
  geração	
  de	
  toolchain:	
  
     –  Gerar	
  manualmente	
  (compilando	
  cada	
  pacote)	
  
     –  Obter	
  uma	
  cópia	
  pré-­‐compilada	
  
     –  URlizar	
  uma	
  ferramenta	
  de	
  geração	
  (crosstool-­‐ng,	
  buildroot,	
  PTXdist,	
  
        OpenEmbedded,	
  etc.)	
  

                                                                                                          16	
  
Exemplo:	
  Buildroot	
  
•  Exemplo	
  de	
  geração:	
  

        $	
  git	
  clone	
  git://git.buildroot.net/buildroot	
  
        $	
  cd	
  buildroot	
  
        $	
  make	
  menuconfig	
  #	
  Configurar	
  geração	
  do	
  toolchain	
  
        $	
  make	
  
        $	
  ls	
  output/stagging/*	
  #	
  Conteúdo	
  do	
  toolchain	
  

•  Configurar	
  ambiente:	
  
        $	
  export	
  PATH:/path/to/buildroot/output/stagging/usr/bin:$PATH	
  
        $	
  export	
  CROSS_COMPILE=powerpc-­‐linux-­‐uclibc-­‐	
  
        #	
  Teste	
  de	
  compilação	
  
        $	
  powerpc-­‐linux-­‐uclibc-­‐gcc	
  –o	
  hello	
  helloworld.c	
  




                                                                                     17	
  
Exemplo:	
  Buildroot	
  



                 Demo!	
  
(Geração	
  de	
  toolchain	
  com	
  o	
  Buildroot)	
  




                                                            18	
  
Roteiro	
  
•  Introdução	
  
•  Projeto	
  de	
  Linux	
  Embarcado	
  
    –  Toolchain	
  
    –  Bootloader	
  
    –  Kernel	
  
    –  Root	
  Filesystem	
  
•  Demonstração	
  
•  Referências	
  




                                                19	
  
Bootloader	
  
•  Primeiro	
  soVware	
  que	
  executa	
  
   quando	
  o	
  hardware	
  é	
  ligado	
  

•  Responsável	
  por	
  carregar	
  e	
  
   transferir	
  o	
  controle	
  para	
  o	
  
   Kernel	
  
•  Para	
  isso:	
  
     –  Configura	
  o	
  hardware	
  
     –  Oferece	
  comandos	
  para	
  
        configuração	
  e	
  diagnósRco	
  


                                                  20	
  
Bootloaders	
  




Fonte:	
  h~p://www.elinux.org/Bootloader,	
  13/11/09	
  	
     21	
  
Bootloaders	
  




Fonte:	
  h~p://www.elinux.org/Bootloader,	
  13/11/09	
  	
     22	
  
Exemplo:	
  U-­‐Boot	
  
•  Exemplo	
  de	
  compilação:	
  
                  $	
  git	
  clone	
  git://git.denx.de/u-­‐boot	
  
                  $	
  cd	
  u-­‐boot	
  
                  $	
  export	
  CROSS_COMPILE=powerpc-­‐linux-­‐uclibc-­‐	
  
                  $	
  make	
  clobber	
  
                  $	
  make	
  MPC8313ERDB_33_config	
  #	
  Configuração	
  para	
  a	
  placa	
  
                  $	
  make	
  
                  ...	
  
                  $	
  ls	
  u-­‐boot.bin	
  

•  Porte	
  para	
  uma	
  nova	
  plataforma:	
  
     –  u-­‐boot/Makefile	
  
     –  u-­‐boot/board/<boardname>/*	
  
     –  u-­‐boot/include/configs/<boardname>.h	
  

                                                                                                    23	
  
Exemplo:	
  U-­‐Boot	
  



             Demo!	
  
(Compilação	
  e	
  uRlização	
  do	
  u-­‐boot)	
  




                                                       24	
  
Roteiro	
  
•  Introdução	
  
•  Projeto	
  de	
  Linux	
  Embarcado	
  
    –  Toolchain	
  
    –  Bootloader	
  
    –  Kernel	
  
    –  Root	
  Filesystem	
  
•  Demonstração	
  
•  Referências	
  




                                                25	
  
Kernel	
  do	
  Linux	
  




                            26	
  
Exemplo:	
  Linux	
  para	
  PowerPC	
  
•  Exemplo	
  de	
  compilação:	
  
    $	
  git	
  clone	
  git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-­‐2.6.git	
  
    $	
  cd	
  linux-­‐2.6	
  
    $	
  export	
  CROSS_COMPILE=powerpc-­‐linux-­‐uclibc-­‐	
  
    $	
  export	
  ARCH=powerpc	
  
    $	
  make	
  mrproper	
  	
  
    $	
  make	
  83xx/mpc8313_rdb_defconfig	
  #	
  Configuração	
  para	
  a	
  placa	
  
    $	
  make	
  menuconfig	
  #	
  Refinar	
  configuração	
  	
  
    $	
  make	
  
    ...	
  
    $	
  ls	
  arch/powerpc/boot/uImage	
  #	
  Imagem	
  para	
  ser	
  usada	
  com	
  o	
  u-­‐boot	
  
•  Módulos:	
  
    $	
  make	
  modules	
  
    $	
  make	
  modules_install	
  INSTALL_MOD_PATH=/path/to/roo•s	
  

                                                                                                             27	
  
Exemplo:	
  Linux	
  para	
  PowerPC	
  
•  Porte	
  para	
  uma	
  nova	
  plataforma	
  
•  PowerPC:	
  
    – Device	
  Tree	
  Blob	
  (DTB)	
  	
  
         •  Arquivo	
  que	
  descreve	
  o	
  hardware	
  
         •  Também	
  uRlizado	
  pelo	
  bootloader	
  


•  Outras	
  arquiteturas:	
  
    – Modificar	
  o	
  código	
  fonte	
  
    – Ex:	
  ARM	
  
         •  Modificar/criar	
  arch/arm/mach-­‐[plataforma]/	
  

                                                                  28	
  
Exemplo:	
  Linux	
  para	
  PowerPC	
  



                         Demo!	
  
  (Compilação	
  do	
  Linux	
  e	
  arquivo	
  de	
  device	
  tree)	
  




                                                                            29	
  
Roteiro	
  
•  Introdução	
  
•  Projeto	
  de	
  Linux	
  Embarcado	
  
    –  Toolchain	
  
    –  Bootloader	
  
    –  Kernel	
  
    –  Root	
  Filesystem	
  
•  Demonstração	
  
•  Referências	
  




                                                30	
  
Root	
  Filesystem	
  
•  Árvore	
  de	
  diretórios	
  contendo	
  bibliotecas,	
  scripts,	
  
   aplicações,	
  etc.	
  

•  Opções	
  para	
  geração	
  de	
  roofs:	
  
     –  Manual	
  (compilando	
  e	
  instalando	
  cada	
  pacote)	
  
     –  URlizando	
  um	
  sistema	
  de	
  build	
  

•  Tipos	
  de	
  sistemas	
  de	
  arquivos:	
  
     –  Ext2/3	
  
     –  Em	
  flash:	
  
           •  SquashFS	
  (read-­‐only,	
  rápido)	
  
           •  JFFS2	
  (mais	
  uRlizado	
  atualmente)	
  
           •  UBIFS	
  (sucessor	
  do	
  JFFS2,	
  rápido)	
  
     –  cramfs,initramfs,	
  etc.	
  

                                                                            31	
  
Root	
  Filesystem	
  
Ferramentas	
  para	
  
     geração	
  




                  Fonte:	
  Embedded	
  building	
  tools	
  BOF,	
  Thomas	
  Petazzoni	
  (ELC	
  2009)	
  32	
  
Root	
  Filesystem	
  
Ferramentas	
  para	
  
     geração	
  




                  Fonte:	
  Embedded	
  building	
  tools	
  BOF,	
  Thomas	
  Petazzoni	
  (ELC	
  2009)	
  33	
  
Exemplo:	
  Buildroot	
  
•  Exemplo	
  de	
  compilação:	
  
          $	
  git	
  clone	
  git://git.buildroot.net/buildroot	
  
          $	
  cd	
  buildroot	
  
          $	
  make	
  menuconfig	
  #	
  Configurar	
  roo•s	
  para	
  a	
  placa,	
  seleção	
  de	
  pacotes	
  
          $	
  make	
  
          $	
  ls	
  output/target/*	
  #	
  Conteúdo	
  do	
  roo•s	
  
          $	
  ls	
  output/images/roo•s.powerpc.ext2.gz	
  #	
  Imagem	
  gerada	
  	
  	
  
•  Geração	
  da	
  imagem	
  de	
  roo•s	
  para	
  o	
  u-­‐boot	
  

 $	
  make	
  menuconfig	
  #	
  Configurar	
  buildroot	
  para	
  compilar	
  o	
  u-­‐boot	
  
 $	
  make	
  BOARD_NAME=MPC8313ERDB_33	
  
 #	
  Comando	
  de	
  geração	
  de	
  imagens	
  do	
  u-­‐boot	
  
 $	
  mkimage	
  -­‐n	
  'uboot	
  ext2	
  ramdisk	
  roo•s'	
  	
  
 	
     -­‐A	
  ppc	
  -­‐O	
  linux	
  -­‐T	
  ramdisk	
  -­‐C	
  gzip	
  	
  
 	
     -­‐d	
  ./output/images/roo•s.powerpc.ext2.gz	
  	
  
 	
     ./output/images/roo•s.powerpc.ext2.gz.uboot	
  	
  
                                                                                                                     34	
  
Exemplo:	
  Buildroot	
  



                Demo!	
  
(Geração	
  de	
  roo•s	
  com	
  o	
  Buildroot)	
  




                                                        35	
  
Roteiro	
  
•    Introdução	
  
•    Projeto	
  de	
  Linux	
  Embarcado	
  
•    Demonstração	
  
•    Referências	
  




                                                  36	
  
Demonstração	
  na	
  Placa	
  
•  Boot	
  dos	
  binários	
  gerados	
  na	
  apresentação	
  (via	
  TFTP)	
  
•  Configuração	
  da	
  rede	
  e	
  dos	
  parâmetros	
  de	
  boot	
  do	
  Kernel:	
  

                 =>	
  setenv	
  ethact	
  TSEC1	
  
                 ⇒ setenv	
  ipaddr	
  10.1.1.2	
  
                   	
  
                 ⇒ setenv	
  serverip	
  10.1.1.1	
  
                   	
  
                 =>	
  setenv	
  bootargs	
  root=/dev/ram	
  console=~yS0,115200	
  
                 =>	
  saveenv	
  

•  Configuração	
  dos	
  parâmetros	
  de	
  boot	
  do	
  Kernel:	
  
                 ⇒ •tp	
  200000	
  uImage	
  
                  	
  
                 ⇒ •tp	
  1000000	
  roo•s.powerpc.ext2.gz.uboot	
  
                  	
  
                 ⇒ ‡tp	
  400000	
  mpc8313erdb.dtb	
  
                  	
  
                 ⇒ bootm	
  200000	
  1000000	
  400000	
  
                  	
  


                                                                                            37	
  
Referências	
  
•  Embedded	
  Linux	
  Conference	
  
   – h~p://www.embeddedlinuxconference.com/	
  
   – Apresentações	
  (ELC	
  2009):	
  
      •  It's	
  Alive!	
  -­‐	
  Linux	
  on	
  Embedded	
  PowerPC	
  porRng	
  guide,	
  
         Grant	
  Likely	
  
      •  Update	
  on	
  filesystems	
  for	
  flash	
  storage,	
  Michael	
  
         Opdenacker	
  	
  
      •  Embedded	
  Linux	
  and	
  Mainline	
  Kernel,	
  David	
  
         Woodhouse	
  


                                                                                          38	
  
Referências	
  
•  Livros:	
  
    – Building	
  Embedded	
  Linux	
  Systems,	
  
      Karim	
  Yaghmour	
  

    – Embedded	
  Linux	
  Primer:	
  A	
  
      PracRcal	
  Real-­‐World	
  Approach,	
  
      Christopher	
  Hallinan	
  



                                                      39	
  
Referências	
  
•  Embedded	
  Linux	
  Wiki	
  
   – h~p://www.elinux.org	
  
•  Free	
  Electrons	
  
   – h~p://free-­‐electrons.com/docs/	
  




                                            40	
  
Desenvolvendo	
  Sistemas	
  de	
  
    Linux	
  Embarcado	
  
       Marcelo	
  Veiga	
  Neves	
  
            marcelo.veiga@gmail.com	
  



                    Tchelinux	
  2009	
  
        Porto	
  Alegre,	
  14	
  de	
  novembro	
  de	
  2009	
  

Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

  • 1.
    Desenvolvendo  Sistemas  de   Linux  Embarcado   Marcelo  Veiga  Neves   marcelo.veiga@gmail.com   Tchelinux  2009   Porto  Alegre,  14  de  novembro  de  2009  
  • 2.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   •  Demonstração   •  Referências   1  
  • 3.
    Roteiro   •  Introdução   –  Sistemas  Embarcados   –  Linux  Embarcado   –  Exemplo  de  Hardware  para  Sistemas  Embarcados   –  Inicialização  do  Linux  em  Sistemas  Embarcados   •  Projeto  de  Linux  Embarcado   •  Demonstração   •  Referências   2  
  • 4.
    Introdução   •  ObjeRvos:   –  Compreender  o  funcionamento  de  um  Sistema  de  Linux   Embarcado   –  Quais  os  componentes  de  soVware  precisam  ser   preparados   –  Como  criar  um  Linux  Embarcado  completo   •  Pré-­‐requisitos:   –  Compreensão  do  papel  e  funcionamento  do  Kernel  do   Linux   –  Familiaridade  com  ambiente  de  desenvolvimento  Linux   3  
  • 5.
    Sistemas  Embarcados   • Definição  de  Sistema  Embarcado:   “Um  sistema  embarcado  é  um  computador  que  é   completamente  encapsulado  ou  dedicado  ao   disposiRvo  ou  sistema  que  ele  controla.”  (Wikipedia)   •  Requisitos/CaracterísRcas  de  Sistemas  Embarcados   –  Recursos  reduzidos  (CPU,  memória,  energia,  etc.)   –  Armazenamento  de  estado  sólido  (flash)   –  Operação  “Head  less”  (sem  display)   –  Etc.   4  
  • 6.
    Linux  Embarcado   • Não  é  apenas  o  Kernel   •  SoVware  necessário  para  o  Linux  funcionar  em   um  Sistema  Embarcado   – Aplicações  para  prover  funcionalidades  específicas   do  sistema   – Kernel  com  configuração  específica   – Bootloader  para  configurar  o  hardware  e  iniciar  o   sistema  operacional   5  
  • 7.
    Exemplo  de  Hardware  para  Sistema  Embarcado   •  Kit  de  desenvolvimento:  Freescale   MPC8313E-­‐RDB   •  PowerPC  PowerQUICC  II  PRO   MPC8313E  (a  333/133  MHz)   •  128  MByte  DDR2   •  32  MByte  NAND  Flash   6  
  • 8.
  • 9.
  • 10.
    O  que  precisa  ser  preparado?   9  
  • 11.
    O  que  precisa  ser  preparado?   10  
  • 12.
    O  que  precisa  ser  preparado?   11  
  • 13.
    O  que  precisa  ser  preparado?   12  
  • 14.
    O  que  precisa  ser  preparado?   13  
  • 15.
    O  que  precisa  ser  preparado?   14  
  • 16.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   –  Toolchain   –  Bootloader   –  Kernel   –  Root  Filesystem   •  Demonstração   •  Considerações  Finais   15  
  • 17.
    Toolchain   •  Conjunto  de  ferramentas  necessárias  para  compilar  (ou  cross-­‐ compilar)  um  sistema  Linux   •  Componentes:   –  BinuRls  (as,  ld,  ar,  ramlib,  strip,  etc.)   –  Kernel  headers  (#include  <linux/*>,  <asm/*>,  etc.)   –  Compilador  C  (GCC)   –  Biblioteca  C  (glibc,  uClibc,  dietlibc,  etc.)   •  Opções  para  geração  de  toolchain:   –  Gerar  manualmente  (compilando  cada  pacote)   –  Obter  uma  cópia  pré-­‐compilada   –  URlizar  uma  ferramenta  de  geração  (crosstool-­‐ng,  buildroot,  PTXdist,   OpenEmbedded,  etc.)   16  
  • 18.
    Exemplo:  Buildroot   • Exemplo  de  geração:   $  git  clone  git://git.buildroot.net/buildroot   $  cd  buildroot   $  make  menuconfig  #  Configurar  geração  do  toolchain   $  make   $  ls  output/stagging/*  #  Conteúdo  do  toolchain   •  Configurar  ambiente:   $  export  PATH:/path/to/buildroot/output/stagging/usr/bin:$PATH   $  export  CROSS_COMPILE=powerpc-­‐linux-­‐uclibc-­‐   #  Teste  de  compilação   $  powerpc-­‐linux-­‐uclibc-­‐gcc  –o  hello  helloworld.c   17  
  • 19.
    Exemplo:  Buildroot   Demo!   (Geração  de  toolchain  com  o  Buildroot)   18  
  • 20.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   –  Toolchain   –  Bootloader   –  Kernel   –  Root  Filesystem   •  Demonstração   •  Referências   19  
  • 21.
    Bootloader   •  Primeiro  soVware  que  executa   quando  o  hardware  é  ligado   •  Responsável  por  carregar  e   transferir  o  controle  para  o   Kernel   •  Para  isso:   –  Configura  o  hardware   –  Oferece  comandos  para   configuração  e  diagnósRco   20  
  • 22.
  • 23.
  • 24.
    Exemplo:  U-­‐Boot   • Exemplo  de  compilação:   $  git  clone  git://git.denx.de/u-­‐boot   $  cd  u-­‐boot   $  export  CROSS_COMPILE=powerpc-­‐linux-­‐uclibc-­‐   $  make  clobber   $  make  MPC8313ERDB_33_config  #  Configuração  para  a  placa   $  make   ...   $  ls  u-­‐boot.bin   •  Porte  para  uma  nova  plataforma:   –  u-­‐boot/Makefile   –  u-­‐boot/board/<boardname>/*   –  u-­‐boot/include/configs/<boardname>.h   23  
  • 25.
    Exemplo:  U-­‐Boot   Demo!   (Compilação  e  uRlização  do  u-­‐boot)   24  
  • 26.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   –  Toolchain   –  Bootloader   –  Kernel   –  Root  Filesystem   •  Demonstração   •  Referências   25  
  • 27.
  • 28.
    Exemplo:  Linux  para  PowerPC   •  Exemplo  de  compilação:   $  git  clone  git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-­‐2.6.git   $  cd  linux-­‐2.6   $  export  CROSS_COMPILE=powerpc-­‐linux-­‐uclibc-­‐   $  export  ARCH=powerpc   $  make  mrproper     $  make  83xx/mpc8313_rdb_defconfig  #  Configuração  para  a  placa   $  make  menuconfig  #  Refinar  configuração     $  make   ...   $  ls  arch/powerpc/boot/uImage  #  Imagem  para  ser  usada  com  o  u-­‐boot   •  Módulos:   $  make  modules   $  make  modules_install  INSTALL_MOD_PATH=/path/to/roo•s   27  
  • 29.
    Exemplo:  Linux  para  PowerPC   •  Porte  para  uma  nova  plataforma   •  PowerPC:   – Device  Tree  Blob  (DTB)     •  Arquivo  que  descreve  o  hardware   •  Também  uRlizado  pelo  bootloader   •  Outras  arquiteturas:   – Modificar  o  código  fonte   – Ex:  ARM   •  Modificar/criar  arch/arm/mach-­‐[plataforma]/   28  
  • 30.
    Exemplo:  Linux  para  PowerPC   Demo!   (Compilação  do  Linux  e  arquivo  de  device  tree)   29  
  • 31.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   –  Toolchain   –  Bootloader   –  Kernel   –  Root  Filesystem   •  Demonstração   •  Referências   30  
  • 32.
    Root  Filesystem   • Árvore  de  diretórios  contendo  bibliotecas,  scripts,   aplicações,  etc.   •  Opções  para  geração  de  roofs:   –  Manual  (compilando  e  instalando  cada  pacote)   –  URlizando  um  sistema  de  build   •  Tipos  de  sistemas  de  arquivos:   –  Ext2/3   –  Em  flash:   •  SquashFS  (read-­‐only,  rápido)   •  JFFS2  (mais  uRlizado  atualmente)   •  UBIFS  (sucessor  do  JFFS2,  rápido)   –  cramfs,initramfs,  etc.   31  
  • 33.
    Root  Filesystem   Ferramentas  para   geração   Fonte:  Embedded  building  tools  BOF,  Thomas  Petazzoni  (ELC  2009)  32  
  • 34.
    Root  Filesystem   Ferramentas  para   geração   Fonte:  Embedded  building  tools  BOF,  Thomas  Petazzoni  (ELC  2009)  33  
  • 35.
    Exemplo:  Buildroot   • Exemplo  de  compilação:   $  git  clone  git://git.buildroot.net/buildroot   $  cd  buildroot   $  make  menuconfig  #  Configurar  roo•s  para  a  placa,  seleção  de  pacotes   $  make   $  ls  output/target/*  #  Conteúdo  do  roo•s   $  ls  output/images/roo•s.powerpc.ext2.gz  #  Imagem  gerada       •  Geração  da  imagem  de  roo•s  para  o  u-­‐boot   $  make  menuconfig  #  Configurar  buildroot  para  compilar  o  u-­‐boot   $  make  BOARD_NAME=MPC8313ERDB_33   #  Comando  de  geração  de  imagens  do  u-­‐boot   $  mkimage  -­‐n  'uboot  ext2  ramdisk  roo•s'       -­‐A  ppc  -­‐O  linux  -­‐T  ramdisk  -­‐C  gzip       -­‐d  ./output/images/roo•s.powerpc.ext2.gz       ./output/images/roo•s.powerpc.ext2.gz.uboot     34  
  • 36.
    Exemplo:  Buildroot   Demo!   (Geração  de  roo•s  com  o  Buildroot)   35  
  • 37.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   •  Demonstração   •  Referências   36  
  • 38.
    Demonstração  na  Placa   •  Boot  dos  binários  gerados  na  apresentação  (via  TFTP)   •  Configuração  da  rede  e  dos  parâmetros  de  boot  do  Kernel:   =>  setenv  ethact  TSEC1   ⇒ setenv  ipaddr  10.1.1.2     ⇒ setenv  serverip  10.1.1.1     =>  setenv  bootargs  root=/dev/ram  console=~yS0,115200   =>  saveenv   •  Configuração  dos  parâmetros  de  boot  do  Kernel:   ⇒ •tp  200000  uImage     ⇒ •tp  1000000  roo•s.powerpc.ext2.gz.uboot     ⇒ ‡tp  400000  mpc8313erdb.dtb     ⇒ bootm  200000  1000000  400000     37  
  • 39.
    Referências   •  Embedded  Linux  Conference   – h~p://www.embeddedlinuxconference.com/   – Apresentações  (ELC  2009):   •  It's  Alive!  -­‐  Linux  on  Embedded  PowerPC  porRng  guide,   Grant  Likely   •  Update  on  filesystems  for  flash  storage,  Michael   Opdenacker     •  Embedded  Linux  and  Mainline  Kernel,  David   Woodhouse   38  
  • 40.
    Referências   •  Livros:   – Building  Embedded  Linux  Systems,   Karim  Yaghmour   – Embedded  Linux  Primer:  A   PracRcal  Real-­‐World  Approach,   Christopher  Hallinan   39  
  • 41.
    Referências   •  Embedded  Linux  Wiki   – h~p://www.elinux.org   •  Free  Electrons   – h~p://free-­‐electrons.com/docs/   40  
  • 42.
    Desenvolvendo  Sistemas  de   Linux  Embarcado   Marcelo  Veiga  Neves   marcelo.veiga@gmail.com   Tchelinux  2009   Porto  Alegre,  14  de  novembro  de  2009