quinta-feira, 1 de maio de 2014

Exemplo de software para Linux Embarcado

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"

6 - Teste o funcionamento básico (antes de fazer o teste, feche e abra o terminal novamente)
arm-linux-gnueabihf-gcc -v
Você 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 = hello
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/*
Copie 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:

$ make
Se 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