Você está na página 1de 344

Desenvolvendo Sistemas Linux Embarcado

Embedded Labworks

Por Sergio Prado. So Paulo, Novembro de 2012 Copyright Embedded Labworks 2004-2013. All rights reserved.

Embedded Labworks

SOBRE ESTE DOCUMENTO

Este documento baseado no material de treinamento disponibilizado pela Free Electrons em: http://free-electrons.com/doc/training/embedded-linux Este documento disponibilizado sob a Licena Creative Commons BY-SA 3.0.
http://creativecommons.org/licenses/by-sa/3.0/legalcode

Os fontes deste documento esto disponveis em: http://e-labworks.com/treinamentos/linux/source

Embedded Labworks

SOBRE O INSTRUTOR

Sergio Prado tem mais de 15 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 operacionais de tempo real. scio da Embedded Labworks, onde atua com consultoria, treinamento e desenvolvimento de software para sistemas embarcados: http://e-labworks.com Mantm um blog pessoal sobre Linux e sistemas embarcados em: http://sergioprado.org

Embedded Labworks

AGENDA DO TREINAMENTO

DIA 1: Introduo e arquitetura de sistemas Linux embarcado, shell do Linux, hardware, toolchain, bootloader e kernel. DIA 2: Sistemas de arquivo, mdulos do kernel, dispositivos de armazenamento e sistemas de build. DIA 3: Compilando e desenvolvendo bibliotecas e aplicaes, licenas de software, aplicaes grficas em Qt, debugging e tracing.

Embedded Labworks

AMBIENTE DE LABORATRIO
/opt/labs/ dl/ docs/ guides/ hardware/ training/ videos/ ex/ tools/ Ambientedelaboratrio Aplicaesepacotesopensource Queserousadosduranteas atividadesdelaboratrio Documentao Guiasdeconsulta(shell,vi,etc) Documentaodohardware Slideseatividadesdelaboratrio. Vdeos Exercciosdelaboratrio Ferramentasdeusogeral

Embedded Labworks

ORIENTAES GERAIS

Pergunte... Expresse seu ponto de vista... Troque experincias... Ajude... Participe!

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Introduo Linux embarcado

Embedded Labworks

OS 3 MARCOS

1970: Engenheiros da Bell Labs, liderados por Ken Thompson e Dennis Ritchie, criam o sistema operacional UNIX. 1983: Richard Stallman, projeto GNU e o conceito de software livre. Comea o desenvolvimento do gcc, gdb, glibc e outras ferramentas importantes. 1991: Linus Torvalds, projeto do kernel Linux, um sistema operacional UNIX-like. Em conjunto com o projeto GNU, nasce o sistema operacional GNU/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

VDEO (OS 20 ANOS DO LINUX)

Embedded Labworks

O KERNEL

Linux o kernel! http://www.kernel.org As distribuies Linux (Ubuntu, Fedora, Debian, Slackware, etc) integram o kernel Linux, bibliotecas e aplicaes. O correto chamar estas distribuies de sistemas operacionais GNU/Linux. Linux embarcado o uso do kernel Linux e de diversos componentes open-source em sistemas embarcados.

Embedded Labworks

PRINCIPAIS CARACTERSTICAS

Portabilidade para mais de 20 arquiteturas! Escalabilidade: o mesmo kernel roda em relgios, em celulares e em servidores da bolsa de valores! Livre de royalties. Roda em dispositivos com pouqussimos recursos.

Embedded Labworks

PRINCIPAIS CARACTERSTICAS (cont.)

Estabilidade: capaz de rodar por muito tempo sem precisar de um nico reboot. Modularidade: capaz de rodar apenas o que necessrio para seu projeto. Multicore: suporta mltiplas CPU. Recursos infinitos disponveis na internet.

Embedded Labworks

REUSO DE COMPONENTES

Uma das principais vantagens do uso do Linux em sistemas embarcados: reuso de componentes! A comunidade open-source j fornece implementaes prontas para as principais funcionalidades dos projetos: suporte hardware, protocolos de rede, bibliotecas grficas, criptografia, etc. Suporte hardware. Ex: Linux foi o primeiro kernel a suportar os padres USB 2.0, USB 3.0, bluetooth, etc. Desenvolvimento rpido baseado em componentes prontos. Foco no seu produto, core business, time-to-market!

Embedded Labworks

BAIXO CUSTO

Sem royalties: use e abuse de software livre! Se sua aplicao usa apenas software livre, incluindo as ferramentas de desenvolvimento, seu custo de software zero! Seu nico custo ser a aquisio de know-how. Permite que voc possa investir mais no hardware e em treinamento para sua equipe!

Embedded Labworks

CONTROLE TOTAL

Trabalhando com software livre, voc tem o cdigo-fonte de todos os componentes do seu sistema. Liberdade para modificar, otimizar, debugar, melhorar. No fica preso prioridade que fornecedores ou terceiros daro ao seu projeto. Total controle do software do seu projeto!

Embedded Labworks

QUALIDADE

Muitos componentes open source so usados em milhares de sistemas ao redor do mundo. Normalmente a qualidade bem melhor que a de softwares proprietrios (muitas pessoas olhando o mesmo problema!). Permite uma slida base para seu projeto. claro, nem todo software open software de boa qualidade, portanto tome cuidado. Procure sempre aqueles mais usados em outros projetos e com uma comunidade mais ativa.

Embedded Labworks

SUPORTE DA COMUNIDADE

Componentes open-source so desenvolvidos por uma comunidade de desenvolvedores e usurios. As comunidades podem te fornecer suporte de alta qualidade. Voc tem contato inclusive com os principais desenvolvedores dos projetos. Geralmente melhor que o suporte em empresas comerciais, mas voc precisa saber como usar corretamente o suporte da comunidade. Permite voc resolver os problemas mais rapidamente!

Embedded Labworks

MITOS

Mito 1: Linux is Free.

Linux no grtis, Linux livre! Do 2o. pargrafo da GPL: When we speak of free software, we are refering to freedom, not price.

Mito 2: No consigo proteger a propriedade intelectual do meu produto.

Consegue sim, basta tomar alguns cuidados com licenas de software!

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Arquitetura bsica

Embedded Labworks

ARQUITETURA BSICA
Biblioteca Biblioteca

Biblioteca Toolchain

Biblioteca Biblioteca C Linux kernel Bootloader Hardware

Embedded Labworks

COMPONENTES DO SISTEMA

Hardware: seu produto! Bootloader: iniciado pelo hardware, responsvel pela inicializao bsica, carregamento e execuo do kernel Linux. Kernel Linux: Ncleo do sistema operacional. Gerencia CPU, memria e I/O, exportando servios para as aplicaes do usurio. Rootfs: sistema de arquivos principal.

Biblioteca C: interface entre o kernel e as aplicaes do usurio. Bibliotecas e aplicaes do usurio.

Toolchain: conjunto de ferramentas para gerar os binrios do sistema.

Embedded Labworks

HARDWARE
Biblioteca Biblioteca

Biblioteca Toolchain

Biblioteca Biblioteca C Linux kernel Bootloader Hardware

Embedded Labworks

HARDWARE

Embedded Labworks

CPU

Suporta mais de 25 arquiteturas diferentes (x86, ia64, ARM, PPC, MIPS, SuperH, Blackfin, Coldfire, etc). 32/64 bits: no 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/ Mas 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

MEMRIA RAM

Um sistema bem bsico pode funcionar com at 8MB de RAM. Ideal para comear: 32MB.

Embedded Labworks

DISPOSITIVOS DE ARMAZENAMENTO

Suporta armazenamento em memria flash NAND ou NOR. Suporta dispositivos de armazenamento em bloco, incluindo discos e cartes SD/MMC. Um sistema bem bsico pode funcionar com 2M de armazenamento (ou at menos!).

Embedded Labworks

COMUNICAO

O Linux suporta muitos barramentos comuns em sistemas embarcados: I2C, SPI, CAN, 1-wire, SDIO, USB, etc. E tambm os principais protocolos de rede: Ethernet, Wi-Fi, Bluetooth, CAN, IPv4, IPv6, TCP, UDP, etc. Se o barramento ou protocolo no possuir restries de licena, bem provvel que esteja implementado no kernel. J protocolos ou barramentos com restries de licena tem dificuldade para entrar na rvore oficial do kernel (Ex: Zigbee).

Embedded Labworks

CRITRIOS PARA SELEO

Certifique-se de que o hardware j suportado pelo Linux e por um bootloader open-source. Suporte nas verses oficiais dos projetos (kernel e bootloader) bem melhor: maior qualidade e novas verses disponveis. A diferena entre uma plataforma suportada na rvore de projeto original do kernel, e outra plataforma no suportada de forma oficial, pode te trazer grandes consequncias em termos de custo e tempo de desenvolvimento!

Embedded Labworks

TOOLCHAIN
Biblioteca Biblioteca

Biblioteca Toolchain

Biblioteca Biblioteca C Linux kernel Bootloader Hardware

Embedded Labworks

TOOLCHAIN

Conjunto de ferramentas de programao usadas para gerar determinado produto, seja um software ou mesmo um sistema completo. Quando a plataforma de desenvolvimento (host) diferente da plataforma alvo (target), chamamos o toolchain de cross-compiling toolchain.

Embedded Labworks

TOOLCHAIN (cont.)

Cdigo-fonte Toolchain nativo Cross-compiling toolchain x86 Host

Binrio x86 x86

Binrio ARM ARM

Target

Embedded Labworks

COMPONENTES DO TOOLCHAIN

Compilador (gcc). Assembler e Linker (binutils). Standard C Library (glibc, uclibc, dietlibc, etc).

Embedded Labworks

TOOLCHAINS PRONTOS

Code Sourcery (ARM): http://www.codesourcery.com/gnu_toolchains/arm/ MIPS: http://www.linux-mips.org/wiki/Toolchains Linaro (ARM): https://wiki.linaro.org/WorkingGroups/ToolChain

Embedded Labworks

FERRAMENTAS OPEN SOURCE

Crosstool-ng: http://crosstool-ng.org/ Buildroot: http://buildroot.uclibc.org/

Embedded Labworks

SISTEMA LINUX EMBARCADO


Biblioteca Biblioteca

Biblioteca Toolchain

Biblioteca Biblioteca C Linux kernel Bootloader Hardware

Embedded Labworks

SISTEMA LINUX EMBARCADO (NA FLASH)


Bootloader

Kernel

Rootfs

Memria flash

Embedded Labworks

BOOTLOADER
Biblioteca Biblioteca

Biblioteca Toolchain

Biblioteca Biblioteca C Linux kernel Bootloader Hardware

Embedded Labworks

BOOTLOADER

Todo hardware possui um mecanismo de inicializao, que responsvel por carregar e executar o bootloader. O bootloader responsvel por carregar e executar o kernel do sistema operacional (no nosso caso, o Linux).

Embedded Labworks

FUNCIONALIDADES DO BOOTLOADER

Inicializar o hardware antes de executar o kernel, como por exemplo configurar a controladora de SDRAM. Passar parmetros para o kernel. Prover mecanismos para carregar e gravar o kernel e o sistema de arquivos na memria flash. Inicializar via rede ou pelo carto SD. Rotinas de diagnstico de hardware.

Embedded Labworks

PRINCIPAIS BOOTLOADERS

x86:

LILO Grub

ARM, MIPS, PPC e outras arquiteturas:

U-Boot Barebox Redboot

Embedded Labworks

KERNEL
Biblioteca Biblioteca

Biblioteca Toolchain

Biblioteca Biblioteca C Linux kernel Bootloader Hardware

Embedded Labworks

INICIALIZAO BSICA

Inicializa CPU, memria e barramentos. Configura a memria virtual (se tiver MMU). Inicializa os device drivers. Inicia o escalonador de tarefas. Inicia threads do kernel. Monta sistema de arquivos principal (rootfs) e chama o processo init.

Embedded Labworks

CARACTERSTICAS DO KERNEL

Gerencia execuo de processos e controla acesso memria e I/O. Conceito de kernel space x user space. Interface de user space com kernel space via chamadas do sistema (system calls). Acesso ao hardware via arquivos de dispositivo. Gerenciamento dinmico dos mdulos do kernel.

Embedded Labworks

EXEMPLO DE SYSTEM CALL

Embedded Labworks

ROOTFS
Biblioteca Biblioteca

Biblioteca Toolchain

Biblioteca Biblioteca C Linux kernel Bootloader Hardware

Embedded Labworks

COMPONENTES BSICOS

Biblioteca do sistema (uClibc, glibc, eglibc, dietlibc, etc). Mecanismo de inicializao. Bibliotecas e aplicaes.

Embedded Labworks

APLICAES PARA EMBARCADOS

Dropbear: cliente e servidor SSH (~110K). Thttpd: servidor web (~88K). DirectFB: biblioteca grfica (~1,4MB). SQLite: Banco de dados (~250KB).

Embedded Labworks

BUSYBOX

O canivete suo de sistemas embarcados com Linux! Combina verses mais leves de ferramentas UNIX em um nico binrio, otimizado por tamanho. Geralmente as ferramentas so mais limitadas em termos de funcionalidades comparadas s originais.

Embedded Labworks

BUSYBOX TUDO ISSO EM ~1MB!

Embedded Labworks

SISTEMA LINUX
Desenvolver um sistema Linux embarcado como brincar de Lego!

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, compilar bibliotecas e aplicaes, e gerar a imagem final do rootfs.

Embedded Labworks

ALGUNS BUILD SYSTEMS

Proprietrios:

Monta Vista. Wind River. TimeSys.

Open source:

Buildroot. OpenEmbedded. Yocto. PTXdist. LTIB.

Embedded Labworks

OS 3 PAPIS DO DESENVOLVEDOR

Desenvolvedor de aplicaes: desenvolve aplicaes Linux. Integrador: Integra todos os componentes (bootloader, kernel, bibliotecas e aplicaes) em um sistema Linux embarcado. Desenvolvedor de BSP (Board Support Package): porta o kernel e o bootloader, desenvolve os device drivers para os dispositivos de hardware usados no produto, etc. Nosso foco neste treinamento: integrador e desenvolvedor de aplicaes!

Embedded Labworks

VAMOS COMEAR?

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Ambiente de desenvolvimento

Embedded Labworks

AMBIENTE DE DESENVOLVIMENTO

Um ambiente de desenvolvimento para Linux embarcado composto normalmente por 3 componentes principais:

Toolchain (ferramentas de compilao). Buildsystem (ferramenta de gerao do sistema Linux). IDE para desenvolvimento e debugging de aplicaes.

Embedded Labworks

SOLUES

