Hands-on Linux embarcado DwF 2013
-
Upload
sergio-prado -
Category
Technology
-
view
758 -
download
4
description
Transcript of Hands-on Linux embarcado DwF 2013
Embedded Labworks
Por Sergio Prado. São Paulo, Novembro de 2012® Copyright Embedded Labworks 2004-2013. All rights reserved.
Crie sua primeira aplicação com Linux embarcado usando os processadores i.MX6 da Freescale.
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
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
Embedded Labworks
O PROJETO: SINTETIZADOR DE VOZ
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).
Embedded Labworks
AMBIENTE DE LABORATÓRIO
/opt/labworks/linux Ambiente de laboratório
bootloader Códigofonte do UBoot
docs Documentação do handson
filesystem Códigofonte de aplicações eferramentas que serão usadas paraconstruir o sistema de arquivos
kernel Códigofonte do Linux
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).”
Embedded Labworks
20 ANOS DEPOIS
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.
Embedded Labworks
ARQUITETURA BÁSICA
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Aplicação Aplicação
Toolchain
Embedded Labworks
HARDWARE
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).
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!).
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).
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
Embedded Labworks
CONECTANDO O HARDWARE
Embedded Labworks
TOOLCHAIN
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Aplicação Aplicação
Toolchain
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.
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.
Embedded Labworks
TIPOS DE TOOLCHAIN (cont.)
Binário x86
x86
Binário ARM
ARM
Código-fonte
x86
Toolchain nativo Cross-compiling toolchainHost
Target
Embedded Labworks
COMPONENTES DO TOOLCHAIN
Compilador (GCC)
Binutils Headers do kernel
Debugger (GDB)
Biblioteca C padrão
Toolchain
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
Embedded Labworks
FERRAMENTAS OPEN SOURCE
✗ Crosstool-ng:http://crosstool-ng.org/
✗ Buildroot: http://buildroot.uclibc.org/
✗ Yocto: https://www.yoctoproject.org/
Embedded Labworks
LABORATÓRIO
Instalando e testando o toolchain
Embedded Labworks
SISTEMA LINUX EMBARCADO
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Aplicação Aplicação
Toolchain
Embedded Labworks
SISTEMA LINUX EMBARCADO (NA FLASH)
Bootloader
Kernel
Rootfs
Memória flash
Embedded Labworks
BOOTLOADER
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Aplicação Aplicação
Toolchain
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.
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.
Embedded Labworks
PRINCIPAIS BOOTLOADERS
✗ x86:✗ LILO
✗ Grub
✗ Syslinux
✗ ARM, MIPS, PPC e outras arquiteturas:✗ U-Boot
✗ Barebox
✗ Redboot
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
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).
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.
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.
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
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=armlinux
✗ No final, será gerada a imagem do U-Boot para ser gravada no target.
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.
Embedded Labworks
LABORATÓRIO
Compilando o U-Boot
Embedded Labworks
KERNEL
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Aplicação Aplicação
Toolchain
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.
Embedded Labworks
COLABORAÇÃO
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!
Embedded Labworks
VISÃO GERAL
Biblioteca C
Hardware
Biblioteca Biblioteca Aplicação User space
Kernel
AplicaçãoAplicação
Chamadas de sistema Notificação de eventosExportação de informações
Gerenciamento do hardware Notificação de eventos
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.
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/linux3.6.tar.bz2
tar xjfv linux3.6.tar.bz2
✗ Baixando os fontes pelo git:git clone git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
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.
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).
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
Embedded Labworks
make menuconfig
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.
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
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=armlinux
✗ 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=armlinux uImage
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).
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:✗ vmlinuz-<version> (imagem do kernel comprimida)
✗ System.map-<version> (endereços dos símbolos do kernel)
✗ 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).
Embedded Labworks
LABORATÓRIO
Compilando o kernel
Embedded Labworks
ROOTFS
Hardware
Bootloader
Linux kernel
Biblioteca C
Biblioteca Biblioteca
Aplicação Aplicação
Toolchain
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.
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!
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.
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.
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.
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/
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
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 alsalib e a alsautils. http://www.alsa-project.org/
✗ Por fim, utilizaremos a aplicação festival como sintetizador de voz.http://festvox.org/festival/
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).
Embedded Labworks
BUILD SYSTEM
✗ Um build system é capaz de:✗ Gerar o toolchain.
✗ 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 a imagem final do rootfs.
✗ No nosso projeto, usaremos um build system para gerar o rootfs da aplicação.
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/
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).
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.
Embedded Labworks
CONFIGURANDO O BUILDROOT
✗ Permite configurar, dentre outras opções:✗ Arquitetura e modelo da CPU.
✗ Toolchain.
✗ Bootloader.
✗ Kernel.
✗ Bibliotecas e aplicações.
✗ Tipos das imagens do rootfs (ext2, jffs2, etc).
✗ Para configurar:
make menuconfig
Embedded Labworks
CONFIGURANDO O BUILDROOT
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 uboot.bin uImage
Embedded Labworks
GRAVANDO AS IMAGENS
Embedded Labworks
LABORATÓRIO
Gerando o rootfs e testando o sistema
Embedded Labworks
LABORATÓRIO
Desenvolvendo a aplicação
Embedded Labworks
PERGUNTAS?
Embedded Labworks
Por Sergio Prado. São Paulo, Novembro de 2012® Copyright Embedded Labworks 2004-2013. All rights reserved.
OBRIGADO!
E-mail [email protected] http://e-labworks.com