O documento apresenta um resumo sobre o desenvolvimento de sistemas Linux embarcados, abordando os principais componentes necessários como toolchain, bootloader, kernel e sistema de arquivos raiz. O palestrante discute cada etapa do processo e demonstra exemplos práticos de compilação e configuração desses componentes.
Desenvolvendo Sistemas de Linux Embarcado - Marcelo Veiga Neves
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
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
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
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
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
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