Existem solues prontas, fornecidas por empresas como MontaVista, Wind River e TimeSys, com seu prprio ambiente e ferramentas de desenvolvimento. Elas usam um conjunto de componentes open-source e proprietrios. Existem tambm solues open source, completamente abertas e suportadas pela comunidade. No nosso treinamento, usaremos solues abertas! Aprendendo a base, migrar depois para outras solues bem mais fcil!

Embedded Labworks

SO DE DESENVOLVIMENTO

fortemente recomendado o uso do Linux como sistema operacional para desenvolvimento em Linux embarcado! Todas as ferramentas disponveis na comunidade open source foram feitas para rodar em Linux. Voc pode ter problemas em tentar rodar em outro sistema operacional, e provavelmente no ter suporte da comunidade. Usando Linux, voc aprende Linux!

Embedded Labworks

QUE DISTRIBUIO USAR?

Embedded Labworks

HOST E TARGET

Host: mquina de desenvolvimento. Target: hardware, produto, kit de desenvolvimento. Conectados normalmente por uma conexo serial (RS232, USB, Ethernet, etc).

Serial Host Ethernet Target

Embedded Labworks

NOSSA PRINCIPAL FERRAMENTA!

Embedded Labworks

PERMISSES

Linux um sistema multi-usurio:

root o usurio administrador que tem permisso para executar qualquer operao privilegiada como mudar a configurao do sistema ou montar um sistema de arquivos. Outros usurios no tem todos os mesmos privilgios de administrao.

Durante o treinamento, para executar operaes que necessitem de privilgios de administrador, usaremos o comando sudo. Exemplo:
$sudomount/dev/sdb1/mnt/usb

Embedded Labworks

GUIAS DE REFERNCIA E ESTUDO

Alguns guias de referncia e estudo esto disponveis no ambiente de laboratrio em docs/guides:

GuiaFocaLinux.pdf (guia foca Linux iniciante/intermedirio). Guia-Ubuntu.pdf (guia do iniciante Ubuntu). vi.pdf (editor de textos vi). shell.pdf (linha de comandos do shell). canivete-shell.pdf (canivete suo do shell). lkn.tar.gz (livro Linux Kernel in a Nutshell). ldd3.tar.bz2 (livro Linux Device Drivers 3ed).

Embedded Labworks

LABORATRIO

Estudando a linha de comandos

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

i.MX53 Quick Start Board

Embedded Labworks

i.MX53 QUICK START BOARD

Embedded Labworks

CARACTERSTICAS

CPU i.MX535 de 1GHz da Freescale (Cortex-A8). 1GB de memria RAM DDR3. Conector para carto SD/MMC, microSD e interface SATA. Sadas de udio estreo e vdeo VGA, e entrada para microfone. Conector de expanso com sadas HDMI, display LCD, cmera e SDIO. Interfaces USB host/device, Ethernet, UART, JTAG, botes, leds, etc.

Embedded Labworks

DIAGRAMA DE BLOCOS

Embedded Labworks

REFERNCIAS E DOCUMENTAO

A documentao do hardware esta disponvel no ambiente de laboratrio em docs/guides:

CPU_DS_iMX53.pdf (i.MX53 datasheet) BOARD_DS_IMX53.pdf (board reference) BOARD_UG_IMX53.pdf (user's guide) BSP_LINUX_mx53.tar.gz (Linux BSP)

Recursos na internet: http://www.freescale.com/imxquickstart http://community.freescale.com/community/imx

Embedded Labworks

CONECTANDO O HARDWARE

Embedded Labworks

LABORATRIO

Conectando e testando o hardware

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Toolchain

Embedded Labworks

O QUE SO TOOLCHAINS?

Ao p da letra, e traduzindo literalmente, toolchain uma "corrente de ferramentas". Na prtica, um conjunto de ferramentas de compilao. Voc se lembra do processo de compilao de um cdigo em C? Ele envolve normalmente as seguintes etapas: pr-processamento, compilao, 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 disponveis em um desktop GNU/Linux so chamadas de toolchain nativo. Este toolchain roda na sua mquina e compila cdigo para ser executado na sua mquina, geralmente um x86. Em desenvolvimento de sistemas embarcados normalmente complicado (s vezes at impossvel) usar um toolchain nativo, porque precisamos de bastante espao em disco, capacidade de processamento, memria, etc. Portanto, para esta tarefa, o melhor usar um cross-compiling toolchain, que roda na sua plataforma de desenvolvimento mas gera cdigo para a sua plataforma alvo.

Embedded Labworks

TIPOS DE TOOLCHAIN (cont.)

Cdigo-fonte Toolchain nativo Cross-compiling toolchain x86 Host

Binrio x86 x86

Binrio ARM ARM

Target

Embedded Labworks

COMPONENTES DO TOOLCHAIN

Compilador (GCC)

Biblioteca C padro

Binutils

Headers do kernel

Debugger (GDB) Toolchain

Embedded Labworks

COMPILADOR GCC

Compilador GNU C, o famoso compilador de software livre. http://gcc.gnu.org/ Compatvel com as linguagens C, C++, Ada, Fortran e Java, dentre outras. Pode gerar cdigo para diversas arquiteturas, incluindo ARM, AVR, Blackfin, MIPS, PowerPC, x86, etc.

Embedded Labworks

BINUTILS

Binutils um conjunto de ferramentas para manipular arquivos binrios para uma arquitetura especfica. http://www.gnu.org/software/binutils/ Algumas das principais ferramentas disponibilizadas pelo binutils:

as: assembler, gera o binrio baseado em um cdigo Assembly. ld: linker. ar, ranlib: usadas para gerar arquivos .a (normalmente bibliotecas). objdump, readelf, size, nm, strings: inspecionar binrios. strip: remove partes no usadas do binrio para diminuir seu tamanho.

Embedded Labworks

BIBLIOTECA C

O que a biblioteca C?

Interface entre as aplicaes e o kernel. API para desenvolvimento de aplicaes.

Aplicaes Biblioteca C

O toolchain depende da biblioteca C, j que ele ir link-la com sua aplicao para gerar os binrios para a arquitetura-alvo. Diversas bibliotecas C esto disponveis: glibc, eglibc, uClibc, dietlibc, etc.

Kernel

Embedded Labworks

GLIBC

Biblioteca C do projeto GNU. http://www.gnu.org/software/libc/ Usada em boa parte dos sistemas GNU/Linux (desktop e servidores). Projetada com foco em performance e portabilidade. Dependendo do seu sistema, pode no ser uma boa escolha, j que possui um consumo considervel de espao em disco/flash e memria RAM. Existe uma variante chamada eglibc (embedded glibc) compatvel com a glibc (binrio e cdigo-fonte) e com foco em sistemas embarcados. Atualmente a eglibc usada inclusive em algumas distribuies Linux.

Embedded Labworks

UCLIBC

Mais leve e projetada para sistemas embarcados. http://www.uclibc.org/ Foco maior na economia de recursos do que na performance. Em uma arquitetura ARM, chega a ser 4 vezes menor que a glibc, com aproximadamente 600K! Altamente configurvel. Comunidade de desenvolvimento do projeto bem ativa. Usada em grande parte do dispositivos de consumo com Linux embarcado.

Embedded Labworks

COMPARANDO GLIBC E UCLIBC

Comparao realizada em uma arquitetura ARM

Embedded Labworks

KERNEL HEADERS

Sabemos que o toolchain depende da biblioteca C do sistema. Mas a biblioteca C, por sua vez, depende do kernel! Por que?

Chamadas de sistema. Definies de constantes. Estruturas de dados.

Por isso, para compilar a biblioteca C, o toolchain precisa dos arquivos de cabealho do kernel. Disponveis em <linux/...>, <asm/...> e alguns outros diretrios dentro do diretrio include nos fontes do kernel.

Embedded Labworks

KERNEL HEADERS (EXEMPLOS)

Nmeros das chamadas de sistema em <asm/unistd.h>:


#define__NR_exit1 #define__NR_fork2 #define__NR_read3

Definies de constantes em <asmgeneric/fcntl.h>:


#defineO_RDWR00000002

Estruturas de dados em <asm/stat.h>:


structstat{ unsignedlongst_dev; unsignedlongst_ino; [...] };

Embedded Labworks

USANDO TOOLCHAINS

Existem basicamente duas solues para instalar e usar um toolchain:


1. Usar um toolchain pronto, fornecido por uma empresa ou pela comunidade. 2. Configurar e gerar seu prprio toolchain de acordo com suas necessidades.

Embedded Labworks

USANDO UM TOOLCHAIN PRONTO

Soluo adotada em muitos projetos:

Vantagem: simples e conveniente. Desvantagem: inflexvel, voc no consegue otimizar o toolchain de acordo com suas necessidades.

Possveis escolhas:

Toolchain fornecido pelo fabricante do chip (ex: Freescale). Toolchain fornecido por empresas especializadas (ex: Mentor Graphics). Toolchain fornecido pela comunidade (ex: Linaro).

Uma referncia bem completa de toolchains em: http://elinux.org/Toolchains

Embedded Labworks

INSTALANDO E USANDO

Basta seguir o procedimento do fornecedor da soluo. Normalmente, estes so os passos:

Baixar e descompactar a toolchain em um diretrio na sua mquina. Adicionar no PATH o diretrio onde se encontram os binrios: exportPATH=/path/to/toolchain/bin/:$PATH Compilar sua aplicao usando o toolchain: PREFIXgccteste.coteste

O PREFIX depende da configurao do toolchain, e permite diferenciar toolchains nativos de toolchains para cross-compilao.

Embedded Labworks

LABORATRIO

Instalando e testando um toolchain pronto

Embedded Labworks

GERANDO SEU PRPRIO TOOLCHAIN

Gerar um toolchain manualmente uma tarefa difcil e dolorosa! Pode levar muitos dias!

necessrio aprender muitos detalhes, muito componentes para configurar e compilar. Muitas decises para serem feitas manualmente: verso da biblioteca C, headers do kernel, binutils, etc. Precisa dos headers do kernel e dos fontes de todos os componentes. Precisa estar familiarizado com o gcc. Algumas plataformas necessitam que sejam aplicados patches em alguns componentes antes de compilar.

Embedded Labworks

USANDO FERRAMENTAS

Existem ferramentas que automatizam o processo de gerao de toolchains. Voc no precisa se preocupar com o processo de gerao do toolchain, dependncias, patches, etc. E por outro lado, estas ferramentas oferecem a flexibilidade de configurao e seleo dos componentes do toolchain e de suas verses.

Embedded Labworks

ALGUMAS FERRAMENTAS

Crosstool (suporta apenas glibc): http://www.kegel.com/crosstool Crosstool-ng (suporta glibc, uClibc, eglibc): http://crosstool-ng.org/ Buildroot (sistema de build completo, apenas uClibc): http://www.buildroot.net PTXDist (suporta uClibc ou glibc): http://www.pengutronix.de/software/ptxdist/index_en.html OpenEmbedded (sistema de build completo): http://www.openembedded.org/

Embedded Labworks

LABORATRIO

Compilando seu prprio toolchain com o crosstool-ng

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Bootloader

Embedded Labworks

BOOTLOADERS

O bootloader o cdigo responsvel por:

Inicializao bsica do hardware. Carregar outro binrio (normalmente um sistema operacional) da memria flash, da rede ou de outro dispositivo de armazenamento no voltil para a RAM. Passar o controle da CPU para este binrio.

Alm destas funcionalidades bsicas, a maioria dos bootloaders possui uma linha de comandos para a execuo de diferentes operaes, como verificao de memria, formatao da flash e rotinas de diagnstico.

Embedded Labworks

BOOTLOADERS NO X86

em ROM

BIOS

Plataformas x86 normalmente vem acompanhadas de uma memria no-voltil, a BIOS. Um programa na BIOS executado no boot do equipamento, que faz a inicializao bsica do hardware, carrega para a memria e executa os primeiros 512 bytes do dispositivo de boot. Estes 512 bytes tambm so chamados de MBR. A MBR o bootloader de 1o. estgio, que o responsvel por carregar um bootloader de 2o. estgio do disco para a RAM. O bootloader de 2o. estgio mais completo, entende sistemas de arquivo, consegue ler o sistema operacional do disco e carregar para a memria.
Estgio 1 512 bytes do disco

Estgio 2

do disco

do disco

SO

Embedded Labworks

BOOTLOADERS NO X86 (cont.)

LILO, j foi bastante utilizado, mas caiu em desuso. http://lilo.alioth.debian.org/ GRUB, Grand Unified Bootloader, o mais poderoso e o padro atualmente em desktops e servidores. http://www.gnu.org/software/grub/ Syslinux, mais utilizado em boot pela rede e por mdias removveis (floppy disk, pendrive, CD/DVD, etc). http://www.syslinux.org/

Embedded Labworks

BOOT EM CPUs EMBARCADAS

Memria fsica

Quando alimentada, a CPU comea a execuo em um endereo fixo. No existe nenhum mecanismo de boot provido pela CPU ou pela plataforma. O projeto de hardware deve garantir que a memria flash esteja com seu barramento de endereos ligados corretamente, de forma que o endereo de incio de execuo das instrues esteja acessvel pela CPU. Soluo comum em microcontroladores.
Execuo comea aqui

NOR flash

RAM

Embedded Labworks

BOOT EM CPUs EMBARCADAS (cont.)

Memria fsica

Neste caso, como o cdigo executado direto da flash (XIP), o uso de memrias flash NOR obrigatrio. Mas como o Linux precisa de pelo menos alguns MBs de memria, o uso de flash NOR invivel por ser muito mais cara. Por este motivo, o Linux usa normalmente memrias flash NAND. Mas como no conseguimos executar cdigo diretamente de memrias flash NAND, precisamos de RAM. E quem ir configurar a controladora da SDRAM e carregar o cdigo da flash para a RAM no boot do equipamento? O bootloader!
RAM

Execuo comea aqui

NOR flash

Embedded Labworks

BOOT EM LINUX EMBARCADO

Em Linux embarcado, e principalmente em plataformas ARM, muito comum termos um processo de boot dividido em 3 estgios:
1. A CPU tem um cdigo de boot integrado em uma ROM interna, responsvel por carregar o bootloader de 1o. estgio de uma unidade de armazenamento no voltil para a memria RAM interna (SRAM ou IRAM). 2. O bootloader de 1o. estgio deve inicializar o hardware (CPU, DRAM, GPIOs, etc) e carregar um bootloader de 2o. estgio para a RAM. 3. O bootloader de 2o. estgio carrega o sistema operacional (kernel Linux) para a RAM e executa.

Embedded Labworks

LPC3250 (NXP)
ROM Code

Tenta o boot pela porta serial (modo de servio), SPI, barramento externo e flash NAND, carregando o cdigo para a SRAM (56KB). Kickstart roda da SRAM, inicializa hardware e carrega o stage 1 loader, um bootloader completo que possui diversas funes para configurar o hardware. O S1L carrega o bootloader de 2o. estgio para a RAM. Roda da RAM. Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader no existe mais).

