No artigo Linguagem C para Linux Embarcado foi mostrado as formas ou modalidades de programação
para sistemas embarcados rodando Linux. E também já foi explicado O que é Linux Embarcado.
Neste artigo será mostrado como
programar um software para Linux Embarcado e o que é necessário
para isso. O exemplo que será apresentado roda em qualquer placa
eletrônica com Linux, como, por exemplo, BeagleBone, Raspberry pi ou
outras. No entanto, os testes serão feitos na placa da Olimex
A13-OLinuxino. E o sistema host pode ser qualquer distribuição
atual GNU/Linux: Debian, Ubuntu, Fedora...
Instalando e configurando a cross-toolchain
Se você tem
dúvidas sobre o que é cross-toolchain leia o artigo O que é Linux Embarcado. Será utilizado para o exemplo o cross-toolchain
da Linaro gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415, por
ser estável e por rodar em praticamente qualquer distribuição de
sua escolha.
1 - Digite o
seguinte comando para baixá-lo:
$ wget https://releases.linaro.org/13.04/components/toolchain/binaries/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux.tar.xz
2 – Descompacte
o compilador
$ tar -xJf gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux.tar.xz
3 – Crie a pasta
toolchains/eabi sob /opt
# mkdir /opt/toolchains# mkdir /opt/toolchains/eabi
4 – Mova a pasta
do compilador para a pasta /opt/toolchains/eabi
# mv gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux /opt/toolchains/eabi/
5 – Adicione o
diretorio do compilador ao PATH de seu usuário
$ mcedit .bashrc (use seu editor de texto preferido)
E adicione à
última linha:
export
PATH="/opt/toolchains/eabi/gcc-linaro-arm-linux-gnueabihf-4.7-2013.04-20130415_linux/bin/:$PATH"
# arm-linux-gnueabihf-gcc -vVocê deverá ver na última linha:
gcc version 4.7.3 20130328 (prerelease) (crosstool-NG linaro-1.13.1-4.7-2013.04-20130415 - Linaro GCC 2013.04)
Código de Exemplo: Hello world
#include <stdio.h>
int main()
{
printf(“Ola Mundo\n”);
return 0;
}
Copie e salve como hello.c em sua pasta de trabalho.
Compilação do código
Digite o seguinte comando:
$ arm-linux-gnueabihf-gcc hello.c -o hello
Se o compilador
não gerou nenhum erro, funcionou! Verifique se o arquivo gerado é
para ARM:
$ file hello
A saída deverá
ser:
hello: ELF 32-bit
LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked (uses
shared libs), for GNU/Linux 2.6.31,
BuildID[sha1]=d3db9d8be9c58c465aab540c81e0cdc5f7c63551, not stripped
Transferência para a placa
A transferência
do arquivo para placa pode ser feito de várias maneiras. Se você
roda o Linux a partir de um cartão SD basta copiar para o cartão.
Aqui o método usado será transferência remota por ssh. Então
basta digitar:
$ scp hello usuario@192.168.1.x:/alguma_pasta
Mude o usuário, o ip e a pasta de acordo com suas configurações e conforme sua rede.
Teste do código
Então para
testar, digite no Linux que roda na placa:
$ ./hello
Compilação usando um Makefile
Iremos compilar o mesmo código, porém, agora faremos uso de um Makefile para automatizar o processo de compilação. A partir de agora, usaremos sempre o Makefile para compilação.
PROG = helloCopie este código e save como Makefile, usando o m maiúsculo mesmo! As linha abaixo das diretivas all e clean precisam ter uma tabulação para funcionar, caso contrário haverá erros! Caso tenha problemas com o Makefile, baixe aqui: Makefile. Digite o comando:
FILE = hello.c
SRCS = $(FILE)
OPT=-Wall -g -I../include
#LIBS=-L../lib -lpthread -ludev -lvlc
CC= arm-linux-gnueabihf-gcc
all:
$(CC) $(OPT) $(SRCS) -o $(PROG) $(LIBS)
mv $(PROG) ../bin
clean:
rm -rf ../bin/*
$ makeSe nenhum erro for mostrado então tudo está funcionando. Não usaremos bibliotecas no momento, portanto deixe LIBS comentado mesmo!
Pronto! Isto é tudo que você precisa para compilar qualquer software simples para Linux Embarcado. Veremos em outros artigos o uso de bibliotecas linkadas dinamicamente para projetos mais complexos.
Nenhum comentário:
Postar um comentário