Hands-on Linux embarcado DwF 2013

77
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.

description

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.

Transcript of Hands-on Linux embarcado DwF 2013

Page 1: 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.

Page 2: Hands-on Linux embarcado DwF 2013

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

Page 3: Hands-on Linux embarcado DwF 2013

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

Page 4: Hands-on Linux embarcado DwF 2013

Embedded Labworks

O PROJETO: SINTETIZADOR DE VOZ

Page 5: Hands-on Linux embarcado DwF 2013

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).

Page 6: Hands-on Linux embarcado DwF 2013

Embedded Labworks

AMBIENTE DE LABORATÓRIO

/opt/labworks/linux Ambiente de laboratório

bootloader Código­fonte do U­Boot

docs Documentação do hands­on

filesystem Código­fonte de aplicações eferramentas que serão usadas paraconstruir o sistema de arquivos

kernel Código­fonte do Linux

Page 7: Hands-on Linux embarcado DwF 2013

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).”

Page 8: Hands-on Linux embarcado DwF 2013

Embedded Labworks

20 ANOS DEPOIS

Page 9: Hands-on Linux embarcado DwF 2013

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.

Page 10: Hands-on Linux embarcado DwF 2013

Embedded Labworks

ARQUITETURA BÁSICA

Hardware

Bootloader

Linux kernel

Biblioteca C

Biblioteca Biblioteca

Aplicação Aplicação

Toolchain

Page 11: Hands-on Linux embarcado DwF 2013

Embedded Labworks

HARDWARE

Page 12: Hands-on Linux embarcado DwF 2013

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).

Page 13: Hands-on Linux embarcado DwF 2013

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!).

Page 14: Hands-on Linux embarcado DwF 2013

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).

Page 15: Hands-on Linux embarcado DwF 2013

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

Page 16: Hands-on Linux embarcado DwF 2013

Embedded Labworks

CONECTANDO O HARDWARE

Page 17: Hands-on Linux embarcado DwF 2013

Embedded Labworks

TOOLCHAIN

Hardware

Bootloader

Linux kernel

Biblioteca C

Biblioteca Biblioteca

Aplicação Aplicação

Toolchain

Page 18: Hands-on Linux embarcado DwF 2013

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.

Page 19: Hands-on Linux embarcado DwF 2013

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.

Page 20: Hands-on Linux embarcado DwF 2013

Embedded Labworks

TIPOS DE TOOLCHAIN (cont.)

Binário x86

x86

Binário ARM

ARM

Código-fonte

x86

Toolchain nativo Cross-compiling toolchainHost

Target

Page 21: Hands-on Linux embarcado DwF 2013

Embedded Labworks

COMPONENTES DO TOOLCHAIN

Compilador (GCC)

Binutils Headers do kernel

Debugger (GDB)

Biblioteca C padrão

Toolchain

Page 22: Hands-on Linux embarcado DwF 2013

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

Page 23: Hands-on Linux embarcado DwF 2013

Embedded Labworks

FERRAMENTAS OPEN SOURCE

✗ Crosstool-ng:http://crosstool-ng.org/

✗ Buildroot: http://buildroot.uclibc.org/

✗ Yocto: https://www.yoctoproject.org/

Page 24: Hands-on Linux embarcado DwF 2013

Embedded Labworks

LABORATÓRIO

Instalando e testando o toolchain

Page 25: Hands-on Linux embarcado DwF 2013

Embedded Labworks

SISTEMA LINUX EMBARCADO

Hardware

Bootloader

Linux kernel

Biblioteca C

Biblioteca Biblioteca

Aplicação Aplicação

Toolchain

Page 26: Hands-on Linux embarcado DwF 2013

Embedded Labworks

SISTEMA LINUX EMBARCADO (NA FLASH)

Bootloader

Kernel

Rootfs

Memória flash

Page 27: Hands-on Linux embarcado DwF 2013

Embedded Labworks

BOOTLOADER

Hardware

Bootloader

Linux kernel

Biblioteca C

Biblioteca Biblioteca

Aplicação Aplicação

Toolchain

Page 28: Hands-on Linux embarcado DwF 2013

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.

Page 29: Hands-on Linux embarcado DwF 2013

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.

Page 30: Hands-on Linux embarcado DwF 2013

Embedded Labworks