Kickstart/S1L

U-Boot

Linux Kernel

Embedded Labworks

i.MX28 (FREESCALE)
ROM Code

Cdigo de boot em ROM iniciado quando o i.MX28 resetado. L as chaves de seleo do modo de boot para identificar a fonte do boot (USB, SD/MMC, NAND, I2C, SPI, JTAG). O ROM code trabalha com o conceito de boot stream, um conjunto de bootlets, que so pequenos executveis para extender o bootloader, como o power_prep (configura PM) e o boot_prep (configura a memria SDRAM e carrega o U-Boot). Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader no existe mais).

Bootlets

U-Boot

Linux Kernel

Embedded Labworks

i.MX53 (FREESCALE)
ROM Code

Cdigo de boot em ROM iniciado quando o i.MX53 resetado. L o registrador BOOT_MODE ou um conjunto de GPIOs para determinar o dispositivo de boot (NOR/NAND, carto SD/MMC, SATA, etc). Carrega um pedao do U-Boot para a RAM interna (72K). Este cdigo do U-Boot ir inicializar o hardware (clock, SDRAM, etc) e carregar o U-Boot completo para a RAM. Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader no existe mais).

U-Boot (1)

U-Boot (2)

Linux Kernel

Embedded Labworks

OMAP3530/AM35x (TI)
ROM Code

Procura por imagens de boot na NAND, UART, USB e MMC, e carrega para a SRAM (64KB). Um boto pode mudar a ordem da busca. Roda da SRAM. Inicializa a controladora da SDRAM, NAND ou MMC, e carrega o bootloader de 2o. estgio para a RAM.

X-Loader

U-Boot

Roda da RAM. Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader no existe mais).

Linux Kernel

Embedded Labworks

AT91 (ATMEL)
ROM Code

Procura por imagens de boot em diversos dispositivos de armazenamento, e carrega para a SRAM (4KB). Roda da SRAM. Inicializa a controladora da DRAM e carrega o bootloader de 2o. estgio para a RAM.

AT91Bootstrap

U-Boot

Roda da RAM. Inicializa alguns dispositivos de hardware (rede, USB, etc). Carrega a imagem do kernel na RAM e passa o controle para ele. Roda da RAM. Assume o controle do sistema (a partir daqui, o bootloader no existe mais).

Linux Kernel

Embedded Labworks

BOOTLOADERS EM LINUX EMBARCADO

O bootloader de 1o. estgio normalmente fornecido pelo fabricante do chip, e cada plataforma tem o seu. Nosso foco no bootloader de 2o. estgio. Existem alguns bootloaders open source. Dentre eles, os dois mais conhecidos e utilizados so:

U-Boot: bastante popular em ARM, mas tambm usado em outras arquiteturas como MIPS e PPC. http://www.denx.de/wiki/U-Boot Barebox: sucessor do U-Boot, melhor projeto, melhor cdigo, desenvolvimento ativo, mas ainda com pouco suporte hardware. http://www.barebox.org

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 trs meses uma verso liberada (as verses so nomeadas com o formato YYYY.MM). Documentao disponvel em: http://www.denx.de/wiki/U-Boot/Documentation

Embedded Labworks

FUNCIONALIDADES DO U-BOOT

Exibir informaes do hardware (memria, perifricos, etc). Manipular a RAM (ler, escrever, comparar, testar, etc). Manipular memrias flash (ler, escrever, apagar, etc). Boot via memria flash. Boot via rede (bootp, tftp, dhcp, serial).

Embedded Labworks

FUNCIONALIDADES DO U-BOOT (cont.)

Boot por interfaces SD/MMC ou USB. Entende parties FAT. Configurao por variveis de ambiente e suporte scripts. Executa cdigo bare-metal. Carrega e executa imagens do kernel Linux. Etc!

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 cdigo 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 documentao 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 o kit de desenvolvimento i.MX53 Quick Start Board:
makemx53_loco_config

Embedded Labworks

COMPILANDO O U-BOOT

Para compilar o U-Boot, basta executar o comando make passando o prefixo do cross-compiler. Exemplo:
makeCROSS_COMPILE=armlinux

No se esquea de incluir na varivel de ambiente PATH o caminho do diretrio do toolchain. No final, ser gerada a imagem do u-boot para ser gravada no target. Se voc quiser fazer uma compilao limpa, ou configurar o U-Boot para outra placa, execute antes o comando abaixo para fazer a limpeza:
makemrproper

Embedded Labworks

GRAVANDO O U-BOOT

O processo de gravao do U-Boot pode ser feito de diferentes formas, dependendo do target:

O bootloader de 1o. estgio pode fornecer um mecanismo de escrita na flash. O sistema pode ser configurado para iniciar por uma mdia removvel (Ex: carto SD). A CPU pode fornecer um monitor de boot que se comunica via serial ou USB. JTAG. Etc!

Embedded Labworks

LABORATRIO

Compilando e gravando o U-Boot

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Kernel Linux

Embedded Labworks

VISO GERAL
Aplicao Biblioteca Aplicao Biblioteca Biblioteca C Aplicao User space

Chamadas de sistema

Notificao de eventos Exportao de informaes

Kernel
Gerenciamento do hardware Notificao de eventos

Hardware

Embedded Labworks

HISTRICO

O kernel um dos componentes do sistema operacional, que requer bibliotecas e aplicaes para prover funcionalidades aos usurios. Criado em 1991 pelo estudante finlands Linus Torvalds, comeou a ser usado rapidamente como sistema operacional em projetos de software livre. Linus Torvalds foi capaz de criar uma comunidade grande e dinmica de desenvolvedores e usurios ao redor do projeto. Atualmente, centenas de pessoas e empresas contribuem com o projeto.

Embedded Labworks

COLABORAO

Embedded Labworks

ARQUITETURA

Embedded Labworks

GERENCIAMENTO DE PROCESSOS

Um processo um programa em execuo, que possui um identificador (PID) e esta associado um conjunto de recursos como arquivos abertos, mapeamento de memria, etc. Um processo contm uma ou mais linhas de execuo, chamadas de threads. Cada thread possui um contador de programa, uma regio do stack e uma cpia dos registradores da CPU. Internamente, o Linux no diferencia processos e threads. Uma thread nada mais do que um processo que compartilha recursos com outras threads! Por este motivo, o Linux escalona threads, e no processos.

Embedded Labworks

GERENCIAMENTO DE PROCESSOS (cont.)

Trade-off entre capacidade de processamento e tempo de resposta (latncia). O Linux um sistema multitasking preemptivo. Ele possui o conceito de classes de escalonador, onde cada classe possui um algoritmo de escalonamento, que decide qual processo deve ser executado, quando e por quanto tempo. O escalonador padro do Linux o CFS (Completely Fair Scheduler), onde cada processo recebe uma "porcentagem justa" da CPU (foco em performance).

Embedded Labworks

GERENCIAMENTO DE PROCESSOS (cont.)

Possui tambm um escalonador para processos de tempo real, que tem prioridade sobre o CFS. Mas mesmo assim, o Linux no pode ser considerado um sistema operacional determinstico (em alguns trechos do cdigo a latncia para atender um pedido de interrupo pode ser muito grande). Existem um conjunto de patches (PREEMPT_RT) que podem ser aplicados no kernel e melhorar este cenrio de alta latncia. Uma opo para o uso do Linux em aplicaes hard real-time a utilizao de um kernel de tempo real em conjunto com o Linux (RTLinux, RTAI, Xenomai).

Embedded Labworks

GERENCIAMENTO DE MEMRIA

O Linux trabalha com o mecanismo de memria virtual para gerenciar a memria do sistema. Em um sistema com memria virtual, todo o acesso memria do sistema realizado atravs de endereos virtuais, que so convertidos (por hardware) para endereos fsicos durante o acesso memria do sistema. A MMU (Memory Management Unit) o hardware que implementa o mecanismo de memria virtual, gerenciando a memria do sistema e fazendo a converso entre endereos de memria fsicos e virtuais.

Embedded Labworks

GERENCIAMENTO DE MEMRIA (cont.)

Um sistema com MMU capaz de prover:

Maior endereamento de memria para os processos: em uma arquitetura de 32 bits, os processos tem acesso um endereamento linear de 4G de memria virtual. Proteo: cada processo s enxerga seu espao de endereamento, onde um acesso invlido gera uma exceo (segmentation fault). Memory mapping: possibilidade de mapear um arquivo fsico em memria. Compartilhamento: os processos podem compartilhar memria (cdigo, dados, etc), usado por exemplo em mecanismos de IPC. SWAP: se faltar memria fsica, possibilita salvar e recuperar pginas de memria do disco.

Embedded Labworks

SISTEMA DE ARQUIVO VIRTUAL

O Linux fortemente baseado em arquivos (quase tudo no sistema representado por um arquivo). O kernel implementa a camada VFS (Virtual Filesystem) que abstrai o acesso aos arquivos, possibilitando que rotinas de acesso ao arquivo (open, read, write, close, etc) sejam mapeadas para diferentes destinos.

Embedded Labworks

SISTEMA DE ARQUIVO VIRTUAL (cont.)

Exemplo 1: Mapeando um arquivo fsico em um dispositivo de armzenamento (copiando um arquivo do HD para um pendrive):
cp/usr/sbin/app/mnt/pendrive/

Exemplo 2: Mapeando um arquivo virtual (listando a estatstica de uso de memria do sistema):


cat/proc/meminfo

Exemplo 3: Mapeando o acesso ao hardware (escrevendo na porta serial):


echo"Teste">/dev/ttyS0

Embedded Labworks

KERNEL SPACE x USER SPACE

Existe uma separao bem definida entre o kernel (kernel space) e as bibliotecas e aplicaes do usurio (user space). O kernel roda em modo privilegiado, com total acesso todas as instrues da CPU, endereamento de memria e I/O, enquanto que os processos do usurio rodam em modo restrito, com acesso limitado aos recursos da mquina. Por isso, existe uma interface de comunicao, baseada chamadas de sistema (system calls), para que as bibliotecas e aplicaes tenham acesso aos recursos da mquina.

Embedded Labworks

CHAMADAS DE SISTEMA

O Linux possui aproximadamente 300 chamadas de sistema. Operaes em arquivos, operaes de rede, comunicao entre processos, gerenciamento de processos, mapeamento de memria, timers, threads, mecanismos de sincronizao, etc. As chamadas de sistema so abstradas pela biblioteca C padro. As aplicaes normalmente no precisam fazer uma chamada direta. Tudo feito atravs da biblioteca C padro. A interface de chamadas de sistema bem estvel. Durante novas verses do kernel, apenas novas chamadas de sistema so adicionadas.

Embedded Labworks

VERSIONAMENTO

Antes da verso 2.6:

Uma rvore de verses estveis (1.0, 2.0, 2.2, 2.4). Uma rvore de verses de desenvolvimento (2.1, 2.3, 2.5).

A partir de 2003, apenas uma rvore: 2.6.X. Em 2011, a verso mudou para 3.0.

Embedded Labworks

CICLO DE RELEASE

Processo de desenvolvimento a cada aproximadamente 3 meses.

Merge window: 2 semanas (at sair 3.X-rc1). Bug fixing: 6 a 10 semanas (3.X-rc2, 3.X-rc3, etc).

Em aproximadamente 3 meses temos a liberao do release final 3.X. Para acompanhar as mudanas no kernel: http://wiki.kernelnewbies.org/LinuxChanges http://lwn.net

Embedded Labworks

FONTES DO KERNEL

A verso oficial do cdigo-fonte do kernel liberada por Linus Torvalds encontra-se em: http://www.kernel.org Baixando os fontes por http:
wgethttp://www.kernel.org/pub/linux/kernel/v3.0/linux3.6.tar.bz2 tarxjfvlinux3.6.tar.bz2

Baixando os fontes pelo git:


gitclonegit://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 verses alternativas do kernel:

Fabricantes de hardware podem manter verses especficas do kernel com suporte s suas plataformas de referncia (BSP). Comunidades podem manter verses do kernel voltadas arquiteturas especficas (ARM, MIPS, PPC), sub-sistemas (USB, PCI, network), sistemas de tempo-real, etc.

Normalmente nestas verses alternativas so disponibilizados os patches para serem aplicados em uma determinada verso do kernel. Portanto, consulte a documentao da sua plataforma para saber como e onde baixar os fontes do Linux.

Embedded Labworks

TAMANHO DOS FONTES DO KERNEL

Fontes do kernel 3.4.9:

Tamanho total: 518MB ~38.600 Arquivos ~15.400.000 linhas de cdigo

Porque os fontes so to grandes? Milhares de drivers de dispositivo, diversos protocolos de rede, suporte a diferentes arquiteturas e plataformas. O core do kernel bem pequeno!

Embedded Labworks

TAMANHO DOS FONTES DO KERNEL (cont.)


Linux 2.6.39

Embedded Labworks

LICENA

Todo o cdigo-fonte do Linux software livre e liberado sob a licena GPLv2. Isso significa que:

Quando voc receber ou comprar um equipamento com Linux embarcado, voc tem o direito de requisitar os fontes, alter-los e redistribu-los! Quando voc produzir um equipamento com Linux embarcado, voc precisa liberar os fontes do kernel sob as mesmas condies, sem restries.

Embedded Labworks

LICENA (cont.)

Portanto, ilegal distribuir um binrio do kernel com mdulos compilados estaticamente. Os mdulos do kernels so uma rea cinza: um trabalho derivado do kernel ou no?

A opinio geral da comunidade de que drivers fechados so ruins. Sob um ponto de vista legal, cada driver provavelmente um caso diferente. Ex: Nvidia. realmente til manter um driver proprietrio?

Embedded Labworks

VANTAGENS DE DRIVERS GPL

Voc no precisa escrever um driver do zero, podendo reusar o cdigo de outros drivers. Voc pode integrar o seu driver na rvore oficial do kernel, e no se preocupar com qualquer alterao em APIs internas do Linux. Custo zero de manuteno e melhorias no driver! Com drivers abertos voc tem suporte da comunidade, com mais pessoas revisando e colaborando com seu driver. Os usurios e a comunidade tem uma viso positiva da empresa.

Embedded Labworks

LABORATRIO

Baixando e estudando os fontes do kernel

Embedded Labworks

CONFIGURANDO O KERNEL

O kernel possui centenas de drivers de dispositivo, diversos protocolos de rede e muitos outros itens de configurao. O kernel bem modular, milhares de opes esto disponveis para serem habilitadas ou desabilitadas. O processo de configurao serve para voc configurar o kernel para ser compilado para sua CPU/plataforma. O conjunto de opes que voc ir habilitar depende:

