42
Desenvolvendo Sistemas de Linux Embarcado Marcelo Veiga Neves [email protected] Tchelinux 2009 Porto Alegre, 14 de novembro de 2009

Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Embed Size (px)

DESCRIPTION

Palestra apresentada no evento Tchelinux 2009 em Porto Alegre. Resumo da Palestra: Esta palestra abordará os itens necessários para construir um sistema de Linux embarcado. Serão abordados os problemas típicos envolvendo Linux em sistemas embarcados, a preparação de toolchains para cross-compilação, bootloaders, escolha de sistemas de arquivos, preparação do kernel para trabalhar com os barramentos e dispositivos típicos em sistemas embarcados, depuração do hardware embarcado, entre outros. A palestra terá também uma seção de demonstração utilizando uma placa de desenvolvimento baseada em PowerPC.

Citation preview

Page 1: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Desenvolvendo  Sistemas  de  Linux  Embarcado  

Marcelo  Veiga  Neves  [email protected]  

Tchelinux  2009  Porto  Alegre,  14  de  novembro  de  2009  

Page 2: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Roteiro  

•  Introdução  •  Projeto  de  Linux  Embarcado  •  Demonstração  

•  Referências  

1  

Page 3: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 4: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 5: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Sistemas  Embarcados  

•  Definição  de  Sistema  Embarcado:  

•  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  

“Um  sistema  embarcado  é  um  computador  que  é  completamente  encapsulado  ou  dedicado  ao  disposiRvo  ou  sistema  que  ele  controla.”  (Wikipedia)  

Page 6: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 7: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 8: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

7  

Page 9: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Inicialização  do  Linux  

8  

Page 10: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

O  que  precisa  ser  preparado?  

9  

Page 11: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

O  que  precisa  ser  preparado?  

10  

Page 12: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

O  que  precisa  ser  preparado?  

11  

Page 13: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

O  que  precisa  ser  preparado?  

12  

Page 14: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

O  que  precisa  ser  preparado?  

13  

Page 15: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

O  que  precisa  ser  preparado?  

14  

Page 16: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Roteiro  

•  Introdução  •  Projeto  de  Linux  Embarcado  

–  Toolchain  – Bootloader  – Kernel  – Root  Filesystem  

•  Demonstração  •  Considerações  Finais  

15  

Page 17: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 18: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Exemplo:  Buildroot  

•  Exemplo  de  geração:  

•  Configurar  ambiente:  

17  

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

$  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  

Page 19: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Exemplo:  Buildroot  

18  

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

Page 20: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Roteiro  

•  Introdução  •  Projeto  de  Linux  Embarcado  

–  Toolchain  –  Bootloader  – Kernel  – Root  Filesystem  

•  Demonstração  

•  Referências  

19  

Page 21: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 22: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Bootloaders  

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

Page 23: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Bootloaders  

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

Page 24: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Exemplo:  U-­‐Boot  

•  Exemplo  de  compilação:  

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

23  

$  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  

Page 25: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Exemplo:  U-­‐Boot  

24  

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

Page 26: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Roteiro  

•  Introdução  •  Projeto  de  Linux  Embarcado  – Toolchain  – Bootloader  – Kernel  – Root  Filesystem  

•  Demonstração  •  Referências  

25  

Page 27: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Kernel  do  Linux  

26  

Page 28: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Exemplo:  Linux  para  PowerPC  

•  Exemplo  de  compilação:  

•  Módulos:  

27  

$  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  

$  make  modules  $  make  modules_install  INSTALL_MOD_PATH=/path/to/roo�s  

Page 29: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 30: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Exemplo:  Linux  para  PowerPC  

29  

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

Page 31: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Roteiro  

•  Introdução  •  Projeto  de  Linux  Embarcado  – Toolchain  – Bootloader  – Kernel  – Root  Filesystem  

•  Demonstração  •  Referências  

30  

Page 32: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 33: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Root  Filesystem  

32  Fonte:  Embedded  building  tools  BOF,  Thomas  Petazzoni  (ELC  2009)  

Ferramentas  para  geração  

Page 34: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Root  Filesystem  

33  Fonte:  Embedded  building  tools  BOF,  Thomas  Petazzoni  (ELC  2009)  

Ferramentas  para  geração  

Page 35: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Exemplo:  Buildroot  

•  Exemplo  de  compilação:  

•  Geração  da  imagem  de  roo�s  para  o  u-­‐boot  

34  

$  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      

$  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    

Page 36: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Exemplo:  Buildroot  

35  

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

Page 37: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Roteiro  

•  Introdução  •  Projeto  de  Linux  Embarcado  •  Demonstração  

•  Referências  

36  

Page 38: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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:  

•  Configuração  dos  parâmetros  de  boot  do  Kernel:  

37  

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

⇒   �tp  200000  uImage  ⇒   �tp  1000000  roo�s.powerpc.ext2.gz.uboot  ⇒   �tp  400000  mpc8313erdb.dtb  ⇒   bootm  200000  1000000  400000  

Page 39: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

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  

Page 40: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Referências  

•  Livros:  – Building  Embedded  Linux  Systems,  Karim  Yaghmour  

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

39  

Page 41: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Referências  

•  Embedded  Linux  Wiki  – h~p://www.elinux.org  

•  Free  Electrons  – h~p://free-­‐electrons.com/docs/  

40  

Page 42: Desenvolvendo Sistemas de Linux Embarcado - Tchelinux 2009

Desenvolvendo  Sistemas  de  Linux  Embarcado  

Marcelo  Veiga  Neves  [email protected]  

Tchelinux  2009  Porto  Alegre,  14  de  novembro  de  2009