Linux	
  em	
  Sistemas	
  Embarcados	
  

          Marcelo	
  Veiga	
  Neves	
  
            marcelo.veiga@gmail.com	
  



                      SACTA	
  2010	
  
             Alegrete,	
  25	
  de	
  junho	
  de	
  2010	
  
Roteiro	
  
•    Introdução	
  
•    Projeto	
  de	
  Linux	
  Embarcado	
  
•    Demonstração	
  
•    Referências	
  




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




                                                                          2	
  
Introdução	
  
•  ObjePvos:	
  
    –  Conhecer	
  a	
  área	
  de	
  Linux	
  para	
  Sistemas	
  Embarcados	
  
    –  Compreender	
  o	
  funcionamento	
  de	
  um	
  Sistema	
  de	
  Linux	
  
       Embarcado	
  
    –  Quais	
  os	
  componentes	
  de	
  soTware	
  precisam	
  ser	
  
       preparados	
  para	
  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	
  
     disposiPvo	
  ou	
  sistema	
  que	
  ele	
  controla.”	
  (Wikipedia)	
  


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

                                                                                  4	
  
5	
  
Oportunidades	
  em	
  Linux	
  Embarcado	
  
•  Oportunidade	
  para:	
  
    –  Nerds	
  que	
  gostam	
  de	
  Linux	
  e	
  SoTware	
  Livre	
  
    –  Quem	
  quer	
  desenvolver	
  em	
  nível	
  de	
  Kernel	
  
         •  Porte	
  do	
  Linux	
  para	
  novas	
  plataformas	
  
         •  Criação	
  e	
  adaptação	
  de	
  drivers	
  de	
  disposiPvos	
  
         •  Implementação	
  de	
  protocolos	
  de	
  rede	
  
    –  Quem	
  prefere	
  programar	
  em	
  C	
  em	
  ambiente	
  Linux	
  
       (também	
  tem	
  lugar	
  para	
  quem	
  gosta	
  de	
  Java,	
  C++,	
  Python,	
  
       etc.)	
  

•  Mercado	
  está	
  aquecido	
  e	
  não	
  existe	
  profissionais	
  
•  Oportunidades	
  também	
  para	
  empreendedores	
  

                                                                                            6	
  
Linux	
  Embarcado	
  
•  Todo	
  o	
  soTware	
  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	
  



                                                                             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:	
  
     –  BinuPls	
  (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	
  
     –  UPlizar	
  uma	
  ferramenta	
  de	
  geração	
  (crosstool-­‐ng,	
  buildroot,	
  PTXdist,	
  
        OpenEmbedded,	
  etc.)	
  

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




                                                17	
  
Bootloader	
  
•  Primeiro	
  soTware	
  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ósPco	
  


                                                  18	
  
Bootloaders	
  




Fonte:	
  hzp://www.elinux.org/Bootloader,	
  13/11/09	
  	
     19	
  
Bootloaders	
  




Fonte:	
  hzp://www.elinux.org/Bootloader,	
  13/11/09	
  	
     20	
  
Roteiro	
  
•  Introdução	
  
•  Projeto	
  de	
  Linux	
  Embarcado	
  
    –  Toolchain	
  
    –  Bootloader	
  
    –  Kernel	
  
    –  Root	
  Filesystem	
  
•  Demonstração	
  
•  Referências	
  




                                                21	
  
Kernel	
  do	
  Linux	
  




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


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

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




                                                24	
  
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)	
  
     –  UPlizando	
  um	
  sistema	
  de	
  build	
  

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

                                                                            25	
  
Root	
  Filesystem	
  
Ferramentas	
  para	
  
     geração	
  




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




                  Fonte:	
  Embedded	
  building	
  tools	
  BOF,	
  Thomas	
  Petazzoni	
  (ELC	
  2009)	
  27	
  
Roteiro	
  
•    Introdução	
  
•    Projeto	
  de	
  Linux	
  Embarcado	
  