Do seu hardware (device drivers, etc). Das funcionalidades (protocolos de rede, sistemas de arquivo, etc).

Embedded Labworks

CONFIGURAO

As configuraes so salvas em um arquivo chamado .config no diretrio 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 grfica para configurar o kernel e gerar o arquivo de configurao automaticamente:
makemenuconfig makegconfig makexconfig makenconfig

Embedded Labworks

make xconfig

Embedded Labworks

make gconfig

Embedded Labworks

make nconfig

Embedded Labworks

make menuconfig

Embedded Labworks

CONFIGURANDO O KERNEL (cont.)

O kernel um binrio nico, resultado do processo de linkagem de todos os arquivos-objeto das funcionalidades que voc habilitou, incluindo os device drivers. O kernel permite que algumas funcionalidades possam ser habilitadas e compiladas de duas formas:

Esttica ou built-in: a funcionalidade selecionada linkada estaticamente imagem final do kernel. Dinmica ou mdulo: gerado um mdulo daquela funcionalidade (arquivo com extenso .ko). Este mdulo no incluido na imagem final do kernel. Ele incluido no sistema de arquivos e pode ser carregado dinamicamente (em tempo de execuo), conforme a necessidade.

Embedded Labworks

OPES DE CONFIGURAO

Opes booleanas (verdadeiro/falso):


[]Opodesabilitada [*]Opohabilitada

Opes de 3 estados:
<>Opodesabilitada <*>Opohabilitada(builtin) <M>Opohabilitada(mdulo)

Nmeros inteiros. Ex: (17)Kernellogbuffersize Strings. Ex: (iso88591)DefaultiocharsetforFAT

Embedded Labworks

DEPENDNCIAS

Na configurao do kernel, podem existir dependncias entre funcionalidades:

Exemplo 1: o driver de um dispositivo I2C depende da habilitao do barramento I2C para ser habilitado. Exemplo 2: o driver do barramento USB habilitado automaticamente quando o driver de um dispositivo USB habilitado.

Embedded Labworks

CONFIGURAO POR ARQUITETURA

Toda a configurao do kernel dependente da arquitetura. Por padro, o kernel considera uma compilao nativa, ento ir usar a arquitetura da mquina de desenvolvimento (normalmente x86) no comando abaixo:
makemenuconfig

Portanto, para configurar para ARM por exemplo, voc precisa especificar a arquitetura:
makeARCH=armmenuconfig

Ao invs de passar a varivel ARCH na chamada do make, voc pode tambm defin-la como varivel de ambiente ou alterar o arquivo Makefile do diretrio principal do kernel.

Embedded Labworks

CONFIGURAES PR-DEFINIDAS

Arquivos de configurao pr-definidos para diversas plataformas esto disponveis em arch/<arch>/configs/. O uso de arquivos pr-configurados a forma padro de configurar um kernel para uma plataforma especfica. Por exemplo, para carregar a configurao padro do kit de desenvolvimento i.MX53 Quick Start Board:
makeimx5_defconfig

Se voc mexeu na configurao padro e deseja salv-la, pode criar uma cpia conforme exemplo abaixo:
cp.configarch/<arch>/configs/myconfig_defconfig

Embedded Labworks

VALIDANDO O ARQUIVO DE CONFIGURAO

O comando abaixo faz a validao e a consistncia do arquivo de configurao do kernel:


makeoldconfig

Ele avisa e configura automaticamente parmetros e dependncias que antes no existiam. Deve ser usado sempre que:

Voc alterar o arquivo .config manualmente. Voc reutilizar o mesmo .config em diferentes verses do kernel.

Embedded Labworks

LABORATRIO

Configurando o kernel

Embedded Labworks

COMPILANDO O KERNEL

Depois de configurado, para compilar nativamente basta executar:


make

No precisa de previlgios de root! Para cross-compilar, voc precisa indicar a arquitetura e o prefixo do cross-compiler. Exemplo:
makeARCH=armCROSS_COMPILE=armlinux

O comando acima ir gerar uma imagem genrica para ARM. Se voc quiser gerar uma imagem especfica para determinado bootloader, deve adicionar ao fim do comando o nome da imagem. Exemplo para o U-Boot:
makeARCH=armCROSS_COMPILE=armlinuxuImage

Embedded Labworks

COMPILANDO O KERNEL (cont.)

Ao fim do processo de compilao, sero geradas as seguintes imagens:

vmlinux: gerada no diretrio raiz dos fontes, a imagem do kernel no formato ELF, que no bootavel, mas pode ser usada para debugging. Mdulos do kernel: arquivos com extenso .ko dentro dos respectivos diretrios dos drivers. Em arch/<arch>/boot/:

Image: imagem final do kernel, bootvel e descomprimida. *Image: imagem bootvel 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:


makeinstall

Este comando ir instalar os seguintes arquivos no diretrio /boot:

vmlinuz-<version> (imagem do kernel comprimida) System.map-<version> (endereos dos smbolos do kernel) config-<version> (arquivo de configurao do kernel)

Normalmente no usado em sistemas embarcados! Em sistemas embarcados, normalmente gravamos o kernel em um dispositivo de armazenamento (carto SD, memria flash, etc).

Embedded Labworks

FAZENDO A LIMPEZA

Remove todos os arquivos gerados (imagens, arquivos-objeto, etc).


makeclean

Remove todos os arquivos de gerados e arquivos de configurao (usado quando pretende-se mudar de plataforma).
makemrproper

Alm dos arquivos gerados e arquivos de configurao, remove tambm arquivos de backup (bom para gerar patches).
makedistclean

Embedded Labworks

LINHA DE COMANDOS DO KERNEL

Ao ser carregado, o kernel pode receber um conjunto de parmetros. Chamamos esses parmetros de linha de comandos do kernel. Esta linha de comandos pode ser passada ao kernel de duas formas:

Pelo bootloader. Hardcoded configurao CONFIG_CMDLINE. na do kernel, atravs da opo

Esta linha de comandos uma string com diversas opes no formato key=value.

Embedded Labworks

LINHA DE COMANDOS DO KERNEL (cont.)


console=ttySAC0root=/dev/mtdblock3rootfstype=jffs2

Onde:

console = dispositivo que ser usado como console root = dispositivo onde se encontra o sistema de arquivos rootfstype = tipo do sistema de arquivos (JFFS2)

Existem dezenas de outras opes! Documentao disponvel em: Documentation/kernel-parameters.txt

Embedded Labworks

LABORATRIO

Compilando e testando o kernel

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Rootfs

Embedded Labworks

SISTEMAS DE ARQUIVO

Sistemas de arquivo so usados para organizar dados, de forma hierrquica, em diretrios e arquivos disponveis em dispositivos de armazenamento (locais ou remotos). Em sistemas Unix, aplicaes e usurios enxergam apenas uma hierarquia nica e global de arquivos e diretrios, que podem ser compostos por diferentes sistemas de arquivo. Um ou mais sistemas de arquivo so montados em locais especficos nesta hierarquia de diretrios.

Embedded Labworks

SISTEMAS DE ARQUIVO (cont.)

Quando um sistema de arquivo montado em um diretrio, este diretrio chamado de ponto de montagem ou mount point, e o contedo deste diretrio ir refletir o contedo armazenado no dispositivo de armazenamento. Isso permite que aplicaes acessem diretrios e arquivos facilmente independentemente da localizao ou do tipo do dispositivo de armazemanento. Tudo o que as aplicaes enxergam so arquivos e diretrios!

Embedded Labworks

O COMANDO MOUNT

O comando mount permite montar um sistema de arquivo:


mountttypedevicemountpoint

Onde:

-t type opcional e identifica o tipo do sistema de arquivo (fat, ext3, jffs2, etc). device o dispositivo de armazenamento, ou local na rede, onde esto armazenados os dados. mountpoint o diretrio onde os arquivos sero acessados, tambm chamado de ponto de montagem.

Embedded Labworks

O COMANDO UMOUNT

O comando umount permite desmontar um sistema de arquivo:


umount<dispositivooupontodemontagem>

Quando trabalhamos com dispositivos removveis, necessrio executar o umount antes de remover o dispositivo, j que o Linux por padro mantm em cache as alteraes realizadas no dispositivo para melhorar a performance, e o umount garante que estas alteraes sejam realizadas antes da remoo do dispositivo.

Embedded Labworks

MONTANDO UM SISTEMA DE ARQUIVO

Criando o diretrio (ponto de montagem):


mkdir/mnt/usbkey

Montando um pendrive:
mounttvfat/dev/sda1/mnt/usbkey

Verificando o contedo:
ls/mnt/usbkey docsprog.cpicture.pngmovie.avi

Desmontando o dispositivo USB:


umount/mnt/usbkey

Embedded Labworks

SISTEMA DE ARQUIVO ROOT

Um sistema de arquivo especfico montado na raiz principal da hierarquia, identificado pelo /. Este sistema de arquivo chamado de root ou rootfs. Como ele o primeiro sistema de arquivo a ser montado, no tem como faz-lo com o comando mount, j que o mesmo ainda no esta disponvel. Lembre-se: ainda no existe nenhum sistema de arquivo montado! Por isso, o responsvel por esta tarefa o kernel, de acordo com a opo root na linha de comandos do kernel.

Embedded Labworks

SISTEMA DE ARQUIVO ROOT (cont.)

Se voc no passar a opo root na linha de comando, o kernel entra em pnico!


Pleaseappendacorrect"root="bootoption Kernel panic not syncing: VFS: Unable to mount rootfsonunknownblock(0,0)

Passando a opo root para o kernel:


...console=ttyS2,115200n8root=/dev/sda2...

Embedded Labworks

LOCALIDADES DO ROOTFS

O rootfs pode ser montado de diferentes localidades:

Da partio de um HD. Da partio de um pendrive. Da partio de um carto SD. Da partio de uma memria flash NAND. Pela rede, atravs do protocolo NFS. Da memria, pr-carregado pelo bootloader.

nossa a deciso de como iniciar o sistema, e assim configurar corretamente a opo root do kernel.

Embedded Labworks

MONTANDO O ROOTFS

Partio de um HD ou pendrive USB:

root=/dev/sdXY, onde X uma letra que indica o dispositivo e Y

o nmero da partio.

Exemplo: root=/dev/sdb2

Partio de um carto SD

root=/dev/mmcblkXpY, onde X um nmero de identificao do

dispositivo, e Y o nmero da partio.

Exemplo: root=/dev/mmcblk0p2

Embedded Labworks

MONTANDO O ROOTFS (cont.)

Partio de uma memria flash NAND:

root=/dev/mtdblockX, onde X o nmero da partio.

Exemplo: root=/dev/mtdblock3

Embedded Labworks

MONTANDO O ROOTFS VIA REDE

Uma vez que sua rede esteja funcionando, o rootfs pode estar na sua mquina de desenvolvimento, e ser exportado via protocolo NFS (Network File System).
Host Servidor NFS Target Cliente NFS

Muito mais fcil e rpido de atualizar o rootfs sem precisar gravar na flash e reiniciar o equipamento. Possibilidade de ter um rootfs bem grande, podendo incluir ferramentas e binrios que no caberiam na flash do equipamento.

Embedded Labworks

MONTANDO O ROOTFS EM MEMRIA

Tambm possvel ter uma imagem de rootfs integrada imagem do kernel, sendo por consequncia carregada em memria junto com o kernel. Este mecanismo chamado de initramfs.

Kernel

Initramfs (cpio archive)

Imagem do kernel (uImage, zImage, bzImage, etc)

Embedded Labworks

INITRAMFS

Vantagens:

Pode ser usado como um passo intermedirio para montar o verdadeiro rootfs (mecanismo comum em desktops e servidores). Em Linux embarcado, pode ser a soluo para sistemas com pouqussimos recursos. O boot mais rpido, e como o sistema de arquivo j esta em memria, as aplicaes tambm iniciam mais rapidamente.

Desvantagens:

Como o initramfs montado em RAM, o armazenamento voltil (perde as informaes ao reiniciar).

Embedded Labworks

ORGANIZAO DO ROOTFS

A organizao do rootfs no Linux padronizada pelo Filesystem Hierarcy Standard. http://www.pathname.com/fhs/ A maioria dos sistemas Linux esto de acordo com este padro porque:

As aplicaes esperam este formato. Facilita o trabalho de usurios e desenvolvedores quando precisam trabalhar com diferentes sistemas Linux.

Embedded Labworks

DIRETRIOS MAIS IMPORTANTES


/bin /boot Programasbsicos Imagemdokernel(apenasquandoo bootloadersuportacarregarokernel dosistemadearquivos,normalmenteusado emarquiteturasx86) Arquivosdedispositivo Arquivosdeconfigurao Diretriodearquivosdosusurios Bibliotecasbsicasdosistema Pontodemontagemparamdiasremovveis Pontodemontagemparamdiasestticas Pontodemontagemdosistemadearquivo virtualproc

/dev /etc /home /lib /media /mnt /proc

Embedded Labworks

DIRETRIOS MAIS IMPORTANTES (cont.)


/root /sbin /sys /tmp /usr /usr/bin /usr/lib /usr/sbin /var Homedousurioroot Aplicaesdeadministraodosistema Pontodemontagemdosistemade arquivovirtualsysfs Arquivostemporrios Aplicaesedadosdosusurios Aplicaesbsicasdousurio Bibliotecasdousurio Aplicaesdeadministraodousurio Arquivosdedados(logs,bancode dados,arquivostemporrios,etc)

Embedded Labworks

ARQUIVOS DE DISPOSITIVO

Um conceito muito importante trazido do mundo Unix: boa parte dos objetos do sistema so representados como arquivos, permitindo que as aplicaes manipulem estes objetos usando uma API comum (open, read, write, etc). Da mesma forma, os dispositivos de hardware tambm so representados no Linux atravs de arquivos, chamados de arquivos de dispositivo, e disponveis no diretrio /dev.

Embedded Labworks

INFORMAES DOS DISPOSITIVOS

Internamente, cada arquivo de dispositivo esta associado trs informaes bsicas:

Major number: indica a categoria do dispositivo. Minor number: indica o nmero do dispositivo. Tipo do dispositivo:

Dispositivos de bloco: composto por blocos de dados de tamanho fixo, endereveis e de acesso aleatrio, que podem ser lidos e/ou escritos. Exemplos: HD, pendrive, etc. Dispositivo de caractere: possibilita o acesso sequencial de bytes, sem comeo, sem fim e sem tamanho! Exemplos: portal serial, interface de rede, placa de som, etc.

Embedded Labworks

EXEMPLOS

Exemplos de arquivos de dispositivo:


