Sunteți pe pagina 1din 41

Minicurso

Linux Embarcado

Paulo Stein
pstein.br@gmail.com

Objetivos
Introduzir conceitos bsicos sobre sistemas embarcados e o sistema GNU/Linux; Apresentar as competncias necessrias tarefa de embarque do Linux; Descrever os passos tpicos para o embarque do Linux em uma plataforma de Hardware.

Linux Embarcado

Caractersticas tpicas de um Sistema Embarcado


Possui unidade de processamento; Normalmente concebido para executar um conjunto de tarefas especficas; Contm software prprio do equipamento, que j vem instalado; Possui recursos limitados; Pouca ou nenhuma interface com o usurio; Necessita de pouca interao com o usurio; Pode possuir requisitos de tempo real; Pode possuir restries de energia.

Linux Embarcado

Arquitetura bsica

Unidade de processamento; Memria primria; Memria secundria (no voltil); Interface com o usurio; Sensores; Atuadores; Interfaces (rede, USB, porta serial, etc.); Requisitos para o Linux: 2 MiB de memria ROM; 4 MiB de memria RAM; Processador de 32 bits; Unidade de Gerenciamento do Memria (MMU).
Linux Embarcado

Vantagens do Linux
Estabilidade; Escalabilidade; Portabilidade; Comporta uma ampla variedade de dispositivos de hardware; Implementa vrios protocolos de comunicao; Livre de royalties; Cdigo fonte aberto; Suporte(!) Gratuito.

Linux Embarcado

CPus Suportadas

x86; ARM; IBM/Motorola PowerPC; MIPS; Hitachi SuperH; Motorola 68000; outras.

Linux Embarcado

Conceitos

Linux: Nome do kernel (ncleo) do sistema. O kernel responsvel por: Controlar os dispositivos de hardware do sistema; Gerenciar os recursos da mquina entre os diversos usurios; Prover uma camada de abstrao para a manipulao dos elementos do sistema;

Sistema GNU/Linux: composto pelo Linux kernel em conjunto com bibliotecas e aplicativos necessrios ao funcionamento do sistema;
Linux Embarcado

Arquitetura de um sistema GNU/Linux

Linux Embarcado

Espaos usurio/kernel

Espao Usurio: contexto normal de operao dos aplicativos. Acesso restrito aos recursos do sistema; Espao kernel: contexto de operao do ncleo do sistema. Possui acesso a todo o hardware do equipamento, sem restries.

Linux Embarcado

Memria fsica e memria virtual

Linux Embarcado

Sistema de arquivos raiz

Estrutura de diretrios onde se encontra o diretrio inicial do sistema (raiz). A definio de um sistema de arquivos raiz obrigatria para um ambiente Linux.

Linux Embarcado

Diretrios
bin: Binrios essenciais do usurio; boot: Arquivos utilizados pelo bootloader; dev: Arquivos especiais dos dispositivos; etc: Arquivos de inicializao e de configurao do sistema; home: Diretrios dos usurios do sistema; lib: Bibliotecas essenciais e mdulos do sistema; mnt: Ponto de montagem dos dispositivos; proc: Sistema de arquivo virtual, contendo informaes do kernel e dos processos do sistema;
Linux Embarcado

Diretrios (cont...)
root: Diretrio do superusurio; sbin: Binrios essenciais do administrador; sys: Sistema de arquivo virtual, contendo informaes sobre os dispositivos do sistema; tmp: Arquivos temporrios; usr: Contm a maioria dos aplicativos do sistema, documentao, entre outros; var: Arquivos gerados por daemons e demais aplicativos do sistema.

Linux Embarcado

Padres

Linux Standard Base (LSB): objetiva definir um ambiente padro para o sistema Linux, versando sobre os utilitrios que o sistema deve conter, bibliotecas bsicas, interfaces de programao, formato de arquivos, entre outros. Filesystem Hierarchy Standard (FHS): padro contendo requisitos e indicaes sobre a localizao, dentro do sistema de arquivos, dos elementos que compe o sistema.

Linux Embarcado

Bibliotecas

Fornecem a infra-estrutura bsica necessria para a execuo de um aplicativo no sistema. Bibliotecas bsicas mais utilizadas (libc): Glibc: Biblioteca GNU padro; uClibc: Biblioteca mais enxuta. Pode acomodar processadores sem a MMU; Diet libc: Tem como objetivo ser uma biblioteca mais enxuta que a glibc. Uma biblioteca pode ser linkada tanto esttica quanto dinamicamente a um aplicativo.
Linux Embarcado

Conceitos

Mdulos: Elementos de software que podem ser dinamicamente linkados ao kernel do sistema, integrando-se a ele. Normalmente so associados a drivers de dispositivos; Arquivos de dispositivos: Arquivos especiais, geralmente situados no diretrio /dev, que so associados a um driver junto ao espao kernel. /dev/cdrom; /dev/lp; /dev/floppy; /dev/sda(n).

