Arduino e Linux

Per l'installazione di Arduino su un sistema Linux gli sviluppatori forniscono sul sito ufficiale una semplice guida che però non funziona nel caso di sistemi Mandriva Linux (20xx) e da quello che leggo in rete neanche in altri casi (Gentoo). In particolare in Mandriva 2009/10 risulta impossibile installare il pacchetto cross-avr-gcc, a causa di un bug nel sistema delle dipendenze (viene richiesto un pacchetto, manbo-files-gcc, in una versione non esistente).

Questa piccola guida integra, e non sostituisce, la guida ufficiale di Arduino.cc.

Problemi affrontati:

  1. impossibile installare avr-g++ come pacchetto
  2. RxTx, lock files e permessi (check_group_uucp(): error testing lock file creation [...])
  3. Gtk-WARNING e Gtk-CRITICAL

1. Installazione di avr-g++

Per funzionare, l'ambiente di programmazione di Arduino ha bisogno del compilatore avr-g++. A causa di un problema di dipendenze, sotto Mandriva Linux siamo costretti ad installarlo mediante compilazione dei sorgenti. La procedura seguita è essenzialmente quella descritta nella Wiki di AVR, con qualche variante. NOTA: la procedura che propongo prevede la compilazione da sorgenti di avr-gcc, avr-g++. Eventuali altre dipendenze vanno risolte autonomamente. Entrambe le compilazioni sono necessarie in sequenza e portano via un po' di tempo: preparate un libro o un forum succoso. Consiglio infine di creare una cartella temporanea in cui lavorare con archivi e compilazioni.

binutils

Le compilazioni successive si basano sulla presenza delle binutils

avr-gcc e avr-g++

Le varie versioni di GCC sono elencate su http://gcc.gnu.org/releases.html, mentre il download può partire da uno dei mirror: http://gcc.gnu.org/mirrors.html. Per assicurare il supporto al chipset di Arduino è importante scegliere una versione particolarmente recente (consiglio almeno 4.3; la 4.1 è sicuramente troppo vecchia, 4.2 non saprei). Scaricate sia l'archivio per gcc-core che quello di gcc-g++, salvateli nella stessa cartella ed estraeteli.

Come prima, dopo aver estratto l'archivio occorre posizionarsi nella cartella creata.

make e make install vanno eseguiti come utente root (o con sudo).

avr-gcc:

mkdir avr-gcc
cd avr-gcc
../configure --target=avr --program-prefix="avr-" --enable-languages=c --disable-libssp
make
make install
NOTA: l'ultimo parametro (--disable-libssp) dovrebbe essere necessario per evitare errori in fase di compilazione. Non ho effettuato la controprova, sembra che per usare Arduino comunque male non faccia.

avr-g++:

mkdir avr-g++
cd avr-g++
../configure --target=avr --program-prefix="avr-" --enable-languages=c,c++ --disable-libssp
make
make install
dove valgono le stesse considerazioni su --disable-libssp.

avr-libc

[ NB: non sono sicuro che questo pacchetto serva al 100%, ma fa parte della suite AVR e non mi sento di saltarlo ] La home page del progetto libc si trova a http://savannah.nongnu.org/projects/avr-libc/, mentre la versione più recente si può scaricare da http://savannah.nongnu.org/download/avr-libc/.

A questo punto la compilazione è banale:

./configure --host=avr
make 
make install

Ora lo script fornito dagli sviluppatori di Arduino può partire senza errori, e l'interfaccia che si presenta avrà un tranquillizzante aspetto tendente al blu.

2. RxTx, lock files e permessi

Molto probabilmente, a meno di non essere loggati come amministratore (root), lanciando lo script di Arduino otterrete il seguente errore:
check_group_uucp(): error testing lock file creation Error details:Permission denied
check_lock_status: No permission to create lock file.
please see: How can I use Lock Files with rxtx? in INSTALL
si tratta di un problema di gruppi e permessi. Aggiungete il vostro utente al gruppo uucp, fate il logout e rientrate: i messaggi di errore dovrebbero sparire.

3. Gtk-WARNING e Gtk-CRITICAL

Lanciando lo script di Arduino da terminale il programma potrebbe partire anche se vengono visualizzate queste due righe:
(<unknown>:3148): Gtk-WARNING **: Attempting to add a widget with type
 GtkButton to a GtkComboBoxEntry (need an instance of GtkEntry or of a subclass)

(<unknown>:3148): Gtk-CRITICAL **: gtk_widget_realize: assertion
 `GTK_WIDGET_ANCHORED (widget) || GTK_IS_INVISIBLE (widget)' failed
si tratta di un bug delle librerie JDK, e sembra che non ci sia niente da fare. Fortunatamente questo problema non impedisce il normale lavoro con Arduino!