lsla/dev/ttyS*/dev/sda1 brwrw1rootdisk8,12012012506:54/dev/sda1 crwrw1rootdialout4,642012012506:54/dev/ttyS0 crwrw1rootdialout4,652012012506:54/dev/ttyS1 crwrw1rootdialout4,662012012506:54/dev/ttyS2 crwrw1rootdialout4,672012012506:54/dev/ttyS3

Escrevendo Hello na porta serial:


intfd; fd=open(/dev/ttyS0,O_RDWR); write(fd,Hello,5); close(fd);

Embedded Labworks

CRIANDO ARQUIVOS DE DISPOSITIVO

Para sistemas mais simples, os arquivos de dispositivo podem ser criados manualmente com o comando mknod ( necessrio ter privilgio de root):
mknod/dev/<device>[c|b]majorminor

Para sistemas mais complexos, existem mecanismos para adicionar e remover arquivos de dispositivo dinamicamente:

devtmpfs udev mdev

Embedded Labworks

SISTEMA DE ARQUIVO VIRTUAL PROC

O sistema de arquivo virtual proc exporta (normalmente para o diretrio /proc) um conjunto de informaes do kernel, incluindo estatsticas dos processos, memria e uso de I/O. O proc tambm possibilita ajustar parmetros do kernel em tempo de execuo. Muitas aplicaes, como os comandos ps e top, usam as informaes disponveis no /proc para exibirem informaes dos processos rodando no sistema.

Embedded Labworks

SISTEMA DE ARQUIVO VIRTUAL PROC (cont.)

Montando o proc:
mounttprocnone/proc

Mais informaes na documentao do kernel: Documentation/filesystems/proc.txt

Embedded Labworks

SISTEMA DE ARQUIVO VIRTUAL SYSFS

O sistema de arquivo virtual sysfs exporta (normalmente para o diretrio /sys) informaes de drivers e dispositivos de hardware conectados ao sistema. Usado por aplicaes que querem ler informaes dos dispositivos de hardware conectados ao sistema. Ex: mdev, udev, etc. Pode ser usado tambm para parametrizar ou configurar determinado hardware.

Embedded Labworks

SISTEMA DE ARQUIVO VIRTUAL SYSFS (cont.)

Montando o sysfs:
mounttsysfsnone/sys

Mais informaes na documentao do kernel: Documentation/filesystems/sysfs.txt

Embedded Labworks

A INICIALIZAO

Aps montar o rootfs, o kernel ir tentar executar uma aplicao de inicializao, tambm chamado de processo init. Para isso, o kernel tenta executar os binrios /sbin/init, /bin/init, /etc/init e /bin/sh. Voc pode passar tambm o nome do programa de inicializao atravs do parmetro init da linha de comandos do kernel. Exemplo:
init=/usr/bin/init

Embedded Labworks

A INICIALIZAO (cont.)

Se nenhuma destes programas de inicializao forem encontrados, o kernel entra em pnico!


Kernelpanicnotsyncing:Noinitfound.

Assim que executado, o processo init o responsvel pela inicializao do restante do sistema.

Embedded Labworks

VISO GERAL DO BOOT


Bootloader Carrega o kernel para a RAM e inicia

Kernel Monta o rootfs indicado por root= Inicia a aplicao init

/sbin/init Inicia outros servios e aplicaes

Shell

Outras aplicaes Rootfs

Embedded Labworks

MECANISMOS DE INICIALIZAO

Depois que o kernel chamou a aplicao init, responsabilidade do rootfs o restante da inicializao do sistema. Existem diferentes mecanismos de inicializao, como systemd, upstart, openrc e sysvinit (System V Init). Devido simplicidade de uso e utilizao em solues mais simples, vamos estudar aqui o sysvinit.

Embedded Labworks

SYSTEM V INIT

O sysvinit possui basicamente os seguintes componentes:

Aplicao init (o pai de todos os processos). Arquivo de configurao /etc/inittab. Scripts de inicializao em /etc/init.d/ ou /etc/rc.d/.

Embedded Labworks

/etc/inittab
#Startupthesystem null::sysinit:/bin/mounttprocproc/proc null::sysinit:/bin/mkdirp/dev/pts #nowrunanyrcscripts ::sysinit:/etc/init.d/rcS #Putagettyontheserialport ttySAC0::respawn:/sbin/gettyLttySAC0115200vt100 #Stufftodoforthe3fingersalute ::ctrlaltdel:/sbin/reboot #Stufftodobeforerebooting null::shutdown:/usr/bin/killallsyslogd

Embedded Labworks

/etc/init.d/rcS
#!/bin/sh foriin/etc/init.d/S??*;do case"$i"in *.sh) .$i ;; *) $istart ;; esac done

Embedded Labworks

/etc/init.d/
lslinit.d/ total8 rwxrxrx1rootroot4082011083108:44rcS rwxrxrx1rootroot4782011090815:02S01logging rwxrxrx1rootroot13652011083108:44S20urandom rwxrxrx1rootroot2822011083108:44S40network rwxrxrx1rootroot10922011090816:05S50dropbear rwxrxrx1rootroot732011091314:50S60leds

Embedded Labworks

CRIANDO UM ROOTFS BSICO

Um sistema Linux precisa de um conjunto bsico de programas para funcionar (init, shell, comandos bsicos, etc). Normalmente estes programas so fornecidos em diferentes projetos e trabalhoso integrar manualmente todos estes componentes. O Busybox uma soluo alternativa, trazendo uma quantidade grande e comum de programas usados em sistemas Linux, mas com tamanho reduzido, perfeito para sistemas embarcados! http://www.busybox.net/

Embedded Labworks

APLICAES DISPONVEIS 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

LABORATRIO

Gerando um rootfs simples e testando com NFS

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Kernel modules

Embedded Labworks

KERNEL MONOLTICO E MICROKERNEL

Kernel monoltico: o sistema operacional inteiro roda em kernel space, com total acesso aos recursos da mquina (CPU, memria e I/Os), e prov para as aplicaes (userspace) uma interface de comunicao atravs de chamadas de sistema (system calls). Microkernel: apenas o bsico do kernel roda em userspace (gerenciamento de memria e processos). O resto roda em userspace, incluindo sistemas de arquivos, device drivers, protocolos de rede, etc!

Embedded Labworks

MONOLTICO X MICROKERNEL

Embedded Labworks

O KERNEL LINUX

O Linux um kernel monoltico. Mas internamente o Linux bem modular. Cada funcionalidade abstrada em um mdulo, com uma interface de comunicao bem definida. Por isso, permite um sistema de configurao onde voc pode adicionar ou remover determinada funcionalidade. E o Linux permite que voc adicione dinamicamente pedaos de cdigo do kernel em tempo de execuo! Chamamos esses pedaos de cdigo de mdulos do kernel.

Embedded Labworks

VANTAGENS DOS MDULOS

Ajuda a manter a imagem do kernel bem pequena. Mdulos tornam fcil o desenvolvimento do kernel, como por exemplo device drivers, sem precisar reiniciar o equipamento. O tempo de boot fica menor: menos cdigo para ser executado na inicializao do kernel. Cuidado: mdulos rodam em kernel space. Uma vez carregados, eles tem total controle do sistema! Por isso s podem ser carregados como root.

Embedded Labworks

COMPILANDO OS MDULOS

Para compilar apenas os mdulos, basta executar:


makemodules

Para cross-compilar os mdulos, no esquea de indicar a arquitetura e o prefixo do cross-compiler. Exemplo:


makeARCH=armCROSS_COMPILE=armlinuxmodules

Embedded Labworks

INSTALANDO OS MDULOS

Para instalar os mdulos nativamente, basta executar o comando abaixo:


makemodules_install

No caso de um ambiente de compilao cruzada, os mdulos devem ser instalados no rootfs do target. Para isso, devemos passar o parmetro INSTALL_MOD_PATH no comando de instalao:
makeARCH=<arch>INSTALL_MOD_PATH=<dir>/modules_install

Embedded Labworks

DEPENDNCIAS DOS MDULOS

Alguns mdulos dependem de outros mdulos, que precisam ser carregados primeiro. Exemplo: o mdulo usb_storage depende do mdulo usbcore. As dependncias entre os mdulos esto descritas em /lib/modules/<kernelversion>/modules.dep . Este arquivo gerado quando voc instala os mdulos.

Embedded Labworks

CARREGANDO UM MDULO

O comando insmod carrega apenas um mdulo. necessrio passar o caminho completo do mdulo.
insmod<module_path>.ko

O comando modprobe carrega um mdulo e todas as suas dependncias. Deve-se passar apenas o nome do mdulo, sem a extenso .ko e sem seu caminho completo.
modprobe<module_name>

Embedded Labworks

DESCARREGANDO UM MDULO

O comando rmmod descarrega apenas um mdulo. Possvel apenas se o mdulo no estiver mais em uso. Deve-se passar apenas o nome do mdulo, sem a extenso .ko e sem seu caminho completo.
rmmod<module_name>

O comando modprobe descarrega um mdulo e todas as suas dependncias (que no esto sendo usadas). Deve-se passar apenas o nome do mdulo, sem a extenso .ko e sem seu caminho completo.
modprober<module_name>

Embedded Labworks

LISTANDO INFORMAES DOS MDULOS

O comando modinfo l informaes de um mdulo, como sua descrio, parmetros, licena e dependncias. Deve-se passar apenas o nome do mdulo, sem a extenso .ko e sem seu caminho completo.
modinfo<module_name>

O comando lsmod lista todos os mdulos carregados.


lsmod

Embedded Labworks

PASSANDO PARMETROS

Descobrindo os parmetros disponveis do mdulo:


modinfo<module>

Passando um parmetro via insmod:


insmod<module>param=value

Para passar um parmetro via modprobe, configurar o parmetro em /etc/modprobe.conf ou em qualquer arquivo em /etc/modprobe.d/:
options<module>param=value

Para passar um parmetro via linha de comandos do kernel:


<module>.param=value

Embedded Labworks

LOGS DO KERNEL

O kernel mantm um log de mensagens na memria em um buffer circular. Quando um novo mdulo carregado, informaes relevantes so enviadas ao log do kernel. Este log de mensagens pode ser exibido atravs do comando dmesg (diagnostic message). Mensagens de log tambm so exibidas na console.

Embedded Labworks

LABORATRIO

Compilando, instalando e carregando mdulos

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Sistemas de Arquivo

Embedded Labworks

SISTEMAS DE ARQUIVO

Um sistema de arquivo uma representao dos dados dentro de um dispositivo de armazenamento. Exemplos de sistemas de arquivo: FAT, NTFS, EXT2, EXT3, JFFS2. Mas por que existem diferentes sistemas de arquivo?

Performance. Segurana. Economia de espao em disco. Uso em diferentes tipos de dispositivo de armazenamento.

Embedded Labworks

DISPOSITIVOS DE ARMAZENAMENTO

No Linux, os dispositivos de armazenamento so classificados em dois tipos: dispositivos de bloco e memrias flash. Isso porque, dentro do kernel, eles so manipulados por sub-sistemas diferentes:

Dispositivos de bloco podem ser lidos ou escritos normalmente sem a necessidade de apagar antes, e virtualmente no possuem limites de escrita. Exemplo: HD. Memrias flash trabalham em blocos e para serem escritas precisam ser apagadas antes. Exemplo: flash NAND.

Por este motivo, separadamente.

vamos

estudar

estes

dois

sub-sistemas

Embedded Labworks

LISTANDO DISPOSITIVOS DE BLOCO

Uma lista com todos os dispositivos de bloco disponveis no sistema pode ser obtido em /proc/partitions:
cat/proc/partitions majorminor#blocksname 80312571224sda 81303903744sda1 821sda2 858665088sda3

Embedded Labworks

SISTEMAS DE ARQUIVO TRADICIONAIS

Existem sistemas de arquivo especficos para dispositivos de bloco. E tudo comeou com o tradicional sistema de arquivo ext2, presente no Linux desde praticamente as primeiras verses. um sistema de arquivo bem estvel, mas com um grande problema: pode deixar o sistema em um estado inconsistente aps um crash ou um reboot no esperado, fazendo com que o sistema precise usar ferramentas de verificao de disco no prximo boot (fsck.ext2).

Embedded Labworks

SISTEMAS DE ARQUIVO TRADICIONAIS (cont.)

o mesmo caso do vfat, a implementao do sistema de arquivo FAT no Linux. Quem nunca precisou executar um Scandisk depois de um reboot inesperado no DOS ou no Windows!? O ext2 foi usado durante um bom tempo no Linux (quase 10 anos). Ento comearam a aparecer alguns sistemas de arquivo com uma caracterstica especial chamada de journaling.

Embedded Labworks

JOURNALING

Um sistema de arquivo com journal foi projetado para manter a consistncia dos dados mesmo aps um crash do sistema ou um reboot inesperado. Todas as alteraes so salvas em um journal (uma espcie de log) antes de serem aplicadas no arquivo.

Aplicao User space Kernel space Escreve uma entrada no journal Escreve no arquivo

Escreve no arquivo

Limpa entrada no journal

Embedded Labworks

JOURNALING (cont.)
Reboot

No Descarta entradas incompletas no journal

Journal vazio?

Devido ao mecanismo de journaling, o sistema de arquivo nunca fica em um estado inconsistente (corrompido). Os ltimos dados salvos, no entanto, podem ser perdidos.

Sim Executa journal Sistema de arquivo OK

Embedded Labworks

SISTEMAS DE ARQUIVO COM JOURNALING

O ext3 foi o padro para sistemas de arquivo com journal durante um bom tempo. Ele basicamente o ext2 com a funcionalidade de journaling. O ext4 a nova gerao com muitas melhorias, e o sistema de arquivo padro das distribuies Linux atuais. O btrfs (tambm chamado de ButterFS) a prxima gerao e visa substituir o ext4. J esta disponvel na rvore oficial do kernel, mas ainda em estado experimental. Existem muitos outros sistemas de arquivo com journaling, incluindo reiserFS, JFS e XFS, que possuem aplicaes especficas, como por exemplo trabalhar com arquivos muito pequenos ou com carga de trabalho muito alta.

Embedded Labworks

QUAL ESCOLHER?

Na prtica, voc usar o ext3 ou o ext4 em dispositivos de bloco. Para dispositivos de bloco que usam memria flash (carto SD/MMC, pendrive, etc), voc pode querer desabilitar o journaling ou usar o ext2 para limitar a quantidade de escritas geradas pelo journal. Voc s usar o vfat e o ntfs se quiser manter interoperabilidade com sistemas Windows. Sistemas de arquivo como o reiserFS, o JFS e o XFS so usados normalmente em servidores, e tem pouca aplicao em Linux embarcado.

Embedded Labworks

