Wagner Coimbra

51
26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo Primeiros Passos para Embarcar Linux em Sistemas Baseados em Processadores ARM Prof. Wagner Augusto Pires Coimbra

Transcript of Wagner Coimbra

Page 1: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Primeiros Passos para Embarcar Linux em Sistemas Baseados em Processadores ARM

Prof. Wagner Augusto Pires Coimbra

Page 2: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Agenda

• Parte I: Entendendo os Problemas

• Parte II: Um Exemplo de Solução (com demonstrações)

• Considerações Finais

Page 3: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

PARTE I: ENTENDENDO OS PROBLEMAS

Page 4: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Aplicações que exigem alto desempenho

• IHMs com recursos 2D e 3D • Aplicações industriais com baixo consumo e suporte a rede • Dataloggers com análise de dados em tempo real • Diagnóstico médico (ex: radiologia)

Aplicações tais como estas exigem sistemas com alto desempenho, seja para tratar as entradas, efetuar algum condicionamento e/ou armazenamento de dados ou ainda para proporcionar uma saída adequada ao usuário.

Page 5: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Empregando sistemas microprocessados

• Qual linha de microprocessador? • Custo do processador? • Complexidade do hardware? • Kits para desenvolvimento? • Sistemas operacionais disponíveis? • Ambientes de desenvolvimento disponíveis? • Bibliotecas disponíveis? • Tempo de permanência dos componentes no mercado?

Page 6: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Empregando sistemas microprocessados

• Qual linha de microprocessador? ARM Cortex A8 • Custo do processador? US$ 5,00 a US$ 40,00 (FOB) • Complexidade do hardware? Média, comparado a um PC • Kits para desenvolvimento? Existem de diferentes fabricantes • Sistemas operacionais disponíveis? Win, Distros Linux e Android • Ambientes de desenvolvimento disponíveis? IDEs diversos + gcc • Bibliotecas disponíveis? QtEmbedded, SDKs dos fabricantes, etc • Tempo de permanência dos componentes no mercado?

Depende do Fabricante Escolhido

Page 7: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Exemplo de Processador ARM Cortex A8

DM3730 (Digital Media Processor) • Núcleo Microprocessado: Cortex A8 com clock de até 1GHz • Núcleo DSP: TMS320 com operação até 660MHz • Acelerador de Áudio e de Vídeo on Chip • Controlador de Memória Externa • E/S: 1,8V

Page 8: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Famílias de Processadores ARM Cortex A8

A classificação depende do fabricante. Normalmente está relacionada aos periféricos embarcados. Exemplo (TI): DaVinci: Núcleo Cortex A8 com periféricos para aplicações multimídia on chip.

Sitara: Núcleo Cortex A8 sem periféricos on chip específicos para multimídia.

Page 9: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Exemplos de kits para desenvolvimento

Beagleboard xM Beaglebone Pandaboard TechNexion i.MX53 Quick Blizzard Board Start Board

Page 10: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma

Haverá uma (inevitável) mudança relacionada à:

1. Definição do hardware de desenvolvimento; 2. Definição da ferramenta de desenvolvimento (IDE + Compilador); 3. Execução de testes iniciais (ambientação com um Pisca-LED); 4. Construção de um framework próprio; 5. Desenvolvimento de produtos e de soluções para os clientes.

Page 11: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 1. Definição do hardware de desenvolvimento Principais Critérios (com microcontroladores):

a) Custo ($) b) Periféricos embarcados c) Facilidade de aquisição (tempo, burocracia, etc)

Principais Critérios (com microprocessadores):

a) Facilidade de aquisição (tempo, burocracia, etc) b)Custo ($) c) Periféricos existentes no kit

Page 12: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 2. Definição da ferramenta de desenvolvimento (IDE + Compilador) Microcontroladores:

a) Custo ($) b) Facilidade de uso c) Suporte

Page 13: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 2. Definição da ferramenta de desenvolvimento (IDE + Compilador) Microprocessadores:

a) O compilador é o gcc para arm (free) b) O IDE pode ser o Eclipse (ou outro free) c) O custo destas ferramentas é R$0,00 d) Existem diversos recursos no IDE (trabalho facilitado) e) Suporte: a comunidade (o que devo concluir disso?)

Até aqui parece que só existem vantagens.

Vamos continuar...

Page 14: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 3. Efetuar testes iniciais (ambientação com um Pisca-LED) Microcontroladores:

a) Configurar o sistema de clock e GPIO b) Implementar um Pisca-LED (usando delay com “for“) c) Gravar e executar o Pisca-LED

Agora começarão as diferenças importantes entre sistemas microcontrolados e microprocessados.

