(Parte 1 de 2)

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Linux a Bordo

Criando sistemas embarcados com Linux

Marcelo Barros de Almeida marcelobarrosalmeida@yahoo.com.br

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Criando sistemas embarcados com Linux

● Introdução

–Definição de sistema embarcado –Linux tradicional x Linux embarcado

– Exemplos

● Motivação

● Pré-requisitos

●Criando sistemas embarcados

●Créditos, agradecimentos e links

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Introdução

O que exatamente significa “sistema embarcado” ?

Definição da Wikipedia : “um computador de propósito especial, que é completamente encapsulado pelo dispositivo que controla”.

Definição muito abrangente. Algumas dicas:

Propósito específico

Microprocessado/Microcontrolado

Aplicação em ROM/Flash

Restrições de consumo ou tamanho são freqüentes ?

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Linux tradicional x Linux Embarcado

Kernel Linux Biblioteca GNU C libjpeg, libstdc++, libxml, libvorbis... ls, vi, wget, ssh, httpd, gcc...

Navegador web, escritório, multimídia...

Utilitários de linha de comando

Kernel

Biblioteca C

Bibliotecas compartilhad as

Interface com o usuário

GNU Tradicional / Sistema LinuxSistema Linux embarcado uClibc Muito mais leve do que a biblioteca C GNU! libjpeg, libstdc++, libxml, libvorbis...

busybox (ls, vi, wget, httpd...) dropbear (ssh)...

Implementações muito mais leves!

Sem ferramentas de desenvolvimento.

Kernel Linux / uClinux (sem MMU)

Interface personalizada

Kernel leve, somente com as características necessárias e drivers

Kernel completo com a maioria das características e com drivers para todo tipo de hardware de PC do planeta!!

Gráficos, navegador web, servidor de web.

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Introdução

Alguns exemplos de sistemas embarcados com Linux:

PDA Sharp Zauro SL-C3100 Multimídia Archos PMA400

Telefone VoIP WiFi Accton VM1188T

Celular Haier N60 (WiFi, GSM, câmera, touchscreen, MP3 player)

Roteador Linksys WTR54G

Thinclients

Relógio Tablets

DVDs Robôs

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Criando sistemas embarcados com Linux

● Introdução

● Motivação

– Mercado – Vantagens

– Principais cuidados

● Pré-requisitos

●Criando sistemas embarcados

●Créditos, agradecimentos e links

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Mercado de Linux embarcado

●Grande número de concorrentes:

–Sistemas proprietários (home-brew)

– VxWorks

– Windows

●Principal concorrente (2005): Windows Embedded

Fonte: http://linuxdevices.com/articles/AT6743418602.html http://linuxdevices.com e http://windowsfordevices.com)

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Mercado de Linux embarcado

5 SO Usado (próximos 2 anos)

Linux Windows

Proprietários VxWorks QNX eCos DOS

●Pesquisa espontânea realizada em w.linuxdevices.com

●Números mais modestos (~25% para Linux) em pesquisas realizadas pela w.vdc-corp.com

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Mercado de Linux embarcado

●Grande número de processadores suportados

●Processadores ARM em alta atualmente. Nova linha VIA (x86) pode se tornar competitiva

●Pesquisa espontânea realizada em w.linuxdevices.com

35 Processadores (próximos 2 anos)

ARM x86

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Mercado de Linux embarcado

80 Você pagaria royalties por unidade ?

Não Sim Indecidos

65 Você pagaria por suporte ?

Sim

Não Indecidos

Pesquisa espontânea realizada em w.linuxdevices.com

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Vantagens Linux embarcado

●Qualidade do código

●Footprint relativamente pequeno:

–Kernel: 0,5 – 2MB de flash –Sistema de arquivos: variável

–Mesmo assim, pode ser grande para algumas aplicações

●Portabilidade e escalabilidade

●Grande número de aplicativos disponíveis

●Custos reduzidos

● Suporte –Fórum, listas, email, FAQs, exemplos, suporte comercial disponível.

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Cuidados com Linux embarcado

