Hands-on Linux embarcado DwF 2013
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Hands-on Linux embarcado DwF 2013

on

  • 1,099 views

Slides do hands-on "Crie sua primeira aplicação com Linux embarcado usando os processadores i.MX6 da Freescale", apresentado no Design with Freescale 2013 em São Paulo/SP.

Slides do hands-on "Crie sua primeira aplicação com Linux embarcado usando os processadores i.MX6 da Freescale", apresentado no Design with Freescale 2013 em São Paulo/SP.

Statistics

Views

Total Views
1,099
Views on SlideShare
1,099
Embed Views
0

Actions

Likes
1
Downloads
41
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

CC Attribution-ShareAlike LicenseCC Attribution-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

Hands-on Linux embarcado DwF 2013 Presentation Transcript

  • 1. Crie sua primeira aplicação com Linux embarcado usando os processadores i.MX6 da Freescale. Embedded Labworks Por Sergio Prado. São Paulo, Novembro de 2012 ® Copyright Embedded Labworks 2004-2013. All rights reserved.
  • 2. Embedded Labworks SOBRE ESTE DOCUMENTO ✗ Este documento é disponibilizado sob a Licença Creative Commons BY-SA 3.0. http://creativecommons.org/licenses/by-sa/3.0/legalcode ✗ Os fontes deste documento estão disponíveis em: http://sergioprado.org/palestras/dwf2013/linux
  • 3. Embedded Labworks SOBRE O PALESTRANTE ✗ ✗ ✗ Sergio Prado tem mais de 17 anos de experiência 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 operacionais de tempo real. É sócio da Embedded Labworks, onde atua com consultoria, treinamento e desenvolvimento de software para sistemas embarcados: http://e-labworks.com Mantém um blog pessoal sobre Linux e sistemas embarcados em: http://sergioprado.org
  • 4. Embedded Labworks O PROJETO: SINTETIZADOR DE VOZ
  • 5. Embedded Labworks SINTETIZADOR DE VOZ (CASOS DE USO) ✗ ✗ Acessibilidade para pessoas com deficiências visuais (ex: leitor de livro eletrônico). Economizar no projeto trocando o display por um alto-falante (ex: aplicações de automação). ✗ Atendimento automático (ex: PABX). ✗ Aplicações de inteligência artificial (ex: Siri/iOS). ✗ Comunicação pessoal (ex: aplicações SMS mobile).
  • 6. Embedded Labworks AMBIENTE DE LABORATÓRIO /opt/labworks/linux bootloader docs filesystem kernel Ambiente de laboratório Código­fonte do U­Boot Documentação do hands­on Código­fonte de aplicações e ferramentas que serão usadas para construir o sistema de arquivos Código­fonte do Linux
  • 7. Embedded Labworks Em 1991... ”I'm doing a (free) operating system (just a hobby, won't be big and professional like gnu) for 386(486) AT clones. This has been brewing since april, and is starting to get ready. I'd like any feedback on things people like/dislike in minix, as my OS resembles it somewhat (same physical layout of the file-system (due to practical reasons) among other things).”
  • 8. Embedded Labworks 20 ANOS DEPOIS
  • 9. Embedded Labworks O KERNEL ✗ ✗ ✗ ✗ Linux é o kernel! http://www.kernel.org As distribuições Linux (Ubuntu, Fedora, Debian, Slackware, etc) integram o kernel Linux, bibliotecas e aplicações. O correto é chamar estas distribuições de sistemas operacionais GNU/Linux. Linux embarcado é o uso do kernel Linux e de diversos componentes open-source em sistemas embarcados.
  • 10. Embedded Labworks ARQUITETURA BÁSICA Aplicação Biblioteca Toolchain Aplicação Biblioteca Biblioteca C Linux kernel Bootloader Hardware
  • 11. Embedded Labworks HARDWARE
  • 12. Embedded Labworks CPU ✗ Suporta mais de 28 arquiteturas diferentes (x86, ia64, ARM, PPC, MIPS, SuperH, Blackfin, Coldfire, etc). ✗ 32/64 bits: não foi feito para microcontroladores! ✗ Originalmente projetado para CPUs com MMU (Memory Management Unit). ✗ ✗ O projeto uClinux foi criado para que o Linux pudesse ser usado em CPUs sem MMU. http://www.uclinux.org/ Boa parte do uClinux já foi integrado à árvore oficial do kernel, possibilitando o uso do Linux em diversas CPUs sem MMU (m68k e arm sem MMU, H8/300 da Hitachi, ADI Blackfin, etc).
  • 13. Embedded Labworks MEMÓRIA E ARMAZENAMENTO ✗ ✗ ✗ Um sistema bem básico pode funcionar com até 8MB de RAM, mas o ideal para começar é 32MB. Suporta armazenamento em memória flash (NAND ou NOR), em dispositivos de armazenamento em bloco (discos, cartões SD/MMC), etc. Um sistema bem básico pode funcionar com 2M de armazenamento (ou até menos!).
  • 14. Embedded Labworks COMUNICAÇÃO ✗ ✗ ✗ ✗ O Linux suporta muitos barramentos comuns em sistemas embarcados: I2C, SPI, CAN, 1-wire, SDIO, USB, etc. E também os principais protocolos de rede: Ethernet, Wi-Fi, Bluetooth, CAN, IPv4, IPv6, TCP, UDP, etc. Se o barramento ou protocolo não possuir restrições de licença, é bem provável que esteja implementado no kernel. Já protocolos ou barramentos com restrições de licença tem dificuldade para entrar na árvore oficial do kernel (ex: Zigbee).
  • 15. Embedded Labworks WANDBOARD QUAD ✗ ✗ ✗ ✗ ✗ i.MX6 Quad (4 núcleos ARM Cortex-A9) rodando à 1GHz. 2G de RAM DDR3. Duas interfaces de cartão SD e uma interface SATA. Saídas de áudio (comum e S/PDIF) e vídeo HDMI. Ethernet Gigabit, USB host e OTG, WiFi, Bluetooth, serial, etc. http://wandboard.org
  • 16. Embedded Labworks CONECTANDO O HARDWARE
  • 17. Embedded Labworks TOOLCHAIN Aplicação Biblioteca Toolchain Aplicação Biblioteca Biblioteca C Linux kernel Bootloader Hardware
  • 18. Embedded Labworks O QUE SÃO TOOLCHAINS? ✗ ✗ ✗ Ao pé da letra, e traduzindo literalmente, toolchain é uma "corrente de ferramentas". Na prática, é um conjunto de ferramentas de compilação. Você se lembra do processo de compilação de um código em C? Ele envolve normalmente as seguintes etapas: pré-processamento, compilação, montagem (assembler) e linkagem. Cada uma destas etapas é executada por uma ferramenta (pré-processador, compilador, assembler e linker), e todas elas fazem parte do toolchain.
  • 19. Embedded Labworks TIPOS DE TOOLCHAIN ✗ ✗ ✗ ✗ As ferramentas de desenvolvimento normalmente disponíveis em um desktop GNU/Linux são chamadas de toolchain nativo. Este toolchain roda na sua máquina e compila código para ser executado na sua máquina, geralmente um x86. Em desenvolvimento de sistemas embarcados normalmente é complicado (às vezes até impossível) usar um toolchain nativo, porque precisamos de bastante espaço em disco, capacidade de processamento, memória, etc. Portanto, para esta tarefa, o melhor é usar um cross-compiling toolchain, que roda na sua plataforma de desenvolvimento mas gera código para a sua plataforma alvo.
  • 20. Embedded Labworks TIPOS DE TOOLCHAIN (cont.) Código-fonte Toolchain nativo Host Cross-compiling toolchain x86 Binário x86 Target Binário ARM x86 ARM
  • 21. Embedded Labworks COMPONENTES DO TOOLCHAIN Compilador (GCC) Biblioteca C padrão Binutils Headers do kernel Debugger (GDB) Toolchain
  • 22. Embedded Labworks TOOLCHAINS PRONTOS ✗ ✗ ✗ ✗ Code Sourcery (ARM e MIPS): http://www.codesourcery.com/gnu_toolchains/arm/ Linaro (ARM): https://wiki.linaro.org/WorkingGroups/ToolChain Scratchbox (ARM e x86): http://www.scratchbox.org/ MIPS: http://www.linux-mips.org/wiki/Toolchains
  • 23. Embedded Labworks FERRAMENTAS OPEN SOURCE ✗ ✗ ✗ Crosstool-ng: http://crosstool-ng.org/ Buildroot: http://buildroot.uclibc.org/ Yocto: https://www.yoctoproject.org/
  • 24. Embedded Labworks LABORATÓRIO Instalando e testando o toolchain
  • 25. Embedded Labworks SISTEMA LINUX EMBARCADO Aplicação Biblioteca Toolchain Aplicação Biblioteca Biblioteca C Linux kernel Bootloader Hardware
  • 26. Embedded Labworks SISTEMA LINUX EMBARCADO (NA FLASH) Bootloader Kernel Rootfs Memória flash
  • 27. Embedded Labworks BOOTLOADER Aplicação Biblioteca Toolchain Aplicação Biblioteca Biblioteca C Linux kernel Bootloader Hardware
  • 28. Embedded Labworks RESPONSABILIDADES DO BOOTLOADER ✗ O bootloader é o código responsável por: ✗ ✗ ✗ Inicializar o hardware (GPIO, clock, DRAM, etc). Carregar o sistema operacional ou qualquer outro binário e executar. Além destas funcionalidades básicas, a maioria dos bootloaders possui uma linha de comandos para a execução de diferentes operações, como verificação de memória, formatação da flash e rotinas de diagnóstico.
  • 29. Embedded Labworks FUNCIONALIDADES DO BOOTLOADER ✗ ✗ Passar parâmetros para o kernel. Prover mecanismos para carregar e gravar o kernel e o sistema de arquivos na memória flash. ✗ Inicializar via rede ou pelo cartão SD. ✗ Rotinas de diagnóstico de hardware.
  • 30. Embedded Labworks PRINCIPAIS BOOTLOADERS ✗ x86: ✗ ✗ Grub ✗ ✗ LILO Syslinux ARM, MIPS, PPC e outras arquiteturas: ✗ U-Boot ✗ Barebox ✗ Redboot
  • 31. Embedded Labworks U-BOOT ✗ ✗ ✗ ✗ Bootloader open-source (GPLv2) mais utilizado atualmente. http://www.denx.de/wiki/U-Boot Suporta uma grande variedade de CPUs, incluindo PPC, ARM, MIPS, Coldfire, x86, etc. Desde 2008, segue um intervalo fixo de release, onde a cada dois ou três meses uma versão é liberada (as versões são nomeadas com o formato YYYY.MM). Documentação disponível em: http://www.denx.de/wiki/U-Boot/Documentation
  • 32. Embedded Labworks FUNCIONALIDADES DO U-BOOT ✗ Exibir informações do hardware (memória, periféricos, etc). ✗ Manipular a RAM (ler, escrever, comparar, testar, etc). ✗ Manipular memórias flash (ler, escrever, apagar, etc). ✗ Boot via memória flash. ✗ Boot via rede (bootp, tftp, dhcp, serial).
  • 33. Embedded Labworks FUNCIONALIDADES DO U-BOOT (cont.) ✗ Boot por interfaces SD/MMC ou USB. ✗ Entende partições FAT e EXT2. ✗ Configuração por variáveis de ambiente e suporte à scripts. ✗ Executa código bare-metal. ✗ Carrega e executa imagens do kernel Linux.
  • 34. Embedded Labworks BAIXANDO O U-BOOT ✗ ✗ ✗ ✗ É de responsabilidade do fabricante disponibilizar os fontes do U-Boot (porte) para a sua plataforma. O fabricante pode fazer isso e enviar o código para a árvore principal do projeto (mainline). Neste caso, os fontes podem ser baixados no site do projeto em: http://www.denx.de/wiki/U-Boot Mas nem sempre o fabricante faz isso! Neste caso, o fabricante irá disponibilizar os fontes em um outro local, provavelmente no seu site junto com o BSP (Board Support Package) da plataforma. Portanto, consulte a documentação da sua plataforma para saber como e onde baixar os fontes do U-Boot.
  • 35. Embedded Labworks CONFIGURANDO O U-BOOT ✗ O U-Boot suporta diversas arquiteturas e plataformas. Antes de compilar o U-Boot, você precisa configurá-lo para a sua plataforma com o comando abaixo: make <board>_config ✗ Substitua <board> pelo nome da sua plataforma no U-Boot. Por exemplo, para configurar o U-Boot para Wandboard Quad: make wandboard_quad_config
  • 36. Embedded Labworks COMPILANDO O U-BOOT ✗ Para compilar o U-Boot, basta executar o comando make passando o prefixo do cross-compiler. Exemplo: make CROSS_COMPILE=arm­linux­ ✗ No final, será gerada a imagem do U-Boot para ser gravada no target.
  • 37. Embedded Labworks GRAVANDO O U-BOOT ✗ O processo de gravação do U-Boot pode ser feito de diferentes formas, dependendo do target: ✗ ✗ Se o target puder iniciar por uma mídia removível (cartão SD, pendrive, HD, etc), basta conectar o dispositivo removível na sua máquina de desenvolvimento e gravar. Se o dispositivo usar memória flash, podem existir algumas opções: ✗ Bootloader de 1o. estágio. ✗ Monitor de boot da CPU. ✗ JTAG.
  • 38. Embedded Labworks LABORATÓRIO Compilando o U-Boot
  • 39. Embedded Labworks KERNEL Aplicação Biblioteca Toolchain Aplicação Biblioteca Biblioteca C Linux kernel Bootloader Hardware
  • 40. Embedded Labworks HISTÓRICO ✗ ✗ ✗ ✗ O kernel é um dos componentes do sistema operacional, que requer bibliotecas e aplicações para prover funcionalidades aos usuários. Criado em 1991 pelo estudante finlandês Linus Torvalds, começou a ser usado rapidamente como sistema operacional em projetos de software livre. Linus Torvalds foi capaz de criar uma comunidade grande e dinâmica de desenvolvedores e usuários ao redor do projeto. Atualmente, centenas de pessoas e empresas contribuem com o projeto.
  • 41. Embedded Labworks COLABORAÇÃO
  • 42. Embedded Labworks ESTATÍSTICAS ✗ Algumas estatísticas da versão 3.9: ✗ 69 dias de desenvolvimento. ✗ 11.910 commits. ✗ 608.436 linhas adicionadas. ✗ 338.439 linhas removidas. ✗ Aproximadamente 7 commits por hora. ✗ Aproximadamente 10 linhas alteradas por minuto!
  • 43. Embedded Labworks VISÃO GERAL Aplicação Aplicação Biblioteca Biblioteca Aplicação User space Biblioteca C Chamadas de sistema Notificação de eventos Exportação de informações Kernel Gerenciamento do hardware Notificação de eventos Hardware
  • 44. Embedded Labworks CARACTERÍSTICAS DO KERNEL ✗ ✗ ✗ Gerenciar a execução dos processos e controlar o acesso à memória e I/O. Conceito de kernel space x user space, e interface via chamadas de sistema (system calls). Fortemente baseado em arquivos: ✗ ✗ ✗ Acesso ao hardware via arquivos de dispositivo (/dev). Sistemas de arquivos virtuais (proc, sysfs, etc). Gerenciamento dinâmico de módulos.
  • 45. Embedded Labworks FONTES DO KERNEL ✗ ✗ A versão oficial do código-fonte do kernel liberada por Linus Torvalds encontra-se em: http://www.kernel.org Baixando os fontes por http: wget http://www.kernel.org/pub/linux/kernel/v3.0/linux­3.6.tar.bz2 tar xjfv linux­3.6.tar.bz2 ✗ Baixando os fontes pelo git: git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
  • 46. Embedded Labworks FONTES DO KERNEL (cont.) ✗ Muitas comunidades e fabricantes de hardware podem manter versões alternativas do kernel: ✗ ✗ ✗ Fabricantes de hardware podem manter versões específicas do kernel com suporte às suas plataformas de referência (BSP). Comunidades podem manter versões do kernel voltadas à arquiteturas específicas (ARM, MIPS, PPC), sub-sistemas (USB, PCI, network), sistemas de tempo-real, etc. Portanto, consulte a documentação da sua plataforma para saber como e onde baixar os fontes do Linux.
  • 47. Embedded Labworks CONFIGURANDO O KERNEL ✗ ✗ ✗ ✗ O kernel possui centenas de drivers de dispositivo, diversos protocolos de rede e muitos outros itens de configuração. Mas o kernel é bem modular, a maioria das opções podem ser habilitadas ou desabilitadas conforme a necessidade. O processo de configuração serve para você configurar o kernel para ser compilado para sua CPU/plataforma. O conjunto de opções que você irá habilitar depende: ✗ Do seu hardware (device drivers, etc). ✗ Das funcionalidades (protocolos de rede, sistemas de arquivo, etc).
  • 48. Embedded Labworks CONFIGURAÇÃO ✗ As configurações são salvas em um arquivo chamado .config no diretório principal dos fontes do kernel, e possuem o formato key=value. Exemplo: CONFIG_ARM=y ✗ Dificilmente você vai precisar editar o arquivo .config manualmente. Existem ferramentas de interface gráfica para configurar o kernel e gerar o arquivo de configuração automaticamente: make menuconfig make gconfig make xconfig make nconfig
  • 49. Embedded Labworks make menuconfig
  • 50. Embedded Labworks CONFIGURAÇÃO POR ARQUITETURA ✗ ✗ Toda a configuração do kernel é dependente da arquitetura. Por padrão, o kernel considera uma compilação nativa, então irá usar a arquitetura da máquina de desenvolvimento (normalmente x86) no comando abaixo: make menuconfig ✗ Portanto, para configurar para ARM por exemplo, você precisa especificar a arquitetura: make ARCH=arm menuconfig ✗ Ao invés de passar a variável ARCH na chamada do make, você pode também definí-la como variável de ambiente ou alterar o arquivo Makefile do diretório principal do kernel.
  • 51. Embedded Labworks CONFIGURAÇÕES PRÉ-DEFINIDAS ✗ ✗ Arquivos de configuração pré-definidos para diversas plataformas estão disponíveis em arch/<arch>/configs/. O uso de arquivos pré-configurados é a forma padrão de configurar um kernel para uma plataforma específica. Por exemplo, para carregar a configuração padrão da Wandboard Quad: make ARCH=arm wandboard_defconfig
  • 52. Embedded Labworks COMPILANDO O KERNEL ✗ Depois de configurado, para compilar nativamente basta executar: make ✗ ✗ Não precisa de previlégios de root! Para cross-compilar, você precisa indicar a arquitetura e o prefixo do cross-compiler. Exemplo: make ARCH=arm CROSS_COMPILE=arm­linux­ ✗ O comando acima irá gerar uma imagem genérica para ARM. Se você quiser gerar uma imagem específica para determinado bootloader, deve adicionar ao fim do comando o nome da imagem. Exemplo para o U-Boot: make ARCH=arm CROSS_COMPILE=arm­linux­ uImage
  • 53. Embedded Labworks COMPILANDO O KERNEL (cont.) ✗ Ao fim do processo de compilação, serão geradas as seguintes imagens: ✗ ✗ ✗ vmlinux: gerada no diretório raiz dos fontes, é a imagem do kernel no formato ELF, que não é bootavel, mas pode ser usada para debugging. Módulos do kernel: arquivos com extensáo .ko dentro dos respectivos diretórios dos drivers. Em arch/<arch>/boot/: ✗ ✗ ✗ Image: imagem final do kernel, bootável e descomprimida. *Image: imagem bootável e comprimida do kernel (bzImage para x86, zImage para ARM, etc). uImage: imagem do kernel para o U-Boot (opcional).
  • 54. Embedded Labworks INSTALANDO O KERNEL ✗ Para instalar o kernel, basta executar o comando abaixo: make install ✗ Este comando irá instalar os seguintes arquivos no diretório /boot: ✗ ✗ ✗ System.map-<version> (endereços dos símbolos do kernel) ✗ ✗ vmlinuz-<version> (imagem do kernel comprimida) config-<version> (arquivo de configuração do kernel) Normalmente não é usado em sistemas embarcados! Em sistemas embarcados, normalmente gravamos o kernel em um dispositivo de armazenamento (cartão SD, memória flash, etc).
  • 55. Embedded Labworks LABORATÓRIO Compilando o kernel
  • 56. Embedded Labworks ROOTFS Aplicação Biblioteca Toolchain Aplicação Biblioteca Biblioteca C Linux kernel Bootloader Hardware
  • 57. Embedded Labworks SISTEMAS DE ARQUIVO ✗ ✗ ✗ Sistemas de arquivo são usados para organizar dados, de forma hierárquica, em diretórios e arquivos disponíveis em dispositivos de armazenamento (locais ou remotos). Em sistemas Unix, aplicações e usuários enxergam apenas uma hierarquia única e global de arquivos e diretórios, que podem ser compostos por diferentes sistemas de arquivo. Um ou mais sistemas de arquivo são montados em locais específicos nesta hierarquia de diretórios.
  • 58. Embedded Labworks SISTEMAS DE ARQUIVO (cont.) ✗ ✗ ✗ Quando um sistema de arquivo é montado em um diretório, este diretório é chamado de ponto de montagem ou mount point, e o conteúdo deste diretório irá refletir o conteúdo armazenado no dispositivo de armazenamento. Isso permite que aplicações acessem diretórios e arquivos facilmente independentemente da localização ou do tipo do dispositivo de armazemanento. Tudo o que as aplicações enxergam são arquivos e diretórios!
  • 59. Embedded Labworks SISTEMA DE ARQUIVO ROOT ✗ ✗ ✗ Um sistema de arquivo específico é montado na raiz principal da hierarquia, identificado pelo /. Este sistema de arquivo é chamado de root ou rootfs. O responsável por montar o rootfs é o kernel, de acordo com a opção root passada na linha de comandos.
  • 60. Embedded Labworks COMPONENTES BÁSICOS ✗ Quais são os componentes básicos de um rootfs? ✗ Biblioteca do sistema (uClibc, glibc, eglibc, dietlibc, etc). ✗ Mecanismo de inicialização (System V Init, upstart, systemd, etc). ✗ Bibliotecas e aplicações.
  • 61. Embedded Labworks ROOTFS DO PROJETO ✗ O projeto do sintetizador de voz requer os seguintes componentes: ✗ Mecanismo de inicialização. ✗ Biblioteca do sistema. ✗ Ferramentas Unix básicas (shell, cp, cat, etc). ✗ Bibliotecas e ferramentas de áudio. ✗ Aplicação de sintetização de voz. ✗ Servidor web.
  • 62. Embedded Labworks O PROJETO (cont.) ✗ ✗ ✗ Para criar um sistema mais simples, usaremos o System V Init como mecanismo de inicialização. Usaremos a glibc como biblioteca do sistema. Usaremos o busybox para gerar as ferramentas básicas do sistema (shell, cp, cat, ps, ping, kill, etc). http://busybox.net/
  • 63. Embedded Labworks APLICAÇÕES DISPONÍVEIS NO BUSYBOX [, [[, addgroup, adduser, adjtimex, ar, arp, arping, ash, awk, basename, bbconfig, bbsh, brctl, bunzip2, busybox, bzcat, bzip2, cal, cat, catv, chat, chattr, chcon, chgrp, chmod, chown, chpasswd, chpst, chroot, chrt, chvt, cksum, clear, cmp, comm, cp, cpio, crond, crontab, cryptpw, cttyhack, cut, date, dc, dd, deallocvt, delgroup, deluser, depmod, devfsd, df, dhcprelay, diff, dirname, dmesg, dnsd, dos2unix, dpkg, dpkg_deb, du, dumpkmap, dumpleases, e2fsck, echo, ed, egrep, eject, env, envdir, envuidgid, ether_wake, expand, expr, fakeidentd, false, fbset, fbsplash, fdflush, fdformat, fdisk, fetchmail, fgrep, find, findfs, fold, free, freeramdisk, fsck, fsck_minix, ftpget, ftpput, fuser, getenforce, getopt, getsebool, getty, grep, gunzip, gzip, halt, hd, hdparm, head, hexdump, hostid, hostname, httpd, hush, hwclock, id, ifconfig, ifdown, ifenslave, ifup, inetd, init, inotifyd, insmod, install, ip, ipaddr, ipcalc, ipcrm, ipcs, iplink, iproute, iprule, iptunnel, kbd_mode, kill, killall, killall5, klogd, lash, last, length, less, linux32, linux64, linuxrc, ln, load_policy, loadfont, loadkmap, logger, login, logname, logread, losetup, lpd, lpq, lpr, ls, lsattr, lsmod, lzmacat, makedevs, man, matchpathcon, md5sum, mdev, mesg, microcom, mkdir, mke2fs, mkfifo, mkfs_minix, mknod, mkswap, mktemp, modprobe, more, mount, mountpoint, msh, mt, mv, nameif, nc, netstat, nice, nmeter, nohup, nslookup, od, openvt, parse, passwd, patch, pgrep, pidof, ping, ping6, pipe_progress, pivot_root, pkill, poweroff, printenv, printf, ps, pscan, pwd, raidautorun, rdate, rdev, readahead, readlink, readprofile, realpath, reboot, renice, reset, resize, restorecon, rm, rmdir, rmmod, route, rpm, rpm2cpio, rtcwake, run_parts, runcon, runlevel, runsv, runsvdir, rx, script, sed, selinuxenabled, sendmail, seq, sestatus, setarch, setconsole, setenforce, setfiles, setfont, setkeycodes, setlogcons, setsebool, setsid, setuidgid, sh, sha1sum, showkey, slattach, sleep, softlimit, sort, split, start_stop_daemon, stat, strings, stty, su, sulogin, sum, sv, svlogd, swapoff, swapon, switch_root, sync, sysctl, syslogd, tac, tail, tar, taskset, tcpsvd, tee, telnet, telnetd, test, tftp, tftpd, time, top, touch, tr, traceroute, true, tty, ttysize, tune2fs, udhcpc, udhcpd, udpsvd, umount, uname, uncompress, unexpand, uniq, unix2dos, unlzma, unzip, uptime, usleep, uudecode, uuencode, vconfig, vi, vlock, watch, watchdog, wc, wget, which, who, whoami, xargs, yes, zcat, zcip
  • 64. Embedded Labworks O PROJETO (cont.) ✗ ✗ ✗ Como servidor web, usaremos o lighttpd. http://www.lighttpd.net/ Para acessar a camada de áudio do kernel, usaremos a alsa­lib e a alsa­utils. http://www.alsa-project.org/ Por fim, utilizaremos a aplicação festival como sintetizador de voz. http://festvox.org/festival/
  • 65. Embedded Labworks INTEGRANDO OS COMPONENTES ✗ Como compilar e integrar todos estes componentes? ✗ O trabalho manual é demorado e sujeito à erros. ✗ Para estes casos, usamos uma ferramenta de compilação de sistema (build system).
  • 66. Embedded Labworks BUILD SYSTEM ✗ Um build system é capaz de: ✗ ✗ Compilar e gerar a imagem do bootloader. ✗ Configurar, compilar e gerar a imagem do kernel. ✗ Configurar e compilar as bibliotecas e aplicações habilitadas. ✗ ✗ Gerar o toolchain. Gerar a imagem final do rootfs. No nosso projeto, usaremos um build system para gerar o rootfs da aplicação.
  • 67. Embedded Labworks FERRAMENTAS ✗ ✗ ✗ Buildroot, desenvolvido pela comunidade: http://www.buildroot.net PTXdist, desenvolvido pela empresa Pengutronix: http://www.pengutronix.de/software/ptxdist/index_en.html LTIB, desenvolvido principalmente pela Freescale: http://www.ltib.org/
  • 68. Embedded Labworks FERRAMENTAS (cont.) ✗ ✗ ✗ OpenEmbedded, mais flexível (e também mais complexo): http://www.openembedded.org Yocto, mais novo, baseado no OpenEmbedded: http://www.yoctoproject.org/ Sistemas comerciais (MontaVista, WindRiver, Timesys).
  • 69. Embedded Labworks BUILDROOT ✗ ✗ ✗ ✗ Desenvolvido pelos mesmos mantenedores da uClibc. Possibilita gerar o toolchain, o bootloader, o kernel e o rootfs com muitas bibliotecas e aplicações disponíveis. Mais de 1100 aplicações e bibliotecas integradas, de utilitários básicos à bibliotecas mais elaboradas como X.org, Qt, Gtk, Webkit, Gstreamer, etc. Possui todos os componentes necessários gerar o rootfs do nosso projeto, como exceção da aplicação festival, que compilaremos separadamente.
  • 70. Embedded Labworks CONFIGURANDO O BUILDROOT ✗ Permite configurar, dentre outras opções: ✗ ✗ Toolchain. ✗ Bootloader. ✗ Kernel. ✗ Bibliotecas e aplicações. ✗ ✗ Arquitetura e modelo da CPU. Tipos das imagens do rootfs (ext2, jffs2, etc). Para configurar: make menuconfig
  • 71. Embedded Labworks CONFIGURANDO O BUILDROOT
  • 72. Embedded Labworks COMPILANDO O BUILDROOT ✗ Configuração também fica armazenada em um arquivo .config. ✗ Para compilar: make  ✗ No final do processo de compilação, as imagens estarão disponíveis no diretório abaixo: ls output/images/ rootfs.ext2  rootfs.jffs2  u­boot.bin  uImage
  • 73. Embedded Labworks GRAVANDO AS IMAGENS
  • 74. Embedded Labworks LABORATÓRIO Gerando o rootfs e testando o sistema
  • 75. Embedded Labworks LABORATÓRIO Desenvolvendo a aplicação
  • 76. Embedded Labworks PERGUNTAS?
  • 77. OBRIGADO! E-mail Website sergio.prado@e-labworks.com http://e-labworks.com Embedded Labworks Por Sergio Prado. São Paulo, Novembro de 2012 ® Copyright Embedded Labworks 2004-2013. All rights reserved.