Page 15: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 3. Efetuar testes iniciais (ambientação com um Pisca-LED) Microprocessadores: a) Escolher um sistema operacional Pago ou Gratuito? Suponhamos Linux b) Qual distribuição? Qual é a mais leve? Qual me dá os recursos gráficos que necessito? ... c) Definir os recursos do SO que deverão ser embarcados Modo Console? Modo Gráfico? GNOME? ...

Page 16: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 3. Efetuar testes iniciais (ambientação com um Pisca-LED) Microprocessadores: d) Definir bibliotecas para periféricos específicos Áudio? OpenGL? Ethernet? USB? I2C? SPI? ...

e) Definir se serão usadas bibliotecas de terceiros SDK do fabricante? Qt? ...

f) Preparar um cartão SD com os recursos necessários Como particionar/formatar? Existe imagem pronta? Terei de construir uma? Como construo uma imagem? Como testo uma imagem?

Page 17: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 3. Efetuar testes iniciais (ambientação com um Pisca-LED) Microprocessadores: g) Configurar parâmetros de boot (a grosso modo, algo equivalente ao config.sys e ao autoexec.bat do antigo DOS)

Como é o processo de boot? O que eu posso configurar? O que eu preciso configurar? Como eu configuro?

Page 18: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 3. Efetuar testes iniciais (ambientação com um Pisca-LED) Microprocessadores: h) Implementar a aplicação (Pisca-LED)

Onde estão os LEDs (no hardware)? Como acessos os LEDs (no Linux)? Ok, acessei via linha de comando. Mas e no programa? Ok, acessei no programa, mas como faço um delay? (LIBs?)

Page 19: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 3. Efetuar testes iniciais (ambientação com um Pisca-LED) Microprocessadores: i) Compilar a aplicação Como configuro o ambiente para compilar a aplicação? j) Embarcar a aplicação Como transfiro a aplicação? Onde devo colocar a aplicação? Como executar a aplicação

(é possível detalhar mais, mas isso não é necessário neste momento)

Page 20: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 4. Construir um framework Microcontroladores: a) Definir os periféricos que normalmente serão usados b) Implementar e testar bibliotecas c) Manter um backup/controle de versão das bibliotecas

Page 21: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 4. Construir um framework Microprocessadores: a) Definir os periféricos que normalmente serão usados - Identificar bibliotecas existentes - Testar as bibliotecas disponíveis - Definir uma estratégia de acesso/uso de periféricos sem biblioteca disponível (kernel space? user space?) b) Implementar e testar bibliotecas (este trabalho também é feito com microcontroladores, mas agora o ambiente é mais complexo) c) Manter um backup/controle de versão das bibliotecas (seria interessante salvar, também, imagens Linux?)

Page 22: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Principais Quebras de Paradigma 5. Desenvolver produtos e soluções para os clientes Microcontroladores: a) Criar uma aplicação-base, com as bibliotecas necessárias b) Acrescentar funcionalidades específicas a cada caso. Microprocessadores: a) Criar um processo para desenvolvimento de produtos b) Criar um processo para treinamento de novos empregados c) Criar recursos para manter a segurança dos seus dados d) Criar um procedimento para embarcar a aplicação (para os clientes)

(e até agora não estamos pensando no projeto de hardware)

Page 23: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Conclusão desta primeira análise

Para quem está iniciando, o primeiro desafio consiste em efetuar o primeiro teste de ambientação (o velho Pisca-LED), partindo do zero e chegando a um programa de teste funcional, sem se perder (muito) ao longo do caminho. O segundo desafio consiste em criar o seu próprio método de trabalho.

Considerando que este seja o seu primeiro contato, as informações a seguir o ajudarão com o primeiro desafio!

Page 24: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

PARTE II: UM EXEMPLO DE SOLUÇÃO

Page 25: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Objetivo desta Segunda Parte

Explorar um caminho que permite preparar um kit de desenvolvimento baseado em processadores ARM para embarcar uma distribuição de Linux, deixar o sistema operacional e testá-lo por meio de dois programas de ambientação simples.

Page 26: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

1. Escolha de um kit para desenvolvimento

Neste exemplo, será usado um kit Beagleboard xM. (processador DM3730CBP 1GHz)

Page 27: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

2. Preparação do ambiente de desenvolvimento

Um desktop com o Ubuntu Linux 10.04 LTS (32 bits) Observações:

1. Podem ser usadas máquinas virtuais. No entanto, é recomendada uma máquina real.

2. Você poderá manter Windows e Linux em uma mesma máquina usando um dual-boot. Há muita informação sobre isso no Google.

3. Não atualize o seu sistema sem um motivo concreto. Consulte o site do fabricante para saber o S.O. que está homologado.

Page 28: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

3. Escolha de uma Distribuição Linux (a ser embarcada)

Angstrom Linux (leve e free)