●Linux é um sistema de propósito geral ●Existem muitas opções de aplicativos, requer análise refinada

●O formato das licenças deve ser verificado sempre

●Sistema em evolução constante

●Faça análises imparciais, evite o deslumbramento

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Criando sistemas embarcados com Linux

● Introdução ● Motivação

● Pré-requisitos

– Conhecimentos necessários – Equipamento necessários

–Criando sistemas embarcados

●Créditos, agradecimentos e links

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Conhecimentos necessários: Kernel Linux

● Linux

–Operação e funcionamento do sistema Linux –Inicialização na plataforma desejada

–Conhecimento da estrutura do Kernel

–Compilação e instalação do Kernel

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Conhecimentos necessários: ferramentas

●Compiladores cruzados (toolchains)

–Portes do GCC para a plataforma desejada (binutils/glibc/GCC/GDB,...)

–Download de toolchains pré-compilados ou compilação (pode ser facilitada com buildroot, CrossTool, OpenEmbedded ou scratchbox)

● Emuladores

– Qemu (x86/ARM/PPC/MIPS/Sparc) –Específicos: Skyeye/Softgun/SWARM (ARM), Coldfire emulator

● Outros

–Conhecimentos de redes (Configuração, TFTP, NFS,)

–Uso de aplicativos como minicom (console serial), hexdump, conversores

–Controle de versão (CVS/Subversion/Git), patches, Makefiles, etc

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Conhecimentos necessários: programação

●Programar em C é obrigatório ●Assembly para a plataforma desejada pode ser necessário

●Um pouco de shell script não faz mal a ninguém

●Desenvolvimento de módulos (device drivers)

●Bônus track:

–HTML, servidores HTTP –CGI e scripts (Python, PHP, Perl, etc)

– Java

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Conhecimentos necessários: eletrônica digital

● Microcontroladores/Microprocessadores

●Padrões de memórias:

– SDRAM – Flash

●Padrões de barramentos pode ajudar caso precise desenvolver drivers

● Outros: –Timers, PWM, SPI, I2C, interrupções, RTCs, etc

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Equipamentos necessários

●Estação de trabalho Linux ● Plataforma embarcada

●Equipamento para debug

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Equipamentos necessários: plataforma embarcada

●Principais alternativas para a plataforma embarcada

–Emulação: Qemu ou outro emulador específico –PC (ATX, mini-ATX, nano-ATX)

–SBC (Single Board Computers)

–BSP (Board Support Package)

–Hardware hackeado (PDAs, celulares, MP3 players, roteadores, set top boxes, vídeo games, relógios, etc)

– Hardware proprietário

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Equipamentos necessários: plataforma embarcada

●Hardware proprietário pode ter custo elevado:

–Projeto do circuito eletrônico –Layout da placa

–Confecção do PCB (Printed Circuit Board) e montagem

–Instrumentação (osciloscópios, analisadores lógicos, multímetros, estações de soldagem)

–Integração hardware x software

–Mecânica (caixas, fixação, conectores, etc)

–Certificação, quando necessário

●Avaliar sempre o custo do investimento versus a fabricação por terceiros

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Equipamentos necessários: debug

●JTAG (Joint Test Action Group)

–Permite debug da plataforma através de uma interface simples, geralmente via porta paralela, USB ou ethernet (ICE-In Circuit Emulation), desde que o chip tenha suporte ao JTAG

–Custo baixo, alguns podem ser feitos em casa

–Breakpoints, inspeção de memória, execução passo a passo, acesso a registros, etc

●BDM (Background Debug Mode)

–Funcionalidade ICE similar ao JTAG, empregado pela Motorola

●Emuladores (via hardware)

–Equipamentos que emulam o processador/microcontrolador. Bem mais caros.

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Criando sistemas embarcados com Linux

● Introdução ● Motivação

● Pré-requisitos

●Criando sistemas embarcados

–Fazendo escolhas – Conceitos

– Criando dispositivos

