Iiniciando no GCC

Discussão sobre linux para plataformas Intel x86 ou x64 (PC)

Moderadores: 51, guest2003, Renie, gpenga

Iiniciando no GCC

Mensagempor mastk » 07 Mai 2007 12:24

Olá galera, estando 68K/CF e ARM vejo que o melhor compilador que se tem hoje é o GCC, já tentei pegar algumas versões deles, e já li alguns tutorias mas não entendi bem como a coisa rola.

imagino o seguinte:

inicialmente vc deve estrair os arquivos em suas devida pastas (que não faço muita ideia de como deve ser -.-' )

e disso se usa o comando make

O melhor contato que tive foi o eclipse pro coldfire que msm com uns paus gerou um HEX, mas foi uma coisa tipo next next next...


Alguem teria alguma informação sobre como instalar e msm explicações do pq de cada componente ou indicações de livro.

Posso rodar o GCC dentro do cygwin?
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor msamsoniuk » 07 Mai 2007 12:45

imagino que vc esta tentando produzir um cross-compiler. isso normalmente eh meio complicado e demorado, pq tem q aplicar patches e recompilar o gcc inteiro. mas vc pode encontrar ele pre-compilado:

http://www.uclinux.org/pub/uClinux/ucli ... ools/gcc-3

o fato da versao para windows ser um .sh significa que vc tem q executar o instalador pelo shell do cygwin.

dae para compilar vc cria um makefile basico com os parametros do compilador. nativamente, ele vai gerar um arquivo ELF, o que nao serve para muita coisa se vc estiver pensando em gravar uma flash ou eprom, mas setando os parametros corretos no makefile, o seu compilador ira gerar o binario desejado.

se vc tiver problemas, eu posto alguns exemplos.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04

Mensagempor xultz » 07 Mai 2007 16:39

Procure por um documento que explica como usar o Eclipse e o gcc para programar o LPC2106, ele vai ter dar ótimas dicas.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor mastk » 07 Mai 2007 17:54

desculpe xult, mas já fiz algumas pesquisas e nada claro. Existem bilhares de verções do GCC e cada é pra um placa alvo, ai fica dificil.

Como não entendo bem o mundo GNU fica perdido e msm os tutoriais da net vc fico sem saber o q eu estou fazendo.

Pelo que entedi o cyqwin deveria ter o comando make, e não tem instalei errado?

Peguei os arquivos m68k-.... .sh e digitei o nome no bash e nada, sh é um script mas o bash retorna falando que o arquivo não foi encotrado.

Sam, esse link é uma distribuição do uclinux, acho que não vai roda na minha placa não só tenho 2 mega de ram (256KB)?
Avatar do usuário
mastk
Dword
 
Mensagens: 4407
Registrado em: 14 Out 2006 20:43

Mensagempor ivan » 07 Mai 2007 20:46

Uma toolchain com setup para windows é encontrada no site www.gnuarm.org
"A mente que se abre a uma nova idéia jamais volta ao seu tamanho original." (Albert Einstein).
Avatar do usuário
ivan
Word
 
Mensagens: 618
Registrado em: 12 Out 2006 21:27

Mensagempor xultz » 08 Mai 2007 12:41

Mastk, o documento que sugeri é este: http://www.sparkfun.com/tutorial/ARM/AR ... clipse.pdf

O que acontece com o GCC é o seguinte: ele é um compilador que consegue gerar código para uma porrada de plataformas, até porte para PICs e dsPICs já tem. Quando você pega o código fonte do gcc e compila-o, você especifica que plataformas você quer que ele suporte. Dificilmente você encontra um gcc binário para baixar que suporte tudo, então ou você baixa um pocote para a plataforma que você deseja, ou compila o gcc para você.
No caso dos ARM, o pessoal do gnuarm mantém o suporte a ARM no gcc, e oferece pacotes binários para você usar (tanto no Linux quanto no Cygwin).
Além do compilador, cada modelo de chip precisa de um arquivinho com o mapa da memória do chip, porque cada modelo tem tamanhos e endereços diferentes. Pode ser que você encontre um pronto, pode ser que você precise criar ou modificar um para se adequar ao teu chip. Se você quer facilidade de verdade, compre (sim, tem que comprar e custa caro) uma suíte como o Rowley Crossworks que tem uma IDE, o gcc e mapa de uma porrada de chips. O Crossworks tem versões para Linux e Windows.
Sobre o make, ele é um pacote que você seleciona no momento da instalação do Cygwin. No documento acima ele explica como baixar e instalar o Cygwin.
Como o gcc é um software livre, mantido por voluntários, não espere encontrar nada mastigadinho e que sirva exatamente para a tua necessidade, ou você perde um tempo estudando a coisa (e dominando) ou então paga o preço por um software comercial, com suporte e tudo mais.
98% das vezes estou certo, e não estou nem aí pros outros 3%.
Avatar do usuário
xultz
Dword
 
Mensagens: 3001
Registrado em: 13 Out 2006 18:41
Localização: Curitiba

Mensagempor msamsoniuk » 10 Mai 2007 01:18

acho q eh falta de path para o diretorio atual... tente usar:

Código: Selecionar todos
sh m68k-*.sh


note que o que vc esta pegando eh o compilador que gera o uclinux para 68k, mas nao o uclinux em si, para isso vc precisaria baixar o kernel uclinux, a uclibc (biblioteca libc otimizada para uclinux) e os tools otimizados para a uclibc. as maquinas q eu vi rodando uclinux consomem algo em torno de 1MB de flash e 1MB de ram em execucao, entao eu acho que nao caberia na sua memoria, mas vc pode usar tranquilamente esse compilador.

sobre a geracao de codigo, para 68k, eh relativamente simples. eu costumo criar um Makefile contendo:

Código: Selecionar todos
CROSSPATH=m68k-elf-

     CC = $(CROSSPATH)gcc
     AS = $(CROSSPATH)as
     LD = $(CROSSPATH)ld
     AR = $(CROSSPATH)ar rcs
 RANLIB = $(CROSSPATH)ranlib

 CFLAGS = -O3 -Wall -m68000 -ffreestanding -fomit-frame-pointer -ffixed-%a0

   OBJS = boot.o libc/libc.a mm/mm.a sys/sys.a syscalls/syscalls.a drivers/drivers.a libc/libc.a

all: boot.o
        cd tools && make
        cd drivers && make
        cd sys && make
        cd syscalls && make
        cd mm && make
        cd libc && make

        $(LD) -Tdata 0x0 -Ttext 0x4000 -oformat binary -s -Map memory.map -o liquid.rom --start-group $(OBJS) --end-group


o pulo do gato eh que o compilador vai colocar o codigo em C no endereco 0x4000, entao para a cpu achar isso, tem q ter um codigo pequeno em asm:

Código: Selecionar todos
ROM_START       = 0
RAM_START       = 0x8000
RAM_SIZE        = 0xffff

        .globl  main,syscall

.data

        .long RAM_START+RAM_SIZE-1
        .long ROM_START+_start
        .skip 1012

.text

.align  4
.globl  _start
_start:

        nop
        pea     0
        pea     0
        pea     0
.L2:
        jsr     main
        bra     .L2


o truque eh que isso ae popula a tabela de vetores: tem vetor do SP e PC iniciais. o vetor de PC vai para um codigo que chama main() do codigo em C, que pelas instrucoes do ld, vao ficar no endereco 0x4000 da rom (o ld calcula isso para vc). bom, qq coisa grite hehehe, gerando um binario, vc examina ele com o hexdump, por ex, para conferir se tudo esta no endereco correto.
Avatar do usuário
msamsoniuk
Dword
 
Mensagens: 2935
Registrado em: 13 Out 2006 18:04


Voltar para Linux ( x86 ou x64 )

Quem está online

Usuários navegando neste fórum: Nenhum usuário registrado e 1 visitante

x