Curso Linux Embarcado
Curso Linux Embarcado
Curso Linux Embarcado
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
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
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
Linux Embarcado
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
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
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
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:
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
Linux Embarcado
Linux Embarcado
Formas de boot
Linux Embarcado
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.
Linux Embarcado
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:
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
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
Linux Embarcado
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).
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
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.
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