Linux Embarcado

Bootloader

Primeiro elemento de software que roda no equipamento. responsvel pelas seguintes tarefas: Inicializao do hardware do equipamento; Carga do kernel do Linux; Transferncia de controle para o kernel.

Linux Embarcado

Memria Secundria

ROM (Read Only Memory) J vem gravada na fabricao do chip; EPROM (Erasable Programmable ROM) Memria que pode ser programada eletricamente e apagada atravs de raios UV; EEPROM (Electrically Erasable Programmable ROM) Memria que pode ser programada e apagada eletricamente; NOR Flash; NAND Flash; HDs; etc.
Linux Embarcado

Tipos de Sistemas de arquivo

JFF2 Sistema preferido para quem usa memria Flash. Implementa journalling e wear leveling, sendo prova de interrupo de energia. O sistema de arquivos fica presente em RAM, enquanto no dispositivo ficam armazenadas as estruturas de logs contendo as operaes realizadas. NFTL Implementa um dispositivo de bloco virtual em memrias flash do tipo NAND. Um filesystem tpico de disco ento utilizado no dispositivo em questo. Para ser prova de interrupo de alimentao, deve ser conjugado com um filesystem que implementa journalling. Squashfs Sistema de arquivo compactado que permite apenas leituras.

Linux Embarcado

Tipos de Sistemas de arquivo(cont...)

Ext2 Antigo filesystem padro do linux. Baseado em inodes. No implementa journalling. Ext3 Filesystem posterior ao ext2, que implementa journalling. FAT Sistema de arquivos utilizado pelo DOS, baseado em uma tabela de alocao de 16 bits; utilizado nas primeiras verses do windows; FAT32 Sistema de arquivos similar ao FAT, mas utilizando campos de 32 bits. Utilizado por verses posteriores do windows, at o Windows ME;

Linux Embarcado

Linux em Tempo Real

Existem projetos que permitem que um sistema rodando Linux possa atender a requisitos restritos de tempo real, atingindo latncias de interrupo mximas da ordem de poucas dezenas de microsegundos:

RTLinux (http://www.rtlinuxfree.com); RTAI (http://www.rtai.org); Xenomai (http://www.xenomai.org); RT-Preempt (?) (http://www.kernel.org/pub/linux/kernel/projects/rt).

Linux Embarcado

Questes jurdicas

GNU GPL (GNU General Public License): Garante ao usurio liberdade de rodar o programa; Garante ao usurio o direito a estudar o alterar o cdigo fonte; Permite ao usurio distribuir o cdigo fonte original ou suas modificaes; Estende estes direitos a quem adquire o software; Estende esta licena a softwares linkados com eles; Um software lanado sob esta licena deve sempre mant-la.

Linux Embarcado

Questes jurdicas

GNU LGPL (GNU Lesser General Public License): Permite a associao de programas GPL com programas no GPL; Criada para bibliotecas; Um produto que contm cdigo GPL deve prover meios de fornecer o cdigo fonte do software GPL distribudo!

Linux Embarcado

Competncias
Competncias necessrias realizao da tarefa de embarque do Linux:

Noes de hardware; Programao; Administrao de sistemas UNIX; Conhecimentos sobre o Linux kernel; Saber desenvolver devices drivers; Conhecer as ferramentas de desenvolvimento GNU; Conhecer linguagem de scripts (shell); Compreender textos em ingls.
Linux Embarcado

Opes de desenvolvimento
1 - Conectado ao host

Linux Embarcado

Opes de desenvolvimento (cont...)


2 Atravs de mdia removvel

Linux Embarcado

Opes de desenvolvimento (cont...)


3 No prprio sistema alvo

Linux Embarcado

Formas de boot

Via mdia de estado slido

Linux Embarcado

Formas de boot (cont...)

Atravs de um disco: kernel localizado dentro de um sistema de arquivos situado no disco. Via rede: Tanto o kernel quanto o sistema de arquivos podem ser acessados remotamente: Kernel baixado via TFTP; Sistema de arquivos acessado via NFS.

Linux Embarcado

Opes de desenvolvimento
Empregar distribuies especficas para Linux embarcado: estas distribuies contm aplicativos e scripts para o desenvolvimento de sistemas embarcados no host e/ou elementos prontos para serem empregados no sistema embarcado (bibliotecas, aplicativos, arquivos de configurao, etc.); Utilizar uma distribuio normal no prprio target, quando suas caractersticas assim o permitirem; Fazer o embarque diretamente (baixar os arquivos necessrios, compil-los, etc); Utilizar ferramentas que automatizam o processo anterior (buildoot).
Linux Embarcado

Elementos necessrios
Kernel do Linux:

X86 - http://www.kernel.org; ARM - http://www.arm.linux.org.uk; PowerPC - http://penguinppc.org; MIPS - http://www.linux-mips.org; SuperH - http://www.superh-linux.org; M68k - http://www.linux-m68k.org.

Cadeia de ferramentas (toolchain) para o desenvolvimento (ftp://ftp.gnu.org/gnu):


gcc: Compilador GNU; glibc: biblioteca bsica;

Linux Embarcado

Elementos necessrios (cont...)

Toolchain (cont...) Binutils:

ld GNU Linker as GNU assembler; ar Aplicativo de manipulao de archives; objdump Mostra informaes sobre arquivos objetos; readelf Mostra informaes sobre um arquivo de objetos no formato ELF; strip descarta smbolos do objeto;

Demais elementos:

Busybox; Dropbear; etc...

Linux Embarcado

Passos do procedimento

Conhecer os requisitos e caractersticas do sistema; Com base nisso, verificar uma verso do kernel que atenda a estes requisitos. Escolher verses de binutils, gcc e glibc que sejam compatveis entre si e com o kernel escolhido; Baixar os softwares selecionados; Verificar se h necessidade de aplicao de algum patch nos cdigos fontes. Se houver, faz-lo; Preparo dos headers do kernel; Preparo dos utilitrios dos binrios (binutils); Preparo inicial do compilador; Preparo da biblioteca C; Preparo final do compilador;
Linux Embarcado

Passos do procedimento (cont...)


Preparo do kernel; Preparo dos demais aplicativos; Preparo do bootloader; Configurao do sistema; Criao do sistema de arquivos raiz; Instalao do kernel e do sistema de arquivo no alvo;

Linux Embarcado

Preparo do kernel
As invocaes para o preparo do kernel podem ser feitas atravs do comando
makeARCH=<arch>CROSS_COMPILE=<prefixo><target>

onde <arch> depende da arquitetura do sistema (mostrados no diretrio arch no kernel), e <prefixo> depende do prefixo do compilador a ser utilizado (depende do sistema alvo). O parmetro <target> indica o que se deseja fazer.

Linux Embarcado

Preparo do kernel (cont...)


Os principais alvos para configurao so: config Interface de configurao de linha de comando; oldconfig Realiza uma configurao com base em uma configurao de uma verso de kernel mais antiga; menuconfig Configurao via interface semigrfica;

xconfig Configurao grfica.

Linux Embarcado

Preparo do kernel (cont...)

Para compilar o kernel:


makeARCH=<arch>CROSS_COMPILE=<prefixo>

Uma vez compilado o kernel, deve ser armazenados: A imagem do kernel criado (./arch/<arch>/boot/); O kernel no compactado (./vmlinux); A tabela de smbolos do kernel (./system.map); O arquivo de configurao utilizado (./.config).

Para instalar os mdulos :


makearch=<arch>CROSS_COMPILE=<prefixo> INSTALL_MOD_PATH=<path>modules_install
Linux Embarcado

Preparo do kernel (cont...)

Uma vez compilado o kernel, as dependncias entre mdulos podem ser geradas atravs do script depmod.pl (vem com o busybox):
depmod.plk./vmlinuxFSystem.mapb<path>> <path>/modules.dep

Linux Embarcado

Preparo da imagem do sistema de arquivo

Criar um arquivo com o tamanho desejado, totalmente preenchido com zeros (0):
/bin/ddif=/dev/zeroof=<arquivo>bs=1024count=<tam>

Onde <arquivo> contm o nome do arquivo a ser gerado e <tam> representa o tamanho do arquivo em KiB.

Formatar o arquivo com o sistema de arquivo desejado:


/sbin/mke2fsFvm0<arquivo>

Montar o sistema de arquivos criado:


/sbin/mountoloop<arquivo><pontodemontagem>
Linux Embarcado

Preparo da imagem do sistema de arquivo (cont...)


Onde <pontodemontagem> indica o diretrio onde o sistema de arquivos ser montado

Copiar os arquivos desejados para o diretrio em questo:


cpa<listadearquivos><pontodemontagem>

Desmontar o sistema de arquivo:


/sbin/umount<pontodemontagem>

Compactar a imagem, se desejado.


gzip9<<arquivo>><arquivocompactado>
Linux Embarcado

Referncias

Embedded Linux Primer: a Practical, Real World Approach; Christopher Hallinan; Prentice Hall. Building Embedded Linux Systems; Karim Yaghmour; O'Reilly. http://www.buildroot.org http://www.busybox.net http://www.linuxfoundation.org http://www.linuxfromscratch.org http://www.pathname.com/fhs http://www.linuxfordevices.com http://lwn.net/Kernel/LDD3
Linux Embarcado

S-ar putea să vă placă și