PRINCIPAIS BOOTLOADERS

✗ x86:✗ LILO

✗ Grub

✗ Syslinux

✗ ARM, MIPS, PPC e outras arquiteturas:✗ U-Boot

✗ Barebox

✗ Redboot

Page 31: Hands-on Linux embarcado DwF 2013

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

Page 32: Hands-on Linux embarcado DwF 2013

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).

Page 33: Hands-on Linux embarcado DwF 2013

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.

Page 34: Hands-on Linux embarcado DwF 2013

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.

Page 35: Hands-on Linux embarcado DwF 2013

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

Page 36: Hands-on Linux embarcado DwF 2013

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.

Page 37: Hands-on Linux embarcado DwF 2013

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.

Page 38: Hands-on Linux embarcado DwF 2013

Embedded Labworks

LABORATÓRIO

Compilando o U-Boot

Page 39: Hands-on Linux embarcado DwF 2013

Embedded Labworks

KERNEL

Hardware

Bootloader

Linux kernel

Biblioteca C

Biblioteca Biblioteca

Aplicação Aplicação

Toolchain

Page 40: Hands-on Linux embarcado DwF 2013

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.

Page 41: Hands-on Linux embarcado DwF 2013

Embedded Labworks

COLABORAÇÃO

Page 42: Hands-on Linux embarcado DwF 2013

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!

Page 43: Hands-on Linux embarcado DwF 2013

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

Page 44: Hands-on Linux embarcado DwF 2013

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.

Page 45: Hands-on Linux embarcado DwF 2013

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

Page 46: Hands-on Linux embarcado DwF 2013

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.

Page 47: Hands-on Linux embarcado DwF 2013

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).

Page 48: Hands-on Linux embarcado DwF 2013

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

Page 49: Hands-on Linux embarcado DwF 2013

Embedded Labworks

make menuconfig

Page 50: Hands-on Linux embarcado DwF 2013

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.

Page 51: Hands-on Linux embarcado DwF 2013

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

Page 52: Hands-on Linux embarcado DwF 2013

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

Page 53: Hands-on Linux embarcado DwF 2013

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).

Page 54: Hands-on Linux embarcado DwF 2013

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).

Page 55: Hands-on Linux embarcado DwF 2013

Embedded Labworks

LABORATÓRIO

Compilando o kernel

Page 56: Hands-on Linux embarcado DwF 2013

Embedded Labworks

ROOTFS

Hardware

Bootloader

Linux kernel

Biblioteca C

Biblioteca Biblioteca

Aplicação Aplicação

Toolchain

Page 57: Hands-on Linux embarcado DwF 2013

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.

Page 58: Hands-on Linux embarcado DwF 2013

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!

Page 59: Hands-on Linux embarcado DwF 2013

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.

Page 60: Hands-on Linux embarcado DwF 2013

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.

Page 61: Hands-on Linux embarcado DwF 2013

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.

Page 62: Hands-on Linux embarcado DwF 2013

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/

Page 63: Hands-on Linux embarcado DwF 2013

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

Page 64: Hands-on Linux embarcado DwF 2013

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/

Page 65: Hands-on Linux embarcado DwF 2013

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).

Page 66: Hands-on Linux embarcado DwF 2013

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.

Page 67: Hands-on Linux embarcado DwF 2013

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/

Page 68: Hands-on Linux embarcado DwF 2013

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).

Page 69: Hands-on Linux embarcado DwF 2013

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.

Page 70: Hands-on Linux embarcado DwF 2013

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

Page 71: Hands-on Linux embarcado DwF 2013

Embedded Labworks

CONFIGURANDO O BUILDROOT

Page 72: Hands-on Linux embarcado DwF 2013

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

Page 73: Hands-on Linux embarcado DwF 2013

Embedded Labworks

GRAVANDO AS IMAGENS

Page 74: Hands-on Linux embarcado DwF 2013

Embedded Labworks

LABORATÓRIO

Gerando o rootfs e testando o sistema

Page 75: Hands-on Linux embarcado DwF 2013

Embedded Labworks

LABORATÓRIO

Desenvolvendo a aplicação

Page 76: Hands-on Linux embarcado DwF 2013

Embedded Labworks

PERGUNTAS?

Page 77: 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.

OBRIGADO!

E-mail [email protected] http://e-labworks.com