•    Demonstração	
  
•    Referências	
  




                                                  28	
  
Demonstração	
  na	
  Placa	
  
      •  Roteador	
  3G	
  da	
  Digitel	
  –	
  NRX	
  5100	
  
      •  Processador	
  PowerPC	
  de	
  333	
  MHz	
  
      •  64	
  MB	
  de	
  memória	
  RAM	
  e	
  32	
  MB	
  de	
  Flash	
  




•  Demonstração:	
  
    •  Boot	
  do	
  Linux	
  Embarcado	
  via	
  rede	
  (protocolo	
  TFTP)	
  
    •  Configuração	
  da	
  rede	
  e	
  dos	
  parâmetros	
  de	
  boot	
  do	
  Kernel:	
  
    •  Acesso	
  ao	
  equipamento,	
  servidor	
  Web,	
  sistemas	
  de	
  
       arquivos,	
  etc.	
                                                                      29	
  
Referências	
  
•  Embedded	
  Linux	
  Conference	
  
   – hzp://www.embeddedlinuxconference.com/	
  
   – Apresentações	
  (ELC	
  2009):	
  
      •  It's	
  Alive!	
  -­‐	
  Linux	
  on	
  Embedded	
  PowerPC	
  porPng	
  guide,	
  
         Grant	
  Likely	
  
      •  Update	
  on	
  filesystems	
  for	
  flash	
  storage,	
  Michael	
  
         Opdenacker	
  	
  
      •  Embedded	
  Linux	
  and	
  Mainline	
  Kernel,	
  David	
  
         Woodhouse	
  


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

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



                                                      31	
  
Referências	
  
•  Embedded	
  Linux	
  Wiki	
  
   – hzp://www.elinux.org	
  
•  Free	
  Electrons	
  
   – hzp://free-­‐electrons.com/docs/	
  




                                            32	
  
Linux	
  em	
  Sistemas	
  Embarcados	
  

          Marcelo	
  Veiga	
  Neves	
  
            marcelo.veiga@gmail.com	
  



                      SACTA	
  2010	
  
             Alegrete,	
  25	
  de	
  junho	
  de	
  2010	
  

