Introdução
Linux Embarcados é a
aplicação e uso do kernel Linux em uma placa eletrônica cujo
principal elemento é o SoC(System-on-a-chip). SoC é um chip eletrônico que reúne todos os elementos básicos de um sistema computacional como CPU, memória principal(RAM), memória secundaria(ROM/FLASH) e alguns periféricos. Atualmente um SoC contém internamente diversos periféricos dos mais variados tipos como I2C, SPI, UART, CAN, enfim, a lista pode ser enorme. A figura abaixo mostra um típico SoC ARM.
O kernel Linux em conjunção com outros softwares são escritos na memória flash ou outra mídia de armazenamento presente na placa, como, por exemplo, um cartão uSD. Esta combinação forma um sistema operacional completo e funcional.
O kernel Linux em conjunção com outros softwares são escritos na memória flash ou outra mídia de armazenamento presente na placa, como, por exemplo, um cartão uSD. Esta combinação forma um sistema operacional completo e funcional.
O mesmo Linux que roda em
um supercomputador pode rodar também em uma simples placa
eletrônica. O que torna isso possível é que o Linux suporta uma
grande variedade de arquiteturas e processadores. Mas nem todas essas
arquiteturas são de fato usadas em sistemas embarcados. As mais
comumente usadas em sistemas embarcados são ARM, PowerPC e MIPS.
Muitas sub-comunidades
mantêm seu próprio kernel, com atributos novos e distintos, porém
menos estáveis. E em alguns casos, os fabricantes mantêm versões
derivadas do Linux oficial para dar suporte para seu hardware
específico.
Arquitetura de um Sistema Linux Embarcado
Os componentes básicos
de um Linux Embarcado são:
1. Bootloader
2. Kernel
3. Rootfs
4. Toolchain
O bootloader reside em
uma memória de programa protegida em um SoC ou outra mídia de
armazenamento presente na placa. Ele usualmente é o primeiro
software a rodar depois que se liga a placa ou depois de um reset. O
bootloader é responsável por carregar o kernel na memória
principal do sistema. Ele pode receber parâmetros de configuração
através de arquivo ou linha de comando. E você pode passar
parâmetros e comandos ao kernel por meio do bootloader. A figura abaixo mostra o processo de boot de um sistema Linux Embarcado e os elementos básicos que o compõe:
O kernel é o Linux em
si. Como você deve saber o kernel é responsável por gerenciar
todos os periféricos internos ao SoC e fora dele, a memória
principal e secundária do sistema, além de oferecer mecanismos de
acesso a hardware para softwares em espaço de usuário, através de
chamadas de sistema(system calls). Ele coordena todos os
processos para que não haja conflitos por recursos do sistema. E
muitas outras tarefas.
O rootfs(root file system) é um conjunto
de programas e bibliotecas organizadas em uma hierarquia predefinida.
Está relacionado intimamente com a ideia de que temos sobre
distribuições baseadas em GNU/Linux, pelo fato deles proverem programas e bibliotecas já prontos para uso. Por esta razão temos
rootfs feitos por distros como Debian, Ubuntu, Fedora, Arch e outras.
No Debian há ports para
ARMEL, ARMHF, MIPS, PowerPC, Sparc, etc. O rootfs pode ser construído e
gravado com
vários tipos de sistemas de arquivos próprios para memória NAND
como cramfs, JFFS2,
squashfs e muitos
outros. Hoje em dia pode-se
usar sistemas de arquivos projetados para HDs como ext2, ext3 e ext4.
Toolchain
Uma
toolchain é um conjunto de softwares de ferramentas de
desenvolvimento. Uma
toolchain cruzada
(como arm-linux-gcc) roda em um sistema host
de
uma arquitetura específica, tal como x86, mas produz código binário
que executará em uma arquitetura diferente, como ARM, por exemplo.
Este processo é chamado de compilação cruzada (cross
compile)
e é a maneira típica de construir software embarcado.
Uma
toolchain pode ser considerado o elemento central de um Linux Embarcado. A partir dela todos os outros elementos serão gerados.
Desta forma, se você escolhe uma toolchain cruzada para armhf,
bootloader, kernel e todos os softwares terão que ser compiladas
para armhf.
Você pode criar seu próprio toolchain
ou baixar uma já existente. Os compiladores do Debian são uma boa
escolha porque são estáveis e compactas. Por outro lado construir
sua própria toolchain é uma tarefa complexa e às vezes pode ser
frustante. Você pode encontrar as toolchains do Debian aqui: http://www.emdebian.org/
Há três conceitos associados com toolchains que você verá
constatemente:
- build machine, é onde a toolchain é criada
- host machine, é onde a toolchain é executada
- target machine, o alvo para qual a toolchain gera os executáveis
Tipicamente
nós usamos algo como uma máquina de construição(build
machine)
x86, um host
x86 e algum alvo(ARM, PowerPC, MIPS). A máquina
de construção e o host podem ser Windows ou Mac OS, entretanto é
altamente recomendado usar Linux como estação de trabalho. A
razão é simples: para
ganhar experiência com Linux, não há nada melhor do que usar o
próprio Linux para desenvolvimento. Minha recomendação pessoal:
use Linux como build
machine
e host machine.
Construtores de sistemas
Existem
softwares que podem construir de
maneira automatizada um sistema Linux Embarcado completo. Usando o
mesmo esquema de construção do Linux, através de um arquivo
.config. A
maioria desses sistemas permite a construção do sistema usando uma toolchain
indicada por você ou constrói tudo do zero, incluindo a toolchain.
Boas
escolhas de construtores de sistemas são o Buildroot, Yoctoproject e
Ptxdist. Você pode também construir manualmente um Linux Embarcado
do zero, mas leva um certo tempo e é bastante complicado. O livro
Construindo
Sistemas Linux Embarcados
explica passo a passo como construir o sistema completo do zero.
Placas com Linux Embarcado
Em
2013 uma avalanche de novas placas com Linux apareceram no mercado.
Muitos com preços atrativos. Antes disso era difícil comprar um
placa devido aos altos preços. Não que não existisse nenhum placa
com preço acessível, mas havia poucas. Por exemplo, Friendly ARM.
Atualmente
existem muitas opções e configurações de placas. Entre
as mais baratas e com ótimo custo beneficio estão OLinuXino,
Cubieboard, BeagleBone Black, Raspberry pi, Wandboard...
Elas
são feitas por fabricantes independentes de diferentes partes do
mundo. Das novas placas que tem emergido recentemente, a Beaglebone
Black foi a que mais se difundiu rapidamente.
A
escolha
dependerá dos requirimentos do projeto e seu orçamento disponível.
As placas cujo público-alvo são hobistas são geralmente mais
baratas. Você pode comprá-las com menos de $100. As placas com
maior número de periféricos e mais memória RAM são usualmente
mais caras.
Linguagens de Programação
A
disponibilidade de ports feitos por distribuições como Debian, Fedora, Arch, etc, torna a
programação mais fácil em qualquer linguagem disponível em um
Desktop Linux. Por exemplo, é possível programar em C, C++, Java,
Perl, Python. Muitos projetos tem sido feitos em Python. Entretanto a
maioria ainda é feito em linguagem C.
Aplicações
O
Linux tem se expandido muito no mundo da eletrônica em anos
recentes. Em grande parte devido ao Android. Mas não apenas por isso, também por sua maturidade e melhorias nos ports usados em
sistemas embarcados como ARM, MIPS e PowerPC. Parece que os
desenvolvedores do kernel estão dando mais atenção a sistemas
embarcados e novos atributos visando esse segmento tem sido
adicionados.
Hoje
o Linux é usado em muitos dispositivos eletrônicos, mesmo onde não
era usado antes. Exemplos como TVs, refrigeradores, Smartphone,
receptores de TV por satélite, em automação de carros e assim por
diante. É provável que continue crescendo.
Nenhum comentário:
Postar um comentário