Beruflich Dokumente
Kultur Dokumente
Mais de 14 anos de experincia em desenvolvimento de software para sistemas embarcados, em diversas arquiteturas de CPU (ARM, PPC, MIPS, x86, 68K), atuando em projetos com Linux embarcado e sistemas de tempo real. Scio da Embedded Labworks, onde atuo com consultoria e desenvolvimento de sistemas embarcados. Blog pessoal sobre Linux e Sistemas Embarcados em www.sergioprado.org.
Introduo
No blog: Sergio, eu estava comeando a estudar Linux embarcado, mas apareceu uma dvida, onde fica o main()?
Introduo
Liberdade Inovao
Comunidade
Colaborao
Flexibilidade
Introduo
Introduo
Criou-se uma situao onde temos centenas de milhares de pequenas solues procurando por um grande problema...
Introduo
E ento, para resolver os nossos grandes problemas, comeamos a usar Linux em dispositivos embarcados...
u-boot.bin
uImage
rootfs.jffs2
Debian, por exemplo, esta disponvel para diversas arquiteturas como x86, ARM, MIPS e PPC. Mas, e se no suportar sua plataforma? Mas, e se voc precisar customizar? Falta flexibilidade!
Soluo 3: Usar um sistema de build (buildsystem) Em 50 minutos, voc consegue gerar um sistema Linux completo!
O Sistema de Build
Compilar e gerar o toolchain. Compilar e gerar a imagem do bootloader. Compilar e gerar a imagem do kernel. Compilar bibliotecas e aplicaes, resolver dependncias e gerar o sistema de arquivos (rootfs).
Conhecendo o Buildroot
http://www.buildroot.net
Desenvolvido pelos mantenedores da uClibc, e ficou durante um bom tempo sem nenhum mantenedor. Desde 2009, a partir da verso 2009.02, liberado a cada 3 meses.
Conhecendo o Buildroot
Implementa um sistema automtico de build atravs de um conjunto de Makefiles:
Gera o toolchain. Gera a imagem do bootloader. Gera a imagem do kernel. Compila bibliotecas e aplicaes. Gera o rootfs.
Nosso projeto
Emulando Atari com Linux embarcado
O kit mini2440
FriendlyARM mini2440
ARM920T 400MHz 64MB RAM At 1G de Flash NAND USB, Ethernet, LCD Serial, E2PROM, etc
Nosso projeto
Dividiremos em 3 etapas:
1a. etapa: Sistema bsico com Linux embarcado. 2a. etapa: Adicionar o emulador Stella e suas dependncias. 3a. etapa: Ajustes no sistema de arquivos.
Toolchain (ARM, uClibc). Bootloader para a mini2440. Kernel para a mini2440. Rootfs com o emulador Stella.
No boot, iniciar automaticamente o emulador. Emulador configurado de fbrica (joystick, ler ROMs do carto SD, etc).
Parecido com o kernel do Linux. Pode-se usar tambm make xconfig ou make gconfig para configurar. Configurao salva em um arquivo .config no diretrio principal.
Informaremos ao buildroot que iremos compilar para uma CPU de arquitetura ARM920T.
Escolher a verso da biblioteca do sistema (o buildroot s suporta a uClibc). Escolher a verso do GCC. Escolher a verso e o local dos headers do kernel.
Baixar e preparar o U-boot. Selecionar no Buildroot o bootloader U-Boot. Configurar informaes de compilao do U-boot.
Habilitar a gerao do kernel. Configurar a verso do kernel. Configurar o nome do arquivo de config do kernel. Configurar o formato da imagem a ser gerada. Baixar os fontes do kernel da mini2440.
Por enquanto, vamos manter habilitados os pacotes padro. Habilitar gerao do formato ext2 (facilita testes via NFS). Habilitar gerao do formato jffs2 e configurar informaes da memria flash.
Linux 2.6 (OK!). Toolchain com GNU C++ (precisamos habilitar). SDL V1.2.10 ou maior (precisamos habilitar).
Objetivo: uma opo para habilitar o Stela dever estar disponvel em:
PackageSelectionforthetarget> Games> [*]stella
A configurao dos pacotes suportados pelo Buildroot ficam no diretrio packages, portanto criaremos um novo diretrio para o Stela em:
$mkdirppackages/games/stella
Alm destes, podemos criar arquivos que podero ser usados na compilao, como Makefiles e arquivos de patch.
IMPORTANTE: Se quiser manter o arquivo depois de um make clean, adicionar ao esqueleto do rootfs:
$cpS90Stellafs/skeleton/etc/init.d/
Problema 1: O vdeo no renderizava em modo paisagem (320x240). Depois de dias debugando o driver do display, a biblioteca SDL e a aplicao Stella...
$exportSDL_VIDEO_FBCON_ROTATION=CW
Soluo:
Problema 2: Ao rotacionar o display, o touchscreen parou de funcionar. Soluo: Alterao da biblioteca SDL.
Problema 3: Som s funcionou com a biblioteca ALSA habilitada. Soluo: Habilitar a biblioteca ALSA no Buildroot.
PackageSelectionforthetarget Audioandvideolibrariesandapplications [*]alsalib
Problema 4: Uso do direcional do joystick causava segmentation fault na aplicao. Soluo: Habilitar a interface de joysticks no kernel.
DeviceDrivers Inputdevicesupport [*]Joystickinterface [*]Joysticks/Gamepads [*]ClassicPCanalogjoysticksandgamepads
Dvidas?
Obrigado!