SISTEMAS DE ARQUIVO COMPRIMIDOS

Sistemas embarcados possuem normalmente poucos recursos armazenamento. Por este motivo, voc pode querer usar um sistema arquivo que comprima os dados, deixando o tamanho da imagem sistema de arquivo menor, e ocupando menos espao no dispositivo armazenamento.

de de do de

Um sistema de arquivo comprimido, como o prprio nome diz, armazena os dados de forma comprimida no dispositivo de armazenamento. Como algoritmos para escrever de forma comprimida so bem mais complicados de implementar sem afetar a performance e a confiabilidade do sistema, boa parte dos sistemas de arquivo comprimidos so de apenas leitura.

Embedded Labworks

CRAMFS

O CramFS (Compressed ROM Filesystem) um exemplo de sistema de arquivo comprimido de apenas leitura, desenvolvido especialmente para sistemas embarcados ou dispositivos com baixa capacidade de armazenamento. http://sourceforge.net/projects/cramfs/ Os dados so comprimidos com a biblioteca zlib, suportando arquivos de at 16M, e com tamanho mximo total da imagem de at 256MB. Voc s vai precisar do CramFS se seu kernel for muito antigo (anterior verso 2.6.29).

Embedded Labworks

SQUASHFS

O SquashFS uma espcie de sucessor do CramFS, visando atingir os mesmos objetivos, mas com melhor compresso, melhor performance de leitura e suporte arquivos e sistemas maiores. http://squashfs.sourceforge.net Gera um sistema de arquivo em torno de 3 vezes menor que o ext3. http://elinux.org/Squash_Fs_Comparisons Muito usado em sistemas embarcados para parties que podem ser apenas de leitura (kernel, binrios, etc). Usado tambm em distribuies que rodam direto de um pendrive ou CD/DVD (Live CD).

Embedded Labworks

SISTEMAS DE ARQUIVO VOLTEIS

Quando trabalhamos com Linux embarcado, s vezes precisamos criar arquivos temporrios, armazenar informaes de processos em execuo, fazer log, etc. Fazer isso em um dispositivo de armazenamento pode ser muito custoso, envolve operaes de I/O e pode consumir a vida til do dispositivo no caso de memrias flash. Outro ponto que estas informaes so volteis, ou seja, no tem mais utilidade aps o boot. So nestes casos que usamos sistemas de arquivo volteis.

Embedded Labworks

SISTEMAS DE ARQUIVO VOLTEIS (cont.)

Com um sistema de arquivo voltil, voc consegue manter um diretrio do sistema montado em RAM. Ou seja, tudo o que voc escrever neste diretrio, vai para a memria RAM! Consequentemente, voc ir perder estas informaes no boot do equipamento. Mas a soluo perfeita para armazenar dados e arquivos temporrios. O sistema de arquivo voltil padro no Linux atualmente o tmpfs.

Embedded Labworks

TMPFS

O tmpfs um sistema de arquivo til para armazenar dados temporrios em RAM (arquivos temporrios, logs, etc). No gasta muita RAM, cresce e diminui automaticamente conforme o uso (configurvel durante a montagem). Como usar:
mountttmpfstmp/tmp

Para mais informaes, veja a documentao no kernel: Documentation/filesystems/tmpfs.txt

Embedded Labworks

MISTURANDO TUDO

Voc pode dividir seu dispositivo de bloco em parties:

Uma partio squashfs para o rootfs (kernel, binrios, etc). Salva espao, e por ser apenas leitura, fica protegido de alteraes acidentais no sistema de arquivos. Uma partio ext3 para leitura e escrita de dados do usurio e de configurao. Dados temporrios em RAM com o tmpfs.

ext3 dados e configurao Tmpfs dados volteis

RAM

Dispositivo de Bloco

squashfs rootfs comprimido

Embedded Labworks

LABORATRIO

Iniciando o rootfs de um dispositivo de bloco

Embedded Labworks

MEMRIAS FLASH

Algumas limitaes diferem as memrias flash de dispositivos de bloco tradicionais como HDs. As memrias flash s podem ser apagadas em blocos. Estes blocos so chamados de erase blocks, e podem variar de algumas dezenas para algumas centenas de KB. Quando voc apaga um bloco da flash, todos os bits assumem tipicamente o valor 1. Com um bloco apagado, voc pode escrever em qualquer posio da flash. Porm, se voc escrever 0 em qualquer um dos bits de qualquer posio da flash, voc s consegue faz-lo voltar para 1 apagando todo o bloco correspondente da flash!

Embedded Labworks

MEMRIAS FLASH (cont.)

Outra limitao das memrias flash a quantidade de vezes que voc pode apagar e escrever nela (program/erase cycles). Esta limitao, dependendo do modelo e do fabricante da flash, pode variar entre 100.000 e 1.000.000 ciclos. Parece muito, mas basta voc deixar sua aplicao fazendo log em memria flash para transform-la em um peso de papel! por este motivo que existe uma funcionalidade chamada wear leveling, que minimiza o problema, e que pode ser implementada por software ou diretamente em chips controladores de flash.

Embedded Labworks

MEMRIAS FLASH (cont.)

Mesmo assim, depois de certo tempo de uso da flash, um ou mais blocos sero inutilizados. Por este motivo, existe uma tcnica chamada de BBM (Bad Block Management). Quando sai de fbrica, as memrias flash j possuem gravada nelas uma tabela de bad blocks. Toda camada de software que trabalha com memrias flash deve ser capaz de ler e identificar estes bad blocks para no utilizar regies invlidas da flash.

Embedded Labworks

TIPOS DE MEMRIAS FLASH

Alm destas caractersticas especiais, existem basicamente dois tipos de memria flash:

Flash NOR: Acesso aleatrio para leitura de dados (byte a byte), velocidade alta para leitura mas lenta para apagar e escrever, baixa densidade, menor durabilidade, alto custo por MB. Usada para armazenar cdigo, substituir ROM. Flash NAND: Acesso de leitura em blocos, velocidade baixa para leitura mas alta para apagar e escrever, alta densidade, maior durabilidade, baixo custo por MB. Usada para armazenar dados.

por causa de todas estas caractersticas e limitaes das memrias flash que existe um sub-sistema especfico no kernel chamado de MTD para tratar memrias flash.

Embedded Labworks

MTD (MEMORY TECHNOLOGY DEVICES)


Interface com o sistema de arquivos MTD User modules
ubifs Char device jffs2 Read-only block device yaffs2 Block device

MTD Chip drivers

NOR flash DiskOnChip flash

RAM chips ROM chips

Block device

Virtual memory

NAND flash

Virtual devices

Hardware

Embedded Labworks

CAMADAS DO SUB-SISTEMA MTD

A camada de baixo (MTD chip drivers) conversa diretamente com o hardware, enquanto que a camada de cima (MTD user modules) implementa os diferentes sistemas de arquivo e mecanismos de acesso flash. Cada memria tem o seu MTD chip driver para possibilitar o acesso ao hardware da flash. Mas cada sistema pode usar um ou mais MTD user modules. Cada um dos MTD user modules ir tratar de forma diferente a flash. neste contexto que as memrias flash tambm so chamadas de dispositivos MTD.

Embedded Labworks

MTDCHAR

O driver mtdchar implementa o mdulo "char device" da flash. Ele cria um dispositivo de caractere para cada partio de um dispositivo MTD no sistema, normalmente chamado de /dev/mtdX, onde X o nmero da partio. Com este mdulo, voc tem acesso sequencial (byte a byte) de toda a flash. Alm disso, ele disponibiliza comandos ioctl() para voc poder manipular a flash (ler informaes, apagar/gravar na flash, etc). A principal utilidade deste mdulo no gerenciamento da flash, quando usamos o pacote mtd-utils.

Embedded Labworks

MTD-UTILS

O mtd-utils um conjunto de ferramentas para manipular dispositivos MTD:

mtdinfo retorna informaes detalhadas do dispositivo. flash_eraseall apaga todo o dispositivo. flashcp escreve em memrias flash NOR. nandwrite escreve um memrias flash NAND. mkfs.jffs2 e mkfs.ubifs cria os respectivos sistemas de arquivo na flash.

Para mais informaes consulte o site do projeto: http://www.linux-mtd.infradead.org/

Embedded Labworks

MTDBLOCK

O driver mtdblock implementa o mdulo "block device" da flash. Ele cria um dispositivo de bloco para cada partio de um dispositivo MTD no sistema, normalmente nomeado /dev/mtdblockX, onde X o nmero da partio. Este mdulo permite acesso de leitura/escrita por bloco, como se fosse um HD mesmo, mas no gerencia bad blocks e tambm no trabalha com wear leveling em escritas. Portanto, se voc quiser um sistema de arquivo que trabalhe com todas as limitaes da flash, incluindo bad blocks e wear leveling, voc vai precisar de um sistema de arquivo especfico para flash.

Embedded Labworks

JFFS2

um dos sistemas de arquivo para flash mais antigos ainda em utilizao. http://www.linux-mtd.infradead.org/doc/jffs2.html Vantagens: compresso em tempo de execuo (economiza espao), confiabilidade, wear leveling e algoritmo ECC. Desvantagens: no escala muito bem em memrias flash com capacidades muito grandes. O kernel precisa varrer todo o sistema de arquivo no momento da montagem. Habilitando no kernel a opo CONFIG_JFFS2_SUMMARY reduz drasticamente este tempo de montagem.

Embedded Labworks

YAFFS2

um dos sucessores do JFFS2, com o objetivo de corrigir os problemas de performance em memrias flash muito grandes. http://www.yaffs.net/ Vantagens: tempo de boot rpido, confiabilidade, wear leveling e algoritmo ECC. Desvantagens: suporta apenas memrias flash NAND e no comprime os dados.

Embedded Labworks

UBIFS

Evoluo do jffs2, dos mesmos desenvolvedores do mtd-utils, disponvel a partir do kernel 2.6.27. http://www.linux-mtd.infradead.org/doc/ubifs.html Trabalha com volumes lgicos em cima de dispositivos MTD. Overhead de metadata em parties pequenas. Mas com a capacidade das memrias flash aumentando cada vez mais, deve se tornar nos prximos anos o sistema de arquivo padro para dispositivos MTD.

Embedded Labworks

DICAS PARA TRABALHAR COM FLASH

No use a memria flash como regio de swap! No use a memria flash para armazenamento voltil como logs e arquivos temporrios (use tmpfs nestes casos). Monte seu rootfs como apenas leitura, ou use o squashfs, quando possvel. Use a opo de montagem noatime para evitar atualizar o sistema de arquivos toda vez que voc acessa um arquivo. No use a opo de montagem sync (atualizao escreve imediatamente no sistema de arquivo).

Embedded Labworks

ESCOLHENDO O SISTEMA DE ARQUIVO

Dados Volteis?

No

Somente Leitura?

No

Dispositivo

Bloco

Tem flash?

Sim Sim MTD squashfs

Sim ext2 (noatime)

No

tmpfs

ubifs ou jffs2

ext3 ou ext4

Embedded Labworks

LABORATRIO

Iniciando o rootfs da memria flash

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Build system

Embedded Labworks

O DESAFIO: INTEGRAR TUDO ISSO


Biblioteca Biblioteca

Biblioteca Toolchain

Biblioteca Biblioteca C Linux kernel Bootloader Hardware

Embedded Labworks

O DESAFIO: INTEGRAR TUDO ISSO (cont.)


u-boot.bin uImage rootfs.img

Embedded Labworks

INTEGRANDO TUDO

O que vimos at aqui foi um passo-a-passo de como desenvolver um sistema Linux embarcado do zero. Na prtica, no precisamos desenvolver um sistema Linux manualmente, ja que uma atividade trabalhosa, demorada e suscetvel erros. Portanto, temos normalmente duas possveis solues para trabalhar no desenvolvimento de sistemas com Linux embarcado:
1. Usar uma distribuio Linux pronta. 2. Usar um sistema de build (build system).

Embedded Labworks

DISTRIBUIO PRONTA

Existem diversas distribuies comerciais prontas para Linux embarcado: MontaVista, Timesys Linux, Wind River Linux, etc. Existem tambm diversas solues abertas, incluindo Android, Emdebian, Ubuntu embedded, Tizen, Angstrom, Meego, etc. Vantagens:

Simplicidade de uso. Facilidade na instalao de novos pacotes. Framework de desenvolvimento pronto e funcional.

Embedded Labworks

DISTRIBUIO PRONTA (cont.)

Desvantagens:

Falta flexibilidade (compatibilidade com plataforma de hardware, mecanismo de inicializao, framework de desenvolvimento disponvel, erros em pacotes da distribuio, etc). Normalmente o rootfs grande, ocupa muito espao no dispositivo de armazenamento. Tempo de boot normalmente alto. Requer customizao para deixar o sistema mais leve. Difcil de levantar quais pacotes open source so usados.

Embedded Labworks

BUILD SYSTEM

O build system permite gerar um sistema Linux completo do zero. Ele automatiza o processo de gerao dos diversos componentes do sistema, incluindo o toolchain, o kernel, o bootloader, as bibliotecas e as aplicaes. Normalmente j contm um conjunto grande de pacotes configurados para serem habilitados e utilizados pelo seu sistema. E facilita o trabalho de adicionar novos pacotes se necessrio.

Embedded Labworks

BUILD SYSTEM (cont.)

Vantagens:

Flexibilidade. O processo de build torna-se reproduzvel, facilitando o trabalho de recompilao, correo de problemas e adio de novas funcionalidades.

Desvantagens:

Tempo extra para configurar a ferramenta. necessrio conhecimento do funcionamento da ferramenta e de mecanismos de compilao para adicionar novos pacotes se necessrio e corrigir possveis erros de compilao.

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 flexvel (e tambm mais complexo): http://www.openembedded.org Yocto, evoluo do OpenEmbedded: http://www.yoctoproject.org/ Sistemas comerciais (MontaVista, WindRiver, Timesys).

Embedded Labworks

LTIB

LTIB (Linux Target Image Builder) uma ferramenta usada para desenvolver e liberar BSPs (Board Support Packages). http://ltib.org/ Projeto inicialmente patrocionado pela Freescale, suporta gerar imagens para ARM, PPC e Coldfire. Permite gerar imagens do bootloader, kernel e rootfs. Usa o sistema de pacotes RPM, e possui em torno de 200 aplicaes/bibliotecas disponveis.

Embedded Labworks

BUILDROOT

Desenvolvido pelos mesmos mantenedores da uClibc. Possibilita gerar o toolchain, o bootloader, o kernel e o rootfs com muitas bibliotecas e aplicaes disponveis. Mais de 700 aplicaes e bibliotecas integradas, de utilitrios bsicos bibliotecas mais elaboradas como X.org, Qt, Gtk, Webkit, Gstreamer, etc. tima soluo para projetos pequenos e mdios. Desde a verso 2009.02 um novo release liberado a cada 3 meses.

