Installare la toolchain GCC per AVR
Da PtLUG Wiki.
Contents |
Introduzione
Nella maggior parte delle distribuzioni Linux viene installato e configurato tipicamente soltanto l'ambiente per sviluppare o ricompilare pacchetti per la macchina che si sta utilizzando. Puo' capitare a volte di voler sviluppare programmi e compilare per piattaforme che non sono quella che si sta utilizzando per il nostro sistema operativo. Un caso molto comune è quello dello sviluppo di applicazioni embedded per piattaforma AVR (processori Atmel).
La toolchain di per se non è troppo complicata da installare, si possono però incontrare alcuni piccoli inconvenienti, che possono far perdere diverso tempo se non si prendono i dovuti accorgimenti durante l'installazione.
Questa guida nasce allo scopo di sintetizzare il contenuto del manuale delle avr-libc, che spiega come configurare tutto l'ambiente di sviluppo. Questa guida è inoltre interamente in Italiano.
Pacchetti necessari
I tre pacchetti fondamentali per la toolchain GCC per AVR sono:
I pacchetti devono obbligatoriamente essere installati in questo ordine seguendo scrupolosamente le istruzioni che seguono.
N.b: personalmente consiglio di scaricare le ultime versioni stabili per quanto riguarda binutils e avr-libc, mentre consiglio l'ultimo snapshot della serie 4.1 per quanto riguarda il gcc (la versione attuale dichiarata stable presenta numerosi bug che sono stati risolti invece nelle ultime snapshot).
Preparazione dell'ambiente
Prima di iniziare l'installazione è opportuno preparare l'ambiente nel quale ricompileremo i sorgenti appena scaricati. Premetto che tutte le operazioni che seguono devono essere eseguite come utente root.
Per prima cosa occorre creare una cartella separata all'interno della quale installeremo la toolchain (senza che vada in conflitto con l'ambiente di sviluppo che utilizziamo per compilare i pacchetti del nostro sistema):
mkdir /usr/local/avr
Fatto questo, dobbiamo settare due variabili di ambiente che ci serviranno piu' avanti nell'installazione:
PREFIX=/usr/local/avr export PREFIX PATH=$PATH:/usr/local/avr/bin export PATH
A questo punto l'ambiente è pronto e possiamo iniziare con l'installazione.
binutils-avr
Le binutils contengono delle utilità a basso livello che permettono al compilatore di manipolare gli object.
Dobbiamo per prima cosa scompattare i sorgenti:
bunzip2 binutils-<version>-.tar.bz2 tar xfv binutils-<version>-.tar cd binutils-<version>
dove <version> può essere ad esempio 2.17.
A questo punto è consigliabile creare una sotto cartella dentro la cartella dei sorgenti per far in modo che non si sporchino i sorgenti orginali:
mkdir obj-avr cd obj-avr
A questo punto configuriamo, compiliamo ed installiamo le binutils:
../configure --prefix=$PREFIX --target=avr --disable-nls make make install
Se la compilazione non avrà dato errori, avremo le binutils correttamente installate in /usr/local/avr
gcc-avr
La compilazione del gcc è la parte piu' complicata di tutta l'installazione della toolchain, poichè occorre applicare alcune patch ai sorgenti prima di procedere alla compilazione.
N.b: prima di ricompilare il gcc avete bisogno di installare il pacchetto flex:
apt-get install flex
Per scompattare i sorgenti:
bunzip2 gcc-<version>.tar.bz2 tar xfv gcc-<version>.tar cd gcc-<version> mkdir obj-avr
La prima patch che consiglio di applicare è quella relativa al supporto di più processori Atmel (compresi quelli più recenti), che purtroppo non sono stati inclusi nella release originale.
La patch è scaricabile da questo indirizzo: http://www.freebsd.org/cgi/cvsweb.cgi/ports/devel/avr-gcc/files/patch-newdevices
Per scaricarla occorre cliccare su Download e salvare la pagina che si apre in un file chiamato patch-newdevices. Il file va salvato all'interno della cartella gcc-<version> che abbiamo appena creato.
Per applicare la patch, dobbiamo eseguire questo comando all'interno della cartella dei sorgenti del gcc:
patch -p0 < patch-newdevices
A questo punto occorre fare la seconda modifica ai sorgenti. Vogliamo evitare che il gcc installi la propria versione della libreria libiberty, e possiamo effettuare le modifiche con questo comando:
sed -i 's/install_to_$(INSTALL_DEST) //' libiberty/Makefile.in
I sorgenti adesso sono pronti per essere ricompilati:
../configure --prefix=$PREFIX --target=avr --enable-languages=c --disable-nls --disable-libssp --with-dwarf2 make make install
Anche in questo caso, se non ci dovessero essere errori di compilazione, il gcc sarà correttamente installato in /usr/local/avr
avr-libc
Dopo aver installato le binutils ed il gcc, possiamo finalmente installare le avr-libc:
bunzip2 avr-libc-<version>.tar.bz2 tar xfv avr-libc-<version>.tar cd avr-libc-<version> ./configure --prefix=$PREFIX --build=`./config.guess` --host=avr make make install
A questo punto anche le avr-libc sono correttamente installate nella cartella che abbiamo specificato all'inizio.
Impostare il $PATH per il gcc-avr
Una volta completata l'installazione è consigliabile aggiungere il percorso /usr/local/avr al PATH di sistema in maniera permanente. Per fare questo basta editare il file /etc/profile ed aggiungere la seguente riga in fondo al file:
PATH=$PATH:/usr/local/avr/bin export PATH
Altri pacchetti consigliati
Per sviluppare su piattaforma AVR sono necessari solitamente altri pacchetti che qui citerò solamente, rimandandovi alla guida ufficiale presente sul sito delle avr-libc per quanto riguarda il loro utilizzo.
- Avrdude: permette di programmare le schede con processore Atmel
- SimulAvr: un simulatore di schede AVR con processore Atmel
Pacchetti precompilati
Pensando di fare cosa gradita, e per risparmiare tempo se dovessi per qualche motivo installare di nuovo l'ambiente di sviluppo, ho provveduto a preparare dei pacchetti precompilati.
N.b: i pacchetti sono stati creati utilizzando Checkinstall.
Ubuntu Dapper 6.06
Ubuntu Edgy 6.10
Script di installazione automatica
Francesco Sacchi ha realizzato uno script che permette di eseguire automaticamente tutte le operazioni necessarie all'installazione della toolchain. Potete trovarlo a questo indirizzo: http://www.develer.com/oss/AvrToolchain
Autore
Questa guida è stata scritta da Andrea Grandi.
Ringraziamenti
La realizzazione di questa guida non sarebbe stata possibile se non fossi riuscito ad installare con successo la toolchain AVR sul mio PC. Tra le persone che mi hanno aiutato nel capire il funzionamento di tutto il meccanismo, è doveroso ringraziare:
- Batt (Francesco Sacchi): per il tempo e la pazienza che sta impiegando nello spiegarmi la programmazione Embedded.
- Matteo Mattei: per avermi suggerito la patch per le libiberty.