●Créditos, agradecimentos e links

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Fazendo escolhas: plataforma e suporte

●Várias plataformas existes:

–ARM (vários fabricantes, longa busca...) – Coldfire (Motorola)

– PPC (Motorola/IBM/Apple)

–x86 fanless (Geode/Alchemy da AMD, Celeron M da Intel, Eden da VIA)

● Suporte –Comercial x comunitário

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Fazendo escolhas: distribuições

● Distribuições comerciais

– Montavista – TimeSys

– LinuxWorks

– WindRiver

– Freescale

– SnapGear

– SysGo

● Distribuições livres

– uClinux – Emdebian

–Embedded Gentoo

–Embedded Ubuntu

– OpenEmbedded

– Familiar

–<Ponha seu nome aqui>

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Fazendo escolhas: suporte a tempo real

●Suporte a tempo real:

– Comercial:

● RTLinuxPro ● MontaVista

–Open source:

● RTAI ●RTLinux (Patentes envolvidas)

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Fazendo escolhas: interfaces gráficas

●Várias interfaces gráficas:

– MicroWindows – Qtopia

– DirectFB

– MiniGUI

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Criando sistemas embarcados Com tudo definido, é hora de aprender novas lições:

●Conceito 1: execução em RAM ●Conceito 2: bootloader

●Conceito 3: rootfs

●Conceito 4: init

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Conceito 1: execução em RAM

●O programa, armazenado em flash, em geral é copiado (ou descompactado) para a RAM dinâmica (SDRAM). Depois, a execução é transferida para a RAM.

●Algumas vantagens:

–O custo da memória flash por megabyte é maior –A velocidade da SDRAM é bem superior

–O programa pode ser armazenado em flash, compactado

●Atenção com processadores sem MMU:

–A memória é compartilhada por aplicativos e pelo próprio kernel. A falha em um aplicativo pode comprometer o kernel em processadores sem unidade de gerenciamento de memória (MMU)

●É necessário um bootloader (programa de carga)

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Conceito 2: bootloader

●Usado para inicializar o sistema operacional e também a configuração inicial da plataforma em uso

●Geralmente agrega outras tarefas, como descompactação, boot remoto via rede ou serial, operações com a flash, etc

●Alguns exemplos:

–u-boot: PPC, ARM e MIPS para boot do Linux.

–MicroMonitor: ARM, ColdFire, SH2, 68K, MIPS, PowerPC, XScale e vários O.S., como VxWorks, Linux, pSOS, Nucleus, CMX, uC/OS, eCos, etc.

–redBoot: ARM,x86,MIPS,PPC, Shx, etc para boot do Linux e eCos.

–Grub/Lilo: x86, boot do Linux, Windows, etc.

–Outros: blob, SmartLoader, colilo, etc.

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Conceito 3: rootfs

●O kernel está pronto, mas e o restante das aplicações ? De onde elas serão lidas ? Rootfs !

●O rootfs é o sistema de arquivo inicial do Linux. Pode ser um arquivo (comum em aplicações embarcadas), uma partição (geralmente sistemas não embarcados) ou ainda via rede (NFS).

●No momento do boot, o parâmetro “root=” é passado para o Linux, indicando ele irá encontrar o sistema de arquivo inicial.

●O busybox pode ser uma boa alternativa para popular o rootfs, emulando vários aplicativos tradicionais do Linux. Pode usar a biblioteca uClibc, bem menor que a glibc.

Linux a Bordo: Criando Sistemas Embarcados com Linux

© Copyright 2006, Marcelo Barros de Almeida

Licença Creative Commons Attribution-ShareAlike 2.0 http://linuxabordo.com.br

Conceito 4: init

●Após montar o rootfs, o kernel executa o programa /sbin/init (ou outro, caso seja usado o parametro “init=”).

●Este é o primeiro programa executado e irá fazer a inicialização do sistema. O arquivo /etc/inittab dá as diretrizes de como isto deve ser feito.

(Parte 1 de 2)

Comentários