Linux em Sistemas Embarcados - SACTA 2010 - UNIPAMPA

  • 1.
    Linux  em  Sistemas  Embarcados   Marcelo  Veiga  Neves   marcelo.veiga@gmail.com   SACTA  2010   Alegrete,  25  de  junho  de  2010  
  • 2.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   •  Demonstração   •  Referências   1  
  • 3.
    Roteiro   •  Introdução   –  Sistemas  Embarcados   –  Linux  Embarcado   –  Exemplos  de  Sistemas  Embarcados  com  Linux   –  Inicialização  do  Linux  em  Sistemas  Embarcados   •  Projeto  de  Linux  Embarcado   •  Demonstração   •  Referências   2  
  • 4.
    Introdução   •  ObjePvos:   –  Conhecer  a  área  de  Linux  para  Sistemas  Embarcados   –  Compreender  o  funcionamento  de  um  Sistema  de  Linux   Embarcado   –  Quais  os  componentes  de  soTware  precisam  ser   preparados  para  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   disposiPvo  ou  sistema  que  ele  controla.”  (Wikipedia)   •  Requisitos/CaracterísPcas  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.
  • 7.
    Oportunidades  em  Linux  Embarcado   •  Oportunidade  para:   –  Nerds  que  gostam  de  Linux  e  SoTware  Livre   –  Quem  quer  desenvolver  em  nível  de  Kernel   •  Porte  do  Linux  para  novas  plataformas   •  Criação  e  adaptação  de  drivers  de  disposiPvos   •  Implementação  de  protocolos  de  rede   –  Quem  prefere  programar  em  C  em  ambiente  Linux   (também  tem  lugar  para  quem  gosta  de  Java,  C++,  Python,   etc.)   •  Mercado  está  aquecido  e  não  existe  profissionais   •  Oportunidades  também  para  empreendedores   6  
  • 8.
    Linux  Embarcado   • Todo  o  soTware  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   7  
  • 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:   –  BinuPls  (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   –  UPlizar  uma  ferramenta  de  geração  (crosstool-­‐ng,  buildroot,  PTXdist,   OpenEmbedded,  etc.)   16  
  • 18.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   –  Toolchain   –  Bootloader   –  Kernel   –  Root  Filesystem   •  Demonstração   •  Referências   17  
  • 19.
    Bootloader   •  Primeiro  soTware  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ósPco   18  
  • 20.
  • 21.
  • 22.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   –  Toolchain   –  Bootloader   –  Kernel   –  Root  Filesystem   •  Demonstração   •  Referências   21  
  • 23.
  • 24.
    Exemplo:  Linux  para  PowerPC   •  Porte  para  uma  nova  plataforma   •  PowerPC:   – Device  Tree  Blob  (DTB)     •  Arquivo  que  descreve  o  hardware   •  Também  uPlizado  pelo  bootloader   •  Outras  arquiteturas:   – Modificar  o  código  fonte   – Ex:  ARM   •  Modificar/criar  arch/arm/mach-­‐[plataforma]/   23  
  • 25.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   –  Toolchain   –  Bootloader   –  Kernel   –  Root  Filesystem   •  Demonstração   •  Referências   24  
  • 26.
    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)   –  UPlizando  um  sistema  de  build   •  Tipos  de  sistemas  de  arquivos:   –  Ext2/3   –  Em  flash:   •  SquashFS  (read-­‐only,  rápido)   •  JFFS2  (mais  uPlizado  atualmente)   •  UBIFS  (sucessor  do  JFFS2,  rápido)   –  cramfs,initramfs,  etc.   25  
  • 27.
    Root  Filesystem   Ferramentas  para   geração   Fonte:  Embedded  building  tools  BOF,  Thomas  Petazzoni  (ELC  2009)  26  
  • 28.
    Root  Filesystem   Ferramentas  para   geração   Fonte:  Embedded  building  tools  BOF,  Thomas  Petazzoni  (ELC  2009)  27  
  • 29.
    Roteiro   •  Introdução   •  Projeto  de  Linux  Embarcado   •  Demonstração   •  Referências   28  
  • 30.
    Demonstração  na  Placa   •  Roteador  3G  da  Digitel  –  NRX  5100   •  Processador  PowerPC  de  333  MHz   •  64  MB  de  memória  RAM  e  32  MB  de  Flash   •  Demonstração:   •  Boot  do  Linux  Embarcado  via  rede  (protocolo  TFTP)   •  Configuração  da  rede  e  dos  parâmetros  de  boot  do  Kernel:   •  Acesso  ao  equipamento,  servidor  Web,  sistemas  de   arquivos,  etc.   29  
  • 31.
    Referências   •  Embedded  Linux  Conference   – hzp://www.embeddedlinuxconference.com/   – Apresentações  (ELC  2009):   •  It's  Alive!  -­‐  Linux  on  Embedded  PowerPC  porPng  guide,   Grant  Likely   •  Update  on  filesystems  for  flash  storage,  Michael   Opdenacker     •  Embedded  Linux  and  Mainline  Kernel,  David   Woodhouse   30  
  • 32.
    Referências   •  Livros:   – Building  Embedded  Linux  Systems,   Karim  Yaghmour   – Embedded  Linux  Primer:  A   PracPcal  Real-­‐World  Approach,   Christopher  Hallinan   31  
  • 33.
    Referências   •  Embedded  Linux  Wiki   – hzp://www.elinux.org   •  Free  Electrons   – hzp://free-­‐electrons.com/docs/   32  
  • 34.
    Linux  em  Sistemas  Embarcados   Marcelo  Veiga  Neves   marcelo.veiga@gmail.com   SACTA  2010   Alegrete,  25  de  junho  de  2010