Você está na página 1de 7

Introdução

Sistemas Embarcados
• Projetistas de software empregam várias ferramentas durante o
ciclo de desenvolvimento de um software
• E.g.: editores, compiladores, ligadores, interpretadores,
depuradores, analisadores de traços (profilers) etc
• Ambientes de desenvolvimento integram várias ferramentas
Ferramentas de desenvolvimento • e.g.: visual C++, eclipse, .Net etc
GNU toolchain • Sistemas embarcados tem a mesma característica
• Diferença: as ferramentas executam em uma plataforma enquanto
as aplicações se destinam a outra
• Desenvolvimento cruzado (cross-development)

Aula 07
INF01059 - Sistemas Embarcados 2

Compilador Mas o compilador sozinho não adianta muito...

• É um programa que recebe arquivos fontes e gera objetos • É necessário ainda:


• Nativo: o objeto é para processador da plataforma que compila • Bibliotecas de funções
• Cross: o objeto é para um processador diferente daquele da • Ligadores
plataforma que compila • Carregadores
• Linguagem intermediária é independente de plataforma • Ferramentas auxiliares p
para manipular
p p
programas
g objetos
j e
• O backend é que torna um compilador dependente de plataforma executáveis
• Tools chains
• Produtos comerciais ou soluções open-source
Pré-processador Back end

fonte
Linguagem Código assembly
intermediária (dependente de arquitetura)

INF01059 - Sistemas Embarcados 3 INF01059 - Sistemas Embarcados 4


GNU toolchain GNU Compiler Collection (gcc)

• Conjunto de ferramentas destinado ao desenvolvimento de • Conjunto de compiladores para diferentes linguagens


programas aplicativos e de sistemas • Originalmente denominado de GNU C compiler (gcc)
• GNU make • Oferece suporte para vários tipos de processadores
• GNU Compiler Collection • Arquitetura:
• GNU binutils
• GNU debbuger Pré-processador Compilador
• GNU build system (autoconf, automake, libtool e gnulib) front Back
cpp
• Além disso: end end

• Necessidade de um editor
fonte
• Biblioteca (glibc)
- Retirada comentários Arquivo C
- Diretivas de compilação intermediário Código assembly
- Expansão de macros (dependente de arquitetura)

INF01059 - Sistemas Embarcados 5 INF01059 - Sistemas Embarcados 6

GNU make GNU Debugger (gdb)

• Ferramenta para automatizar a compilação de aplicações • Depurador padrão do sistema GNU


com grande quantidade de arquivos • Características principais:
• Permite determinar uma árvore de dependências • Interface em modo textual, mas possui front-ends gráficos (ddd,
• Alterações em um arquivo força a compilação de todos os Eclipse CDT, Xcode e GUDmode do emacs)
outros que dele dependem • Visualizar e alterar valor de variáveis
• Desvantagem: programadores necessitam definir isso!! • Rastrear a execução de programas
• Baseado em um arquivo texto que define as dependências • Oferece mecanismo de fazer depuração remota
• Conjunto de linhas contendo regras • Interessante para sistemas embarcados
• Permite a definição de variáveis e a inclusão de outros arquivos

http://www.gnu.org/software/gdb/documentation/

INF01059 - Sistemas Embarcados 7 INF01059 - Sistemas Embarcados 8


GNU Binary Utilities (binutils) GNU build system (autotools)

• Coleção de ferramentas de programação para manipulação • Conjunto de ferramentas para auxiliar o desenvolvimento e o
de código objeto em vários formatos porte de aplicações (entre sistemas Unix)
ferramenta Descrição sumária ferramenta Descrição sumária
• Inclui:
as assembler objcopy Copia arq. objetos • GNU autoconf
ld linker objdump Informações sobre arq.
arq objetos • Usado p para ggerar arquivos
q de configuração
g ç p para makefiles
gprof profiler ranlib Gera índices para arquivos • GNU automake
addr2line Traduz end. Para arquivos e linhas readlf Visualiza arquivos ELF • Auxilia a criação de arquivos makefiles portáveis
ar Cria, modifica, extrai arquivos size Lista seções e tamanhos de
• GNU libtool
c++filter Filtros para simbolos C++
objetos • Permite a criação de bibliotecas estáticas e dinâmicas
strings Lista strings de arq. objetos
dlltool Criação de bibliotecas dinâmicas
• GNU portability library (Gnulib)
strip Remove tabela de símbolos
(windows) • Coleção de rotinas projetadas para serem usadas em vários
nlmconv Conversor de formato windmc Mensagens de recursos windows sistemas operacionais
nm Lista símbolos de arq. objetos windres Compila arq. recursos windows

