Вы находитесь на странице: 1из 36

Universidade de Braslia - UnB Faculdade do Gama - FGA Curso de Engenharia Eletrnica

Desenvolvimento de sistemas

embarcados com Linux

Edson Mintsu Hung (mintsu@image.unb.br) Evandro Leonardo Teixeira

UnB@Gama

O sistema operacional Linux

Lanado pela primeira vez em 1991. Foi criada uma fundao, a Free Software Foundation, que vem trabalhando para a sua popularizao.

Conhecido muito mais como sistema operacional para microcomputadores.

Vem sendo mantido por voluntrios e empresas.

Grande nmero de processadores suportados.

Como conseguir o Linux:

Modo difcil: compilar a partir do cdigo fonte disponvel em www.kernel.org. Modo fcil: instalar uma distribuio (e.g., Fedora, Slackware, Debian,...)

UnB@Gama

Como o Linux so utilizados em sistemas embarcados ?

O que um sistema embarcado ? - Um sistema computacional desenvolvido para aplicaes dedicadas, e geralmente envolvem restries como computao de tempo real, reduo de poder de processamento e/ou restrio de consumo.

Mas quais as vantagem de incluir um sistema operacional em sistemas dedicados ? - Qualidade dos cdigos. - Herana de cdigos, uma grande variedade de aplicativos disponveis. - Portabilidade e escalabilidade. - Footprint relativamente pequenos (kernel entre 0,5 a 2 MB de ash). - Custos reduzidos. - Fruns, listas, e-mail, FAQ, exemplos, suportes, etc.

UnB@Gama

Alguns exemplos reais Linux Embarcado

UnB@Gama

Linux Tradicional vs. Linux Embarcado

UnB@Gama

Reduzindo, mas com interface grca. =)

UnB@Gama

Linux para sistemas embarcados

Algumas distribuies para sistemas embarcados :