Page 29: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

4. Produzir uma imagem da distribuição Linux

Por meio de um Buildsystem (gerador de imagens Linux): • Buildroot (execução offline – na sua máquina); • Narcissus (execução online – você configura na página web, a

imagem é compilada no servidor web e, ao final, você recebe um link para download da imagem).

... Ou por meio de uma imagem pré-compilada pelo fabricante: http://circuitco.com/support/files/BeagleboardxM/xMc_4_25.zip Inicie por meio de uma imagem pré-configurada, para diminuir o universo de problemas em potencial.

Page 30: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

5. Preparar um cartão microSD

a) Insira o cartão no desktop e descubra o seu nome de dispositivo: $ demesg | tail [ 60.625434] sd 4:0:0:0: [sdb] Assuming drive cache: write through

[ 60.629428] sd 4:0:0:0: [sdb] Assuming drive cache: write through

[ 60.629436] sdb: sdb1

[ 60.635440] sd 4:0:0:0: [sdb] Assuming drive cache: write through

[ 60.635448] sd 4:0:0:0: [sdb] Attached SCSI removable disk

Neste exemplo: dispositivo /dev/sdb (que possui uma partição apenas, chamada sdb1)

Page 31: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

5. Preparar um cartão microSD

b) Baixe a imagem demo do Angstrom Linux: $ wget http://circuitco.com/support/files/BeagleboardxM/xMc_4_25.zip

Resolving circuitco.com... 206.188.192.85

Connecting to circuitco.com|206.188.192.85|:80... connected.

HTTP request sent, awaiting response... 200 OK

Length: 228082726 (218M) [application/zip]

Saving to: `xMc_4_25.zip'

100%[===================>] 228,082,726 204K/s in 18m 21s

2012-06-11 11:21:06 (202 KB/s) - `xMc_4_25.zip' saved

[228082726/228082726]

(imagem de demonstração = imagem completa)

Page 32: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

5. Preparar um cartão microSD

c) Descompacte a imagem do Angstrom Linux $ unzip xMc_4_25.zip (necessários 4GB de espaço livre no HD)

Page 33: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

5. Preparar um cartão microSD

