desenvolvendo sistemas de linux embarcado - marcelo veiga neves
TRANSCRIPT
Desenvolvendo Sistemas de Linux Embarcado
Marcelo Veiga Neves [email protected]
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:
• 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)
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:
• 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
Exemplo: Buildroot
18
Demo! (Geração de toolchain com o Buildroot)
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
21 Fonte: h~p://www.elinux.org/Bootloader, 13/11/09
Bootloaders
22 Fonte: h~p://www.elinux.org/Bootloader, 13/11/09
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
Exemplo: U-‐Boot
24
Demo! (Compilação e uRlização do u-‐boot)
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:
• 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
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
29
Demo! (Compilação do Linux e arquivo de device tree)
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
32 Fonte: Embedded building tools BOF, Thomas Petazzoni (ELC 2009)
Ferramentas para geração
Root Filesystem
33 Fonte: Embedded building tools BOF, Thomas Petazzoni (ELC 2009)
Ferramentas para geração
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
Exemplo: Buildroot
35
Demo! (Geração de roo�s com o Buildroot)
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:
• 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
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 [email protected]
Tchelinux 2009 Porto Alegre, 14 de novembro de 2009