Embedded Labworks

CONFIGURANDO O BUILDROOT

Permite configurar, dentre outras opes:

Arquitetura e modelo da CPU. Toolchain. Bootloader. Kernel. Bibliotecas e aplicaes. Tipos das imagens do rootfs (ext2, jffs2, etc).

Para configurar:
makemenuconfig

Embedded Labworks

CONFIGURANDO O BUILDROOT

Embedded Labworks

COMPILANDO O BUILDROOT

Configurao tambm fica armazenada em um arquivo .config. Para compilar:


make

No final do processo de compilao, as imagens estaro disponveis no diretrio abaixo:


lsoutput/images/ rootfs.ext2rootfs.jffs2uboot.binuImage

Embedded Labworks

LABORATRIO

Gerando um sistema Linux do zero com o Buildroot

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Bibliotecas e aplicaes

Embedded Labworks

BIBLIOTECAS E APLICAES

Uma das grandes vantagens do Linux a enorme quantidade de bibliotecas e aplicaes disponveis que podem ser usadas livremente no seu projeto. Estas bibliotecas e aplicaes so normalmente disponibilizadas e distribudas gratuitamente, e graas sua natureza open-source, podem ser analisadas e modificadas de acordo com seu projeto. Entretanto, o uso eficiente destes componentes nem sempre fcil. Voc precisa encontrar e escolher o componente mais apropriado, compilar e integrar ao seu projeto.

Embedded Labworks

PROCURANDO COMPONENTES

Procurar em sites que hospedam projetos de software livre: http://www.freshmeat.net http://directory.fsf.org http://sourceforge.net http://code.google.com/hosting https://github.com Pesquisar outros produtos com Linux embarcado, e identificar seus componentes. Perguntar comunidade (fruns, listas de discusso, etc). Pesquisar no Google ou em outros sites de busca.

Embedded Labworks

ESCOLHENDO COMPONENTES

Ao escolher um componente open source para seu projeto, voc precisa levar em considerao:

Requisitos tcnicos: o componente deve satisfazer os requisitos tcnicos do seu projeto. Mas no esquea tambm de que voc mesmo pode implementar estas melhorias! E depois compartilhar! Atividade do projeto: o projeto deve ser ativo, releases frequentes, frum movimentado. importante ter a garantia de manuteno e suporte. Qualidade do componente: seu uso em diversos sistemas e uma comunidade ativa em geral significam uma qualidade relativamente boa. Licena: a licena pode ser um impeditivo para o uso de determinado componente no seu produto.

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Pacotes open source

Embedded Labworks

LINGUAGENS DE SCRIPT

Interpretadores das mais comuns linguagens de script esto disponveis:

Shell script Python Perl Lua Ruby TCL PHP

Embedded Labworks

EDITORES DE TEXTO

vi: editor de texto em Linux embarcado mais usado. nano: timo editor para os iniciantes. uemacs: um emacs de tamanho reduzido.

Embedded Labworks

FERRAMENTAS DE REDE

dropbear: implementao de um cliente e servidor SSH. Bom para ter acesso remoto seguro e transferir arquivos. dnsmasq: servidor DNS e DHCP. iptables: ferramentas userspace para gerenciar o firewall. netsnmp: implementao do protocolo SNMP. openssl: biblioteca para conexes SLL e TLS. vsftpd: servidor SFTP.

Embedded Labworks

SERVIDORES WEB

Busybox http server: servidor HTTP do Busybox, com suporte CGI e autenticao, ocupando apenas 9K de tamanho. No suporta SSL. Boa: servidor HTTP simples e rpido. Trabalha com apenas uma thread de execuo, multiplexando o processamento de conexes simultneas. Sem suporte controle de acesso e SSL. thttpd: servidor HTTP simples, rpido e portvel, com suporte CGI e autenticao. Sem suporte nativo SSL. lighttpd: servidor HTTP mais completo, timo para gerenciar altas cargas, rpido e seguro, com suporte controle de acesso, CGI e SSL.

Embedded Labworks

MULTIMEDIA

Gstreamer: framework multimdia, permite codificar e decodificar diversos containers e formatos multimdia. Suporta codecs de hardware atravs de plugins. FFmpeg: ferramenta completa para gravar, converter e tocar mdias. Implementa a libavcodec, uma das mais usadas e famosas bibliotecas de udio e vdeo da atualidade. Mplayer: player multimdia (usa a libavcodec). Alsalib: biblioteca associada com o sistema de som no Linux. Outras bibliotecas e codecs como flac, libogg, libtheora, libvorbis, libmad, libsndfile, speex, etc.

Embedded Labworks

BANCO DE DADOS

SQLite: uma pequena biblioteca em C que implementa um gerenciador de banco de dados leve que pode ser embarcado no seu projeto.

a escolha de banco de dados em Linux embarcado. Pode ser usado como uma biblioteca normal. Pode ser at compilada estaticamente com uma aplicao proprietria, j que o SQLite liberado sob domnio pblico.

Embedded Labworks

OUTRAS BIBLIOTECAS

Bibliotecas de compresso/descompresso. Bibliotecas de criptografia. Bibliotecas de manipulao do hardware. Bibliotecas de rede. Bibliotecas para manipular arquivos XML. Bibliotecas grficas (veremos em detalhes mais adiante). Etc!

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Licenas

Embedded Labworks

LICENAS

Todo software sob a licena de software livre d todos os usurios 4 liberdades bsicas:

Liberdade de usar. Liberdade de estudar. Liberdade de copiar. Liberdade de modificar e distribuir cpias modificadas.

Veja o link abaixo para uma definio completa de software livre: http://www.gnu.org/philosophy/free-sw.html

Embedded Labworks

LICENAS (cont.)

Licenas de software livre possuem basicamente duas categorias:

Licenas copyleft. Licenas non-copyleft.

Quando voc modifica e distribui um software sob licena copyleft, voc precisa liber-lo sob a mesma licena original.

Mesma liberdade novos usurios. Incentivo para voc contribuir de volta comunidade.

Licenas non-copyleft no tem estes requisitos, e verses modificadas podem ser mantidas proprietrias, sendo necessrio apenas manter a atribuio de autoria do projeto ao autor original.

Embedded Labworks

GPL

GNU General Public Licence. Cobre mais da metade dos projetos de software livre, incluindo o U-Boot, o Linux, o Busybox e muitas aplicaes. uma licena copyleft:

Trabalhos derivados precisam ser liberados sob a mesma licena. Programas linkados com uma biblioteca GPL tambm precisam ser liberados sob a GPL.

Embedded Labworks

GPL (cont.)

Boa parte dos programas coberta pela GPLv2. Alguns programas esto migrando para a GPLv3.

Principal diferena: o usurio deve ser capaz de rodar verses modificadas do programa no dispositivo.

Embedded Labworks

LGPL

GNU Lesser General Public Licence. Cobre ~10% dos projetos de software livre. uma licena copyleft:

Trabalhos derivados precisam ser liberados sob a mesma licena. Mas programas linkados com uma biblioteca LGPL no precisam ser liberados pela LGPL e podem ser mantidos proprietrios. Entretanto, o usurio precisa ter a possibilidade de atualizar a biblioteca independentemente do programa, portanto, a linkagem precisa ser dinmica.

Licena usada nas maioria das bibliotecas.

Embedded Labworks

LICENAS NON-COPYLEFT

Verses modificadas de um software sob licena non-copyleft podem ser mantidas proprietrias, desde que voc atribua a autoria da verso original. Existe uma grande famlia de licenas non-copyleft relativamente similares em suas caractersticas, dentre elas:

Apache Licence BSD Licence MIT Licence X11 Licence Artistic Licence

Embedded Labworks

LICENAS (EXEMPLOS)

Voc modificou o Linux, o Busybox, o U-Boot ou outro software GPL:

Voc precisa liberar o software com as modificaes realizadas sob a mesma licena, e estar pronto para distribuir o cdigo-fonte para seus clientes.

Voc modificou uma biblioteca qualquer sob a licena LGPL:

Voc precisa liberar as verses modificadas sob a mesma licena.

Embedded Labworks

LICENAS (EXEMPLOS)

Voc criou uma aplicao que utiliza uma biblioteca LGPL:

Voc pode manter sua aplicao proprietria, mas precisa linkar dinamicamente com a biblioteca.

Voc fez modificaes em um software non-copyleft:

Voc pode manter suas modificaes proprietrias, mas precisa manter o crdito aos autores.

Embedded Labworks

APLICANDO LICENAS

No existe uma regra nica para aplicar licenas em software open source, j que cada licena possui sua prpria receita de bolo. De qualquer forma, um projeto open source possui normalmente:

Uma indicao da licena utilizada e uma cpia completa desta licena no site do projeto. Uma cpia completa da licena utilizada no diretrio principal dos fontes do projeto. Normalmente este arquivo nomeado como LICENCE, LICENCE.TXT, COPYRIGHT ou COPYING. Um descritivo da licena utilizada no cabealho de cada arquivo-fonte do projeto. O contedo deste descritivo depende da licena utilizada.

Embedded Labworks

LABORATRIO

Identificando e analisando licenas open source

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Cross-compilando bibliotecas e aplicaes

Embedded Labworks

COMO CROSS-COMPILAR?

Basicamente, temos duas solues:

Adaptar o pacote ao seu build system. Compilar manualmente.

O processo de adaptao do pacote ao build system dependente do build system utilizado. Por exemplo, para compilar um pacote dentro do Buildroot, os procedimentos esto disponveis no manual do Buildroot: http://buildroot.uclibc.org/downloads/manual/manual.html Para compilar manualmente, voc precisa:

Toolchain. Conhecer o mecanismo de compilao do pacote.

Embedded Labworks

MECANISMOS DE COMPILAO

Todo software open-source possui um sistema de build ou mecanismo de compilao. Dentre eles, podemos destacar:

Makefile simples: necessrio ler e entender o que alterar para cross-compilar o componente. Autotools: um dos mais utilizados, iremos estudar em mais detalhes. Cmake: Mais novo e mais simples que o autotools, usado em projetos grandes como o KDE. Qmake: Criado pela Trolltech para ser usado no Qt.

Embedded Labworks

MAKE

O make uma ferramenta bastante usada para compilar programas e bibliotecas. http://www.gnu.org/software/make/ Ele interpreta arquivos Makefile, que contm os comandos a serem executados durante o processo de compilao. Para compilar um programa ou biblioteca baseado em makefiles, basta digitar o comando abaixo (considerando-se que voc tenha um arquivo Makefile no diretrio corrente):
make

Embedded Labworks

MAKEFILE (EXEMPLO)
TOOLCHAIN:=/opt/labs/ex/09/buildroot/output/host/usr/bin/ CROSS_COMPILE:=armlinux PATH:=${TOOLCHAIN}:${PATH} all: ${CROSS_COMPILE}gccteste.coteste clean: rmRf*.oteste

Embedded Labworks

LABORATRIO

Desenvolvendo uma aplicao baseada em Makefile

Embedded Labworks

AUTOTOOLS

Autotools o nome dado ao sistema de build do projeto GNU, que contm um conjunto de ferramentas para auxiliar na compilao de uma aplicao ou biblioteca. Ele tem basicamente os seguintes objetivos:

Ser um sistema de build universal e multiplataforma. Analisar e verificar se a plataforma possui os requisitos necessrios para compilar o pacote (biblioteca ou aplicao). Configurar a aplicao, habilitando ou desabilitando funcionalidades antes da compilao.

Embedded Labworks

AUTOTOOLS (cont.)

O Autotools composto pelas seguintes ferramentas:

Autoconf: ferramenta responsvel por gerar os scripts de configurao. Automake: ferramenta responsvel por gerar os makefiles. Libtool: ferramenta responsvel por compilar e criar de forma portvel as bibliotecas da aplicao.

Para compilar um software baseado em autotools, normalmente usamos os comandos abaixo:


./configure make makeinstall

Embedded Labworks

CROSS-COMPILANDO COM AUTOTOOLS

Para cross-compilar um software baseado em autotools, voc precisar prestar ateno em alguns detalhes adicionais. No script de configurao, voc precisa indicar o host (onde ir executar o software) com a opo --host. Dependendo do pacote, voc precisar indicar o nome das ferramentas de compilao do toolchain, setando as variveis de ambiente AR, AS, LD, CC, GCC, CPP, CXX. Voc precisa indicar onde ir instalar o software usando a varivel DESTDIR, que deve estar apontando para o diretrio onde se encontra o rootfs do seu sistema.

Embedded Labworks

AUTOTOOLS (EXEMPLO)
#configurandootoolchain exportPATH=/usr/local/armlinux/bin:$PATH exportCC=armlinuxgcc #configurandoaaplicao ./configurehost=armlinux #compilando make #instalando makeDESTDIR=/home/<user>/work/rootfsinstall

Embedded Labworks

LABORATRIO

Cross-compilando um software baseado em autotools

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Integrando componentes

Embedded Labworks

INTEGRANDO COMPONENTES

Na integrao de componentes open source com seu projeto, s vezes necessrio realizar algumas modificaes para faz-lo funcionar, otimizar o uso de espao em disco, corrigir algum bug, etc. Precisamos saber documentar as alteraes realizadas em pacotes open-source, porque quando atualizarmos este pacote para uma nova verso, ser necessrio aplicar as alteraes realizadas no pacote original. Precisamos de um mecanismo para distribuir estas alteraes, e tambm para contribuir de volta com a comunidade. Como a comunidade de software livre muito grande, precisamos de uma linguagem comum.

Embedded Labworks

PATCHES

Como ento documentar as alteraes realizadas em projetos open-source? Atravs de patches! Um patch descreve basicamente as diferenas entre um ou mais arquivos de determinado diretrio ou projeto. Um patch pode ser gerado automaticamente por uma ferramenta de controle de verso (svn, git, mercurial), ou pode ser gerado manualmente atravs da ferramenta diff:
diffrauprjorigprjalt>prj.patch

Embedded Labworks

EXEMPLO DE PATCH
diffraunetcat/src/netcat.cnetcat2/src/netcat.c netcat/src/netcat.c2011100112:03:55.000000000 +++netcat2/src/netcat.c2012031212:06:01.830816531 @@445,7+445,7@@ exit(EXIT_FAILURE); } debug_dv("Argumentsparsingcomplete!Total"); +printf("Linhaadicionada\n"); #if0 /*puredebuggingcode*/ c=0;

Embedded Labworks

APLICANDO PATCHES