INF01059 - Sistemas Embarcados 9 INF01059 - Sistemas Embarcados 10

Cross desenvolvimento Geração de uma cross-toolchain


Plataforma de
desenvolvimento Plataforma-alvo • Necessário gerar código para a plataforma alvo (mínimo)
• Compilador C que gere código para processador alvo
• Conjunto de ferramentas binutils para alvo
• Biblioteca C (uClibc*, glibc, newlib ou similar)
ARM • Requisitos
q básicos:
• Possuir um compilador C funcional
IA32/AMD + linux
• Código fonte das ferramentas do toolchain (www.gnu.org)
• Objetivo: • Cópia dos arquivos header para a plataforma alvo
• Desenvolver aplicações em plataforma diferente da plataforma alvo (target) (www.kernel.org)**
• Motivação:
• Contornar restrições de memória do target
• Compensar ausência de dispositivos práticos para E/S
• Maior disponibilidade de recursos (hardware e software) * A ser usada na plataforma ARM
** Necessário para gerar aplicações, porém para gerar o núcleo são necessários todos os fontes.

INF01059 - Sistemas Embarcados 11 INF01059 - Sistemas Embarcados 12


Por onde começar? Geração do gcc e da glibc

• Dependências entre as ferramentas • Gerar um compilador gcc simples, que não precise usar a libc
• Compilador bootstrap
binutils • Gerar a glibc com o compilador bootstrap
• Compilar o compilador ☺ usando a glibc
• Lembrete: o compilador é um programa e como tal se compila
gcc glibc

Depende de
• binutils é independente dos demais e necessário para estes
binutils gcc
• Fácil: é o prìmeiro a ser gerado
Depende de
• gcc e glibc (ou similar): problema do ovo e da galinha! Depende de Depende de

• Para compilar a biblioteca é necessário ter o compilador


gcc -bootstrap glibc
• Para ter o compilador é necessário ter a biblioteca
Depende de
• Certos elementos do compilador dependem da libc

INF01059 - Sistemas Embarcados 13 INF01059 - Sistemas Embarcados 14

glibc uClibc

• Biblioteca C dentro do projeto GNU • Versão “enxuta” para sistemas embarcados


• Desenvolvida para oferecer desempenho, portabilidade e • Desenvolvido por CodePoet Consulting
atender os principais padrões • http://www.uclibc.org/
• Incluída em todos os sistemas GNU/Linux • Licença LGPL
• http://www.gnu.org/software/libc/
• Alta compatibilidade com a glibc
• Licença LGPL • Em processador ARM é cerca de 4 vezes menor que a glibc
• Não tem o problema da “contaminação”
• uClibc: aprox. 400 KB (libuClibc: 300 KB, libm: 55KB)
• Grande para sistemas embarcados glibc: aprox 1700 KB (libc: 1.2 MB, libm: 500 KB)
• e.g: aproximadamente 1.7 MB (libc: 1.2 MB e libm 500 KB) • Usada em várias soluções comerciais de linux embarcado
• e.g.: MontaVista, TimeSys e Wind River.

INF01059 - Sistemas Embarcados 15 INF01059 - Sistemas Embarcados 16


Para dar uma idéia…. diet libc

• Biblioteca C otimizada para ter tamanho reduzido


