A linguagem C para Linux Embarcado não
é muito diferente da linguagem C para Linux Desktop, quando você programa
software. Mas quando o assunto é programação de device drivers
para Linux Embarcado existem mudanças significativas. Embora a
programação de software para Linux Embarcado e Linux Desktop sejam
semelhantes em muitos aspectos, ainda há pequenas diferenças a
considerar.
Compilador para Linux Embarcado
O compilador usado
vai depender da arquitetura do SoC(System-on-a-chip) escolhido. As
plataformas ou arquiteturas mais utilizadas em Linux Embarcado
atualmente é ARM, PowerPC e MIPS. Também é usado às vezes o x86
da intel. Você precisa compilar ou baixar uma variante do gcc para o
alvo especifico. É o que chamamos de compilador cruzado ou
toolchain. Então para ARM nós teríamos algo como arm-linux-gcc.
Para MIPS, mips-linux-gcc. E assim por diante.
O Debian GNU/Linux
é uma ótima distribuição que disponibiliza de graça compiladores
para diversas plataformas. Existem compiladores para arquiteturas que
provavelmente você nunca ouviu falar como SPARC, S390 e
Hppa. Visite: http://www.emdebian.org/tools/crosstools.html.
Em nível de
aplicativo você pode programar em linguagem C e muitas outras linguagens
como C++, Java, Perl, Python, Lua e outras. Existem muitos projetos e bibliotecas em Python para Linux Embarcado.
Bibliotecas para desenvolvimento de software
Um
grande problema na programação de Linux Embarcado é
encontrar as bibliotecas de desenvolvimento para a plataforma que
você escolheu. Se não existem você precisa fazer a compilação
cruzada. E isso é um problema ainda maior quando uma biblioteca
depende de outra, e de outra, num processo que parece não ter fim.
Eu passei por isso, é muito ruim, e perde-se muito tempo!
Novamente
o Debian GNU/Linux pode te salvar! Ele tem uma grande disponibilidade
de pacotes para vários ports.
Além
de bibliotecas de desenvolvimento, ele tem também muitos
aplicativos. Em especial para a plataforma ARM. Por isso você pode até
rodar o Debian dentro do Android.
Programação de Device Drivers
No Linux há três
camadas de software distintas nas quais se tem diferentes niveis de
acesso dentro kernel. A camada mais baixa e de maior nivel de acesso
é a dos plataform drivers. O segunda com nivel de acesso
intermediario é a de device drivers. A terceira e última é
a camada de aplicativos. A nível de device drivers e platform drivers
só é possível programar em linguagem C.
Outros dois
conceitos usados na programação de Linux e que estão relacionados
a divisão da memoria principal(RAM) em duas regiões são o kernel
space(espaço de kernel) e o
user space(espaço do
usuário). As duas primeiras camadas plataform driver
e device drivers são
do kernel space. A
camada de aplicativos é do user space.
O
kernel space é onde o
Linux executa e provém seus serviços, e onde os device
drivers residem. Já o user
space é a região de memoria
onde os processos de usuários são executados. O kernel
space pode ser acessado por
processos de usuário somente através do uso de system
calls(chamadas de sistema).
Do
ponto de vista de camadas, se tomarmos como exemplo uma memoria
EEPROM at24cxx acessada através de barramento I2C:
1°
camada:
I2C plataform driver (geralmente fornecida pelo fabricante)
2º
camada: I2C device driver at24.c
3º
camada: O software em espaço de usuário para ler e escrever a
memória
O código fonte para um platform driver é dependente de arquitetura e de fabricante. Significa que um I2C platform driver para os processadores i.MX da Freescale não serve para os processadores AM335x da Texas Instruments e vice-versa. Por outro lado, o device driver at24.c roda em qualquer plataforma que tenha uma funcionalidade mínima, fornecida pelo plataform driver. Vou explicar isso com mais detalhes em outro artigo.
Desenvolvimento de Device Drivers para Android
O
desenvolvimento de device
drivers para
Android é em muitos casos semelhante a programação de device
drivers para
Linux. Porque a camada mais baixo do Android é o próprio Linux. Porém, o Linux usado no Android, não corresponde exatamente ao Linux oficial. O kernel do Android tem, por exemplo, um gerenciamento de energia(Power Magagement), totalmente novo, direcionado para dispositivos portáteis cuja fonte de alimentação é uma bateria. E outros subsistemas do kernel Linux foram reescritos e outros foram criados do zero.
A
programação de driver
para Android envolve desenvolver/portar drivers
para perifericos escolhidos que já tenham suporte na Pilha do
Android. Alguns desses dispositivos são:
- GPS
- Camera
- Módulo GSM/GPRS
- Dispositivos USB
- Cartão de memoria SD
- Bluetooth
- Audio
- WiFi
- LCD e Touch Screen
Nenhum comentário:
Postar um comentário