Com o arquivo de patch temos documentado as alteraes realizadas no projeto original. Para aplicar o patch, basta entrar no diretrio do projeto original e executar a ferramenta patch:
cdprjorig/ patchp1<../prj.patch

Embedded Labworks

LABORATRIO

Criando e aplicando patches

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Bibliotecas grficas

Embedded Labworks

CAMADA DE VDEO NO LINUX


Aplicao Aplicao Toolkit Grfico (Qt, Gtk) Aplicao

User
Aplicao Biblioteca (SDL, DirectFB) Toolkit Grfico (Qt) Servidor Grfico (X server)

Framebuffer driver comum /dev/fbX

Acesso direto memria /dev/mem

Kernel

Framebuffer driver Controladora VGA

Framebuffer driver Controladora LCD

Hardware

Embedded Labworks

CAMADA INPUT NO LINUX


Aplicao Biblioteca grfica Toolkit grfico Servidor grfico

User

Input event driver (/dev/input/eventX) Input core

Input driver

Input driver

Input driver

Input driver

Input driver

Kernel

Serio

USB HID

SPI

I2C

GPIO

Teclado ou mouse PS2

Teclado ou Mouse USB

Controladora Touchscreen

Acelermetro

Joystick

Hardware

Embedded Labworks

SDL

SDL (Simple Directmedia Layer) uma biblioteca multimdia para acesso de baixo nvel em dispositivos de entrada (teclado, mouse, joystick, etc) e sada (vdeo, udio, etc). http://www.libsdl.org Suporta acelerao de hardware 3D via OpenGL e acesso ao framebuffer para grficos 2D. Usada basicamente para desenvolvimento de aplicaes que desejam acessar diretamente o hardware. Exemplos: jogos, mdia players, etc.

Embedded Labworks

JOGO CIVILIZATION USANDO SDL

Embedded Labworks

DIRECTFB

Biblioteca de baixo nvel para trabalhar com interface grfica. http://www.directfb.org Pode ser utilizada para desenvolvimento de UI em aplicaes simples, ou como uma camada de baixo nvel para bibliotecas grficas de mais alto nvel. Manipula eventos de entrada como mouse, teclado, joystick, etc. Capacidade de trabalhar com aceleradores grficos em diferentes hardwares.

Embedded Labworks

MEDIACENTER USANDO DIRECTFB

Embedded Labworks

X.ORG KDRIVE

Kdrive (antes Tiny-X) a implementao do servidor X para sistemas embarcados. http://www.x.org Tambm trabalha diretamente sobre o framebuffer. Suporte total ao protocolo X11, e permite o uso de qualquer aplicao ou biblioteca baseada no X11. O uso feito normalmente com um Toolkit rodando por cima (Qt, Gtk, EFL, WxEmbedded, etc).

Embedded Labworks

DESKTOP USANDO KDRIVE

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Toolkits grficos

Embedded Labworks

GTK

Famoso toolkit usado no Gnome, disponibilizando uma API baseada em widgets para o desenvolvimento de aplicaes grficas. http://www.gtk.org Pode usar o servidor X ou o DirectFB como backend grfico. No inclui um sistema de janelas. Em desktop comum o Gnome como sistema de janelas. Em sistemas embarcados, uma possibilidade o Matchbox.

Embedded Labworks

EXEMPLOS DE USO DO GTK


OpenMoko

Maemo

Interface proprietria

Embedded Labworks

Qt

Famoso toolkit usado no KDE, tambm disponibilizando uma API baseada em widgets para o desenvolvimento de aplicaes grficas. http://qt-project.org/ J inclui um sistema de janelas, e fornece um framework completo de desenvolvimento para trabalhar com estrutura de dados, thread, networking, banco de dados, etc. Implementao em C++. Trabalha direto no framebuffer ou em cima do X11 ou DirectFB.

Embedded Labworks

EXEMPLOS DE USO DO QT

Express GPS

OpenMoko

Netflix Player

Embedded Labworks

LABORATRIO

Desenvolvendo uma aplicao em Qt

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Debugging

Embedded Labworks

GDB

O GDB (GNU Debugger) o debugger padro do projeto GNU, disponvel para diversas arquiteturas. http://www.gnu.org/software/gdb/ Interface via console, mas com frontends disponveis (Eclipse, DDD, GDB/Insight, Kdbg, etc). Pode ser usado para diversas tarefas, incluindo controlar a execuo de um programa, colocar breakpoints, mudar o estado de variveis ou fazer um dump da memria.

Embedded Labworks

DEBUG REMOTO

Problema 1: os fontes esto na mquina de desenvolvimento e o binrio est rodando na mquina alvo. Problema 2: A mquina-alvo no tem recursos para instalar o gdb completo e aplicaes com smbolos de debugging. A soluo: gdb client na mquina de desenvolvimento e gdb server na mquina alvo.

Embedded Labworks

ARQUITETURA GDB
Host
ARCHlinuxgdb Conexo Serial ou Ethernet
Binrios e bibliotecas com smbolos de debugging Binrios e bibliotecas sem smbolos de debugging

Target
gdbserver

Embedded Labworks

LABORATRIO

Debugging com GDB

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Desenvolvimento de aplicaes

Embedded Labworks

DESENVOLVENDO APLICAES

Um sistema Linux embarcado um sistema Linux normal, apenas com um conjunto menor e mais enxuto de componentes. Em termos de desenvolvimento de aplicaes, o mesmo processo comparado ao desenvolvimento para desktop, o que inclusive facilita os testes. Voc pode reusar aplicaes e bibliotecas sem nenhuma adaptao na maioria das vezes. Mas sempre leve em conta a limitao de recursos do seu equipamento (capacidade de processamento, memria e armazenamento).

Embedded Labworks

LINGUAGEM DE PROGRAMAO

A linguagem padro para desenvolvimento de aplicaes no nvel do sistema a linguagem C. A biblioteca C padro esta sempre presente em sistemas Linux. C++ pode ser usada para o desenvolvimento de aplicaes maiores. A biblioteca C++ precisa normalmente ser adicionada ao sistema. Java tambm uma possibilidade, mas leve em considerao o consumo de recursos do dispositivo. Linguagens de script so muito teis em determinadas tarefas, e ajudam em aumentar a velocidade do desenvolvimento, mas requerem um interpretador que tambm consome recursos de memria e processamento.

Embedded Labworks

AMBIENTES DE DESENVOLVIMENTO

Eclipse: Uma IDE completa baseada em plugins, ideal para desenvolver outras IDEs. Roda em cima de uma JVM. Diversas empresas de sistemas embarcados tem usado a plataforma Eclipse para desenvolver IDEs para seus produtos. Ex: MontaVista DevRocket, TimeSys TimeStorm, Windriver Workbench, TI Code Composer, Freescale Codewarrior, etc. Kdevelop: uma IDE completa. Roda nativamente. Suporta diversas linguagens incluindo C, C++ e Java. Outras opes: Anjuta, Netbeans, vim, emacs, etc.

Embedded Labworks

CONTROLE DE VERSO

CVS: Foi bastante popular, mas hoje no mais usado em novos projetos. Subversion: Tambm chamado de SVN, criado como substituto do CVS, removendo diversas limitaes e com melhor performance. Git: Sistema de controle de verso distribudo, permite ter cpias locais e remotas. Desenvolvido por uma equipe comandada por Linus e hoje o padro para novos projetos open source. Mercurial: Trabalha da mesma forma que o Git, e uma opo para sistemas de controle de verso distribudos.

Embedded Labworks

LABORATRIO

Configurando e usando o Eclipse

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

Ferramentas de anlise

Embedded Labworks

VALGRIND

O Valgring um framework de instrumentao para se criar ferramentas de anlise dinmica de aplicaes. http://valgrind.org/ Atualmente, o Valgrind fornece ferramentas de anlise de memria e profiling de aplicaes. Um dos principais usos do Valgring na anlise de alocao dinmica de memria e deteco de memory leak nas aplicaes.

Embedded Labworks

APLICAO COM BUG


inttxData(char*data) { unsignedchar*ptr=NULL,*buf=NULL; intsize=strlen(data); if((ptr=buf=(unsignedchar*)malloc(size+3))==NULL) return(1); *ptr++=STX; strncpy(ptr,data,size); ptr+=size; *ptr++=ETX; if(txSerial(buf,size+3)==1) return(2); free(buf); return0; }

Embedded Labworks

TESTANDO COM VALGRIND


valgrind./leak ==3811==Memcheck,amemoryerrordetector ==3811==Copyright(C)20022009,andGNUGPL,byJulianSewardetal. ==3811==UsingValgrind3.6.0.SVNDebianandLibVEX;rerunwithhfor copyrightinfo ==3811==Command:./leak ==3811== Erroaoenviarmensagem! ==3811== ==3811==HEAPSUMMARY: ==3811==inuseatexit:13bytesin1blocks ==3811==totalheapusage:1allocs,0frees,13bytesallocated ==3811== ==3811==LEAKSUMMARY: ==3811==definitelylost:13bytesin1blocks ==3811==indirectlylost:0bytesin0blocks ==3811==possiblylost:0bytesin0blocks ==3811==stillreachable:0bytesin0blocks ==3811==suppressed:0bytesin0blocks ==3811==Rerunwithleakcheck=fulltoseedetailsofleakedmemory ==3811== ==3811==Forcountsofdetectedandsuppressederrors,rerunwith:v ==3811==ERRORSUMMARY:0errorsfrom0contexts(suppressed:13from8)

Embedded Labworks

STRACE

O strace (system calls tracer) permite capturar todas as chamadas de sistema realizadas pela sua aplicao. http://sourceforge.net/projects/strace/ Bastante til para debugar uma aplicao que fecha sem exibir nenhuma mensagem de erro, ou ento para fazer engenharia reversa em uma aplicao a qual voc tenha somente o binrio. Disponvel em sistemas GNU/Linux, e pode ser compilada para sua plataforma alvo.

Embedded Labworks

EXEMPLO STRACE
stracecatMakefile execve("/bin/cat",["cat","Makefile"],[/*38vars*/])=0 brk(0)=0x98b4000 access("/etc/ld.so.nohwcap",F_OK)=1ENOENT(Nosuchfileordirectory) mmap2(NULL,8192,PROT_READ|PROT_WRITE,MAP_PRIVATE|MAP_ANONYMOUS,1,0)= access("/etc/ld.so.preload",R_OK)=1ENOENT(Nosuchfileordirectory) open("/etc/ld.so.cache",O_RDONLY)=3 fstat64(3,{st_mode=S_IFREG|0644,st_size=111585,...})=0 mmap2(NULL,111585,PROT_READ,MAP_PRIVATE,3,0)=0xb7f69000 close(3)=0 access("/etc/ld.so.nohwcap",F_OK)=1ENOENT(Nosuchfileordirectory) open("/lib/tls/i686/cmov/libc.so.6",O_RDONLY)=3 fstat64(3,{st_mode=S_IFREG|0755,st_size=1442180,...})=0 mprotect(0xb7f62000,4096,PROT_NONE)=0 mmap2(0xb7f63000,12288,PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE,3,0x15c)=0xb7f63000 mmap2(0xb7f66000,9840,PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS,1,0)=0xb7f66000 close(3)=0 ...

Embedded Labworks

LTRACE

O ltrace (library calls tracer) permite capturar todas as chamadas de bibliotecas realizadas e sinais recebidos pela sua aplicao. http://freshmeat.net/projects/ltrace/ Complementa o uso do strace, que no exibe as chamadas de biblioteca.

Embedded Labworks

EXEMPLO LTRACE
ltraceneditindex.html sscanf(0x8274af1,0x8132618,0x8248640,0xbfaadfe8,0)=1 sprintf("const0","const%d",0)=7 strcmp("startScan","const0")=1 strcmp("ScanDistance","const0")=1 strcmp("const200","const0")=1 strcmp("$list_dialog_button","const0")=1 strcmp("$shell_cmd_status","const0")=1 strcmp("$read_status","const0")=1 strcmp("$search_end","const0")=1 strcmp("$string_dialog_button","const0")=1 strcmp("$rangeset_list","const0")=1 strcmp("$calltip_ID","const0")=1 ...

Embedded Labworks

SUMRIO LTRACE
ltraceccat/etc/resolv.conf %timesecondsusecs/callcallsfunction 22.100.0007957951setlocale 8.510.0003061532read 7.810.0002812811write 7.650.0002751372__fxstat 6.840.000246614__freading 6.310.0002271132fclose 4.390.0001581581open 4.060.0001461461close 3.920.0001411411posix_fadvise 3.590.000129642fileno 3.560.000128642__fpending ... 100.000.00359729total

Embedded Labworks

LABORATRIO

Usando ferramentas de anlise

Embedded Labworks

Desenvolvendo Sistemas Linux Embarcado

E agora?

Embedded Labworks

RECURSOS ONLINE

Site do kernel Linux: http://www.kernel.org Linux kernel mailing list: http://www.tux.org/lkml Acompanhar as mudanas nas novas verses do kernel: http://wiki.kernelnewbies.org/LinuxChanges Notcias e novidades sobre o desenvolvimento do kernel: http://lwn.net

Embedded Labworks

RECURSOS ONLINE (cont.)

Linux Foundation (notcias, blog e vdeos): http://linuxfoundation.org Free electrons (documentos e vdeos): http://free-electrons.com Revista eletrnica sobre Linux: http://www.linuxjournal.com/ Notcias sobre Linux e software livre (brasileiro): http://br-linux.org

Embedded Labworks

RECURSOS ONLINE (cont.)

Portal Embarcados: http://embarcados.com.br Grupo sis_embarcados: https://groups.google.com/group/sis_embarcados Blog do Sergio Prado: http://sergioprado.org

Embedded Labworks

LIVRO SOFTWARE LIVRE

The Cathedral & The Bazaar Eric S. Raymond

Embedded Labworks

LIVROS DESENVOLVIMENTO DE SOFTWARE


The Linux programming interface Michael Kerrisk

The art of UNIX Programming Eric S. Raymond

Embedded Labworks

LIVROS LINUX EMBARCADO


Embedded Linux Primer Christopher Hallinan

Building Embedded Linux Systems Karim Yaghmour & others

Embedded Labworks

LIVROS LINUX KERNEL


Linux Kernel in a Nutshell Greg Kroah-Hartman

Linux Kernel Development Robert Love

Embedded Labworks

LIVROS LINUX DEVICE DRIVERS


Essential Linux Device Drivers Sreekrishnan Venkateswaran

Linux Device Drivers Jonathan Corbet & others

OBRIGADO!
E-mail Website sergio.prado@e-labworks.com http://e-labworks.com

Embedded Labworks

Por Sergio Prado. So Paulo, Novembro de 2012 Copyright Embedded Labworks 2004-2013. All rights reserved.

Você também pode gostar