uCLinux (http://www.uclinux.org/). Blue Cat (http://www.lynuxworks.com/embedded-linux/embedded-linux.php). Monta Vista (http://www.mvista.com/). iMedia Linux (http://www.mini-box.com). Damn Small Linux (http://www.damnsmalllinux.org/)

O emulador de processador: QEMU (http://www.qemu.org/).

Algumas referncias:

http://elinux.org/ Wikipedia (http://wikipedia.org) http://www.google.com

UnB@Gama

Linux para sistemas embarcados

Arquiteturas de processadores suportados (32 bits) :

x86: i386, i486, Pentium, Core 2 Duo, i3, i5, i7, Xeon, Atom, Fusion, Geode, Athlon, Phenom, Turion, Opteron e similares. ARM: cores ARM7TDMI, ARM9TDMI, Marvell (XScale), Cortex, etc. Motorola 68000 (m68k): famlia ColdFire Motorola PowerPC, Virtex II Pro FPGA with PowerPC cores Analog Devices BlackFin. Intel XScale. IBM Cell microprocessor. Texas Instruments: OMAP. e muitos outros...

UnB@Gama

Como obter um Linux otimizado para dispositivos com restrio de recursos?

Linux from Scratch - Recompila-se a partir dos fontes ou de uma distribuio para sistemas embarcados.

Remasterizao Retira-se tudo que for desnecessrio para a aplicao, de modo a necessitar de pouco espao de armazenamento.

UnB@Gama

Para trabalhar com Linux Embarcado seria interessante saber:

Programar em C obrigatrio.

Assembly para a plataforma desejada pode ser necessrio.

Um pouco de shell script nao faz mal a ningum.

Programao para utilizar os recursos do sistema: - processos, thread, socket, ...

Desenvolvimento de mdulos (device drivers).

Bnus: C++, HTML, CGI e scripts (Python, PHP, Perl, etc), Java, Qt, Qtopia, ...

UnB@Gama

Alguns conhecimentos de eletrnica:

Microcontroladores/Microprocessadores.

Padres de memrias: - SDRAM, Flash, EEPROM, ...

Padres de barramentos pode ajudar caso precise desenvolver drivers.

Eletrnica geral: para desenvolvimento de placas perifricas.

UnB@Gama

10

Algumas ferramentas

Compiladores cruzados (toolchains) - Portes do GCC para a plataforma desejada (binutils/glibc/GCC/GDB,...). - Download de toolchains pr-compilados ou compilao (pode ser facilitada com buildroot, CrossTool, OpenEmbedded ou scratchbox)

Emuladores - Qemu (x86/ARM/PPC/MIPS/Sparc) - Especcos: Skyeye/Softgun/SWARM (ARM), Coldre emulator.

Outros - Conhecimentos de redes (Congurao, TFTP, NFS, ...) - Uso de aplicativos como minicom (console serial), hexdump, conversores. - Controle de verso (CVS/Subversion), patches, Makeles, etc.

UnB@Gama

11

Equipamentos necessrios

Estao de trabalho (preferencialmente Linux).

Plataforma embarcada (ou kit de desnvolvimento).

Equipamento de debug (se possvel).

UnB@Gama

12

Plataforma Embarcada

Principais alternativas para a plataforma embarcada: - Emulao: Qemu ou outro emulador especco. - PC (ATX, mini-ATX, nano-ATX). - PC/104. - SBC (Single Board Computers). - BSP (Board Support Package). - Hardware hackeado (PDAs, celulares, MP3 players, roteadores, set top boxes, video games, relgios, etc). - Hardware proprietrio.

UnB@Gama

13

Plataforma Embarcada:

Hardware proprietario pode ter custo elevado: - Projeto do circuito eletrnico. - Layout da placa. - Confeco da PCB (Printed Circuit Board) e montagem. - Instrumentao (osciloscpio, analisadores lgicos, multmetros, estaes de solda, estao de retrabalho, fontes de alimentao, ...). - Integrao hardware-software. - Mecnica (caixas, xao, conectores, etc). - Certicao, quando necessrio.

Avaliar sempre o custo do investimento versus a fabricao por terceiros.

UnB@Gama

14

Alguns Equipamentos de Debug

JTAG (Joint Test Action Group) - Permite debug da plataforma por meio 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, inspeo de memria, execuo 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 (solues bem mais caras).

UnB@Gama

15

Linux para sistemas embarcados

Metodologia de desenvolvimento:

Stand-alone : Todo desenvolvimento realizado no Target. Requer maior espao de armazenagem e processadores mais rpidos.

UnB@Gama

16

Linux para sistemas embarcados

Metodologia de desenvolvimento:

Host-target com unidade de armazenamento removvel: Desenvolvimento realizado no Host (e.g., microcomputador PC). Inconveniente de ter que alternar a conexo da mdia de boot entre o host e o target.

UnB@Gama

17

Linux para sistemas embarcados

Metodologia de desenvolvimento:

Host-target interligados por conexo serial ou ethernet: Desenvolvimento realizado no Host (e.g., microcomputador PC). Transferncia remota do target via link de comunicao. a abordagem mais comum.

UnB@Gama

18

Vantagens com Linux para sistemas embarcados

Ferramentas de desenvolvimento gratuitas:

Compiladores C/C++ reconhecidamente estvel: gcc/g++ Depurao no host por meio dos aplicativos gdb/xgdb Depurao remota por JTAG ou DBM Ambientes integrados de desenvolvimento: Anjuta, KDevelop, Eclipse, etc. Ambientes grcos de baixo requerimento de memria. Grande nmero de ferramentas de conectividade e administrao remota: ftp, ssh, nfs. Stacks TCP/IP e USB implementadas no kernel. Disponibilidade de recursos para sistemas multimdia: codecs, sistema de som/vdeo.

O kernel multitarefas preemptivo com prioridades, seguindo o padro POSIX que especica, entre outras coisas, comunicao entre processos, semforos e compartilhamento de dados.

UnB@Gama

19

Vantagens com Linux para sistemas embarcados

Verso para processadores sem Unidade de Gerenciamento de Memria: uClinux.

Escalonador com granularidade de 10ms.

Extenses de tempo-real permitem lanar uma tarefa a 50kHz com baixo jitter.

J existe suporte a vrios tipos de perifricos, de forma que no se faz necessrio desenvolver todos os drivers.

Vantagem exclusiva para a arquitetura ARM: maior compatibilidade de cdigo para dispositivos com o mesmo core ;

Vantagem exclusiva para processadores ColdFire: a Freescale disponibiliza gratuitamente cdigo fonte para codicadores/decodicadores H264, MPEG, JPEG, MP3 e WMA.

UnB@Gama

20

Inconvenientes com Linux para sistemas embarcados

Formao da equipe de trabalho para uma nova losoa de desenvolvimento.

Necessidade de desenvolvimento em plataformas que possuem maior restrio, principalmente em termos de memria, armazenamento, capacidade de processamento, consumo, etc.

Pode no haver ainda driver pronto para um dado componente de hardware.

UnB@Gama

21

Distribuies Linux para Sistemas Embarcados

Utilizao reduzida de memria para seu funcionamento.

Restries no projeto eletrnico. Reduo de espao fsico. Reduo de custo.

O Linux foi concebido para ser um sistema operacional de propsito geral.

Portanto vrias funcionalidades no so indicadas para sistemas embarcados.

Entretanto...

possui grande modularidade de desenvolvimento; arquitetura aberta

... o que possibilitou a adequao do Linux em sistemas embarcados e a implementao em novas arquiteturas.
22

UnB@Gama

Como inserir o Linux no sistema embarcado?

Linux from scratch: construo do sistema a partir dos fontes. Utilizao de uma distribuio pr-compilada. Desenvolvido pela comunidade (no-comercial). Comercial.

UnB@Gama

23

uCLinux

Linux para sistemas sem MMU (unidade de gerenciamento de memria).

Primeiro desenvolvimento feito para o Dragonball MC68328 da Motorola (atualmente Freescale).

Juntamente com a biblioteca uClib, o sistema nal pode ocupar menos que 1MB.

Atualmente portado para diversas arquiteturas, sendo as principais Blackn, Coldre, H8 e ARM7.

UnB@Gama

24

Damn Small Linux (DSL)

Ocupa 50MB de armazenagem. No processo de boot, o sistema descomprimido ocupando 128MB de RAM.

Baseado no Debian/KNOPPIX.

Acompanha vrios programas e um gerenciador de janelas (Fluxbox).

Esta distro no permite desenvolvimento no target.

Recomenda-se o desenvolvimento fazendo-se alteraes na distro. Este processo denominado remasterizao.

UnB@Gama

25

O sistema alvo

Placa PCM-9375 comercializada pela Advantech.

Pendrive e/ou Carto Compact Flash.

Fonte de alimentao padro ATX-300W.

Utilizamos uma fonte sobre-dimensionada, j que o sistema possui baixo consumo. No entanto, sendo para ns de teste/prototipao, seu baixo custo justica o uso.

UnB@Gama

26

Contedo do Damn Small Linux

KNOPPIX/

Diretrio que contm o DSL compactado na forma do arquivo KNOPPIX de aproximadamente 50MB.

boot.msg

Arquivo ASCII com informaes a serem apresentadas durante o boot do sistema.

f2

Mensagem mostrada na tela quanto a tecla F2 pressionada durante o prompt de boot do sistema.

f3

Mensagem mostrada na tela quanto a tecla F3 pressionada durante o prompt de boot do sistema.
27

UnB@Gama

german.kb

Mapeamento do teclado em alemo, colocado pelo responsvel pela distro.

linux24

Imagem compactada (bzImage) do kernel 2.4 do Linux. Maiores informaes podem ser obtidas a partir do comando file -s linux24.

logo.16

Imagem de boot do DSL, que pode ser facilmente alterada usando um editor como GIMP e o comando ppmtolss16.

minirt24.gz

Imagem RAMDISK de inicializao do sistema. Contm os mdulos mnimos necessrios usados pelo kernel quando na primeira fase do processo de inicializao.

readme.txt

Arquivo ASCII com comentrios sobre a distro.


28

UnB@Gama

syslinux.cfg

Arquivo de congurao do syslinux.

UnB@Gama

29

Preparando a distro em pendrives ou cartes de memria

# cfdisk /dev/sda

Formatao do disco com o sistema de arquivos FAT16

# mkdosfs /dev/sda

Definio do disco como dispositivo de boot.

# mount -t vfat /dev/sda /mnt/card

Montagem do disco no sistema.

# cp -R /home/user/dsl-x.x.x-embedded/* /mnt/card

Neste caso, o diretrio /home/user/dsl-x.x.x-embedded/ o diretrio no qual o DSL foi descompactado. A opo -R usada para garantir a cpia dos subdiretrios.
30

UnB@Gama

# syslinux install /dev/sda

Execuo do comando syslinux.

# umount /mnt/card

Desmontagem do carto de memria.

Caso o sistema no boote, modifique o MBR (Master Boot Record )

# dd if=/dev/zero of=/dev/sda bs=446 count=1 Procure pelo arquivo mbr.bin na pasta syslinux. Em seguida, faa: # cat /usr/lib/syslinux/mbr.bin > /dev/sda

UnB@Gama

31

Remasterizao do Damn Small Linux

Partiremos do diretrio /home/usr/DSL.

Onde os arquivos do DSL descompactados estejam no diretrio /home/usr/DSL/dsl-x.x.x-embedded.

Criaremos as seguintes pastas:

remaster image Diretrio temporrio para montar o sistema de arquivos da distro dsl-x.x.x-embedded. master Diretrio que conter a nova distro dsl-x.x.x-embedded, que poder ser colocada em um carto de memria. source/KNOPPIX Diretrio fonte da nova distro. Uma vez montado, poder ser alterado sempre que necessrio. Este diretrio contm todo o sistema que estar no sistema embarcado.
32

UnB@Gama

# # # # #

mkdir remaster cd remaster mkdir -p image mkdir -p master mkdir -p source/KNOPPIX

Copiando a distribuio dsl-x.x.x-embedded para o diretrio master

# rsync -Hav ../dsl-x.x.x-embedded/. master

Descomprimir na forma de um arquivo temporrio .iso

Necessita do cloop, que permite a criao de dispositivos do tipo loops compactados. Estes dispositivos permitem a montagem de arquivos imagens como se fossem dispositivos de blocos (por exemplo, pendrive). O cloop pode ser obtido instalando o pacote cloop-utils. # extract compressed fs master/KNOPPIX/KNOPPIX tmp.iso

O arquivo tmp.iso montado no diretrio image, cujo contedo copiado para source/KNOPPIX
33

UnB@Gama

# mount -o loop tmp.iso image # rsync -Hav image/. source/KNOPPIX # umount image

O diretrio image e o arquivo tmp.iso no sero mais necessrios, podendo ser apagados.

A partir deste ponto, o diretrio raiz da nova distro est disponvel em source/KNOPPIX. Para tanto deve-se modificar o diretrio raiz para source/KNOPPIX e ento montar o diretrio proc.

# chroot source/KNOPPIX # mount -t proc /proc proc

Inserindo pacotes do Debian.

# dpkg-restore # dpkg -l # apt-get update


34

UnB@Gama

# apt-get install minicom # mydsl-load gcc1-with-libs.dsl

Concluindo as alteraes, deve-se desmontar /proc e sair da distro.

# umount /proc # exit

Para criar uma nova distro, deve-se apagar o arquivo KNOPPIX da distro anterior. Considerando-se que o usurio encontra-se no diretrio remaster, deve-se executar o comando

# rm master/KNOPPIX/KNOPPIX

em seguida um novo arquivo KNOPPIX criado:

# mkisofs -R -U -V -hide-rr-moved -cache-inodes -no-bak -pad source/KNOPPIX | create compressed fs - 65536 > master/KNOPPIX/KNOPPIX

UnB@Gama

35