d) Grave a imagem descompactada no cartão SD $ sudo dd if=./xMc_4_25.img of=/dev/sdb bs=8225280 dd: writing `/dev/sdb': No space left on device

475+0 records in

474+0 records out

3904897024 bytes (3.9 GB) copied, 625.463 s, 6.2 MB/s

(demora cerca de 12 minutos)

Desmonte as partições (se estiverem montadas) e retire o cartão microSD do micro. Ele está pronto para ser usado com a Beagleboard xM.

Page 34: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

6. Efetuando o boot e testando o cartão microSD

Conexões essenciais: Mouse; Teclado e; Monitor (conectados à Beagleboard xM).

>>> Demonstração

Page 35: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

7. Resumo do Processo de Boot

1. Um bootloader de 1º estágio (X-Loader), embutido em uma ROM existente no chip da MPU, verifica o estado lógico de alguns pinos de entrada para determinar onde está armazenado o bootloader de 2º estágio (o U-Boot).

2. Após determinar onde está o U-Boot, o X-Loader configura os periféricos necessário para carregar o bootloader de 2º estágio.

3. O U-boot é carregado na memória, e lê o seu arquivo de configuração (uEnv.txt). Após isso, o U-Boot configura demais periféricos e inicia a carga e a execução do kernel do Linux.

Page 36: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

7. Resumo do Processo de Boot

IMPORTANTE: • Na Beagleboard xM, o uBoot fica na partição primária de um cartão

microSD.

• Esta partição primária é do tipo FAT32.

• A distribuição Linux fica na segunda partição (ext3).

Page 37: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

8. Compilação e execução do programa de teste

Opções: • Crosscompiler: desenvolver e compilar no Desktop. Descarregar

para o kit de desenvolvimento. Requer preparação do ambiente de desenvolvimento.

• Compilação diretamente no kit: a compilação é mais demorada do que em um desktop, mas dispensa o trabalho de configuração da máquina de desenvolvimento.

Sempre inicie pelo caminho menos complexo, para aumentar a sua chance de sucesso. Portanto, será usada compilação pelo kit.

Page 38: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

9. Pacotes de programas necessários a compilações

Abra uma janela TERMINAL na Beagleboard xM e faça o seguinte: Atualize os caminhos para download de pacotes $ opkg update Baixe o pacote de programas para desenvolvimento $ opkg install task-native-sdk Crie um link simbólico para o a biblioteca compartilhada libgcc_s: $ ln -s /lib/libgcc_s.so.1 /usr/lib/libgcc_s.so

Page 39: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

10. Primeiro programa de teste (teste de compilação)

#include <stdio.h>

int main()

{

printf("\n\n\rAlo mundo!\n\n\r");

return 0;

}

Salve com o nome: alo_mundo.c Compile com: $ gcc alo_mundo.c –o alo_mundo Execute com: $ ./alo_mundo

>>> Demonstração

Page 40: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

11. Acessando Hardware no Linux

Existem dois tipos de interface para acesso a hardware no Linux: Syscalls (uso de rotinas existentes em drivers) SYSFS (mapeamento de periféricos no sistema de arquivos) Nesta demonstração será usado o SYSFS.

Page 41: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

11. Acessando Hardware no Linux

Os LEDs da Beagleboard xM estão mapeados no SYSFS, de acordo com o seguinte modelo: Periférico Pasta Atributos do periférico Arquivos Configurações e transmissão de dados Escrita Leitura de status e recebimento de dados Leitura O mapeamento de periféricos fica em /sys/class

Page 42: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

11. Acessando Hardware no Linux

Na Beagleboard xM: Arquivo referente ao LED USR0: Pasta: /sys/class/leds/beagleboard::usr0 Arquivo “trigger” : define eventos de controle do LED Valores validos: none nand-disk mmc0 heartbeat Arquivo “brightness” controle manual do estado do LED Valores validos: 1-ligado e 0-desligado

Page 43: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

11. Acessando Hardware no Linux

Via linha de comando : Entrar na pasta referente ao LED USR0 $ cd /sys/class/leds/beagleboard::usr0

Desativar qualquer controle automático sobre o LED $ echo "none" > trigger

Ligar $ echo 1 > brightness

Desligar $ echo 0 > brightness

>>> Demonstração

Page 44: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

12. Segundo Programa de Teste (pisca_led.cpp) #include <stdio.h>

#include <fcntl.h>

#include <unistd.h>

int main()

{

int i, led;

led = open("/sys/class/leds/beagleboard::usr0/brightness", O_WRONLY);

if( -1 == led ) {printf(“\n\rErro de acesso ao LED\n\r"); return -1;}

for(i=0; i<5; i++)

{

write(led, "1", 1); sleep(1);

write(led, "0", 1); sleep(1);

}

close(led);

return 0;

}

Page 45: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

12. Segundo Programa de Teste (pisca_led.cpp)

Salve com o nome: $ pisca_led.cpp Compile com: $ g++ pisca_led.cpp –o pisca_led Execute com: $ ./pisca_led

>>> Demonstração

IMPORTANTE: 1. Extensão .C é usada com fontes escritos em C estruturado. Esses

fontes são compilados com o programa gcc. 2. Extensão .CPP é usada com fontes escritos em C++ (Programação

Orientada a Objetos). Esses fontes são compilados com o programa g++.

Page 46: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

CONSIDERAÇÕES FINAIS

Page 47: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Considerações Finais

• Reserve tempo para se adequar ao desenvolvimento com microprocessadores. Este requisito é independente do fabricante/kit escolhido.

• Desenvolver usando microprocessadores não é extremamente difícil, mas é complexo: organização e paciência são fundamentais.

Page 48: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Considerações Finais

• Não queime etapas, pois uma informação ou uma experiência ignorada podem fazer falta depois.

• Aceite que eventualmente será necessário buscar ajuda e, com isso, desenvolva o seu método de busca (comunidade, amigos, eventos, treinamentos, etc).

Page 49: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

Considerações Finais

• Linux é de uso livre. • Muitos dos seus recursos são gratuitos. • No entanto, é grande o volume de conhecimento e experiência

necessário para desenvolver com naturalidade usando Linux (principalmente Linux embarcado em algum hardware).

• Portanto, adquira o hábito de investir na sua qualificação.

Page 50: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

REFERÊNCIAS

1. Angstrom Linux http://www.angstrom-distribution.org 2. ARM http://www.arm.com 3. Beagleboard xM http://beagleboard.org 4. Beaglebone http://beagleboard.org/bone 5. Blizzard Board http://www.technexion.com 6. Buildroot Build System http://buildroot.uclibc.org 7. i.MX53 Quick Start Board http://www.freescale.com 8. Narcissus Angstrom Distribution http://narcissus.angstrom-distribution.org 9. TI Processors Wiki (Sitara) http://processors.wiki.ti.com 10. U-Boot Universal Bootloader http://www.denx.de/wiki/U-Boot 11. Ubuntu Desktop http://www.ubuntu.com

Page 51: Wagner Coimbra

26-27 de Junho/June 2012 Transamerica Expo Center, São Paulo

DADOS PARA CONTATO

Prof. Wagner Augusto Pires Coimbra

[email protected] Currículo Lattes: http://buscatextual.cnpq.br/buscatextual/visualizacv.do?id=K4596982Z6