• http://www.fefe.de/dietlibc/
C program Compiled with shared libraries Compiled statically • Projetado para ser usada em programas relativamente pequeno
glibc uClibc glibc uClibc
• Tamanho da diet libc é aproximadamente de 70 KB
Plain “hello world” 4.6 K 4.4 K 475 K 25 K
Busybox 245 K 231 K 843 K 311 K

INF01059 - Sistemas Embarcados 17 INF01059 - Sistemas Embarcados 18

newlib Métodos para gerar cross-toolchain

• Biblioteca C mínima • Dois métodos para gerar


• Destinada a sistemas embarcados bastante pequenos • Faça você mesmo
• Suporte para uma variada gama de processadores • Geração através de ferramentas automáticas
• http://sources.redhat.com/newlib/ • Outras formas:
• Possui funções
ç de p
ponto flutuante de p
precisão simples
p • Obter uma toolchain jjá p
pronta (g
(google
g eppaciência!))
• Melhor desempenho que a do padrão IEEE • Aquisição de uma plataforma de desenvolvimento
• Versão simplificada de funções como printf

INF01059 - Sistemas Embarcados 19 INF01059 - Sistemas Embarcados 20


Faça você mesmo Versões gcc / glibc / binutils / kernel
Crosstool reports: http://kegel.com/crosstool/crosstool-0.38/buildlogs/
• Tarefa trabalhosa e árdua
• Pode levar muitas horas (dias)
• Muito detalhes de configuração e geração de vários componentes
Auxilia a
• Há vários relatos e how-tos na web encontrar uma
• Requisitos
q fundamentais: combinação
adequada
d d entre
• Preciso ter os arquivos headers do kernel (arquivos .h) as versões de
• Ser familiar com funcionamento do gcc, de patches, makefiles, gcc, glibc, binutils
comandos Unix e comandos (ld, ar, readelf etc) e headers do
kernel para gerar
• Fontes necessários estão em www.gnu.org uma toolchains
• Para ter uma idéia da dificuldade… com sucesso!
• http://www.aleph1.co.uk/armlinux/docs/toolchain/toolchHOWTO.pdf

INF01059 - Sistemas Embarcados 21 INF01059 - Sistemas Embarcados 22

Obter uma versão pré-compilada Algumas referências...

• Possível encontrar em vários locais • ARM


• Basta saber onde e se são adaptadas ao seu caso • http://www.codesourcery.com/gnu_toolchains/arm/
• Atenção: • Disponível para GNU/Linux, EABI e uClinux
• Várias toolchains são geradas para funcionar em paths fixos • Também disponível para ambientes windows
• Necessário instalar onde elas esperam
p estar ((/usr/local/<arch>)) • MIPS
• Verificar o modelo específico do processador, big/little endian, • http://www.linux-mips.org/wiki/Toolchains (vários links úteis)
versões da biblioteca C e do compilador… • Coldfire
• http://www.codesourcery.com/gnu_toolchains/coldfire
• Disponível para ELF, GNU/Linux and uClinux
• PowerPC
• http://www.codesourcery.com/gnu_toolchains/power.html
• Disponível para GNU/Linux e EABI

INF01059 - Sistemas Embarcados 23 INF01059 - Sistemas Embarcados 24


Geração automática de toolchain Leituras complementares

• Buildroot • P. Ragavahn, A. Lad, S. Neelakandan. Embedded Linux


• Scripts (makefiles) para gerar uma toolchain baseada em uClibc System Design and Developement. Auerbach, 2006.
• “Baixa” os fontes e patches necessários • C. Hallinan. Embedded Linux Primer: A Practical Real-World
• Permite também definir um root file system Approach. Prentice Hall, 2006.
• http://buildroot.uclibc.org/
p g • K. Yaghmour.
g Building
g Embedded Linux Systems.
y Oreilly,
y
• Crosstol 2003.
• Scripts (makefiles) para gerar uma toolchain baseada em glibc
• Baixa” os fontes e patches necessários
• http://www.kegel.com/crosstool/

INF01059 - Sistemas Embarcados 25 INF01059 - Sistemas Embarcados 26

Você também pode gostar