Compilare Arduino / Sanguino su Gentoo amd64

Altre lingue

Bene, mi è arrivata la CupCake, in scatola di montaggio. Ha l'elettronica già montata, e i firmware pre-installati. Ma voglio poter fare gli aggiornamenti, specialmente perché tutto il progetto è ancora in sviluppo.

Allora, le istruzioni di MakerBot dicono "prendi l'ambiente Arduino, applica la patch Sanguino, e sei a posto". Facile, vero?

Comincio scaricando i sorgenti per il software Arduino. Vedete, la mia macchina è a 64 bit, e i binari pre-compilati sono a 32. Non buono.

Ovviamente, devo compilare il cross-compilatore e accessori… abbastanza facile: crossdev ha un "target" apposito:

# crossdev -t avr

Peccato che non funzioni: avr-libc-headers ha bisogno che il compilatore sia già stato compilato. Non mi metto a correggerlo nel modo giusto, mi limito a seguire il consiglio trovato su una mailing list, e (dopo la fallita invocazione di crossdev) faccio:

# USE='-nls -fortran -gtk -openmp -mudflap' emerge -v cross-avr/gcc
# crossdev -t avr

e finalmente ho un cross-compilatore (che speriamo funzioni).

Quindi, seguendo le istruzioni Arduino, faccio:

~/arduino-src/build/linux$ ./make.sh

e mi risponde:

The Java bundle that is included with Processing supports only i686 by default.
To build the code, you will need to install the Java 1.5.0_15 JDK (not a JRE,
and not any other version), and create a symlink to the directory where it is
installed. Create the symlink in the "work" directory, and named it "java":
ln -s /path/to/jdk1.5.0_15 /home/dakkar/arduino-src/build/linux/work/java"

Va bene, lo faccio. Siccome non ho letto bene, faccio il symlink dal JDK icedtea6. Non sembra dare problemi.

Ora compila, ma non esegue: ci sono delle librerie a 32 bit! Chi le ha compilate??

Guardando in Portage (sì, uso Gentoo) vedo che c'è un ebuild per una versione (più vecchia) di Arduino, e dichiara di dipendere proprio dalla libreria che mi dà problemi. Per cui:

emerge -av dev-java/rxtx uisp

e ho la libreria giusta. Ovviamente, il programma Arduino non la usa (non sta nel CLASSPATH predefinito), per cui metto dei symlink al posto della versione inclusa:

rm work/lib/RXTXcomm.jar work/lib/librxtxSerial.so
ln -s /usr/share/rxtx-2/lib/RXTXcomm.jar  work/lib/
ln -s /usr/lib/rxtx-2/librxtxSerial.so work/lib/

Parte!

Avvertenza

Nell'albero Portage ufficiale la versione di RXTX è la 2.1.7.2, che non sembra funzionare a dovere. Serve la 2.2; potete ottenerla dalla mia overlay.

Certo, ancora non c'è il supporto per Sanguino, e la piastra principale della CupCake è un Sanguino.

Le istruzioni Sanguino dicono di copiare un paio di directory, sovrascrivere un po' di file, aggiungere delle linee a un file, e dovrebbe funzionare. Beh, non proprio. Non ha funzionato per me.

Dopo un po' di find, noto che il file boards.txt (quello a cui bisogna aggiungere righe) è stato copiato dalla sua posizione "sorgente" (/home/dakkar/arduino-src/hardware/boards.txt) alla posizione di "lavoro" (/home/dakkar/arduino-src/build/linux/work/hardware/boards.txt). Bene, avrei dovuto leggere tutta la documentazione: dice di ricompilare l'ambiente Arduino ogni volta che si fanno delle modifiche.

A questo punto però mi sono un po' rotto di ri-fare i trucchi di cui sopra, quindi cambio lo script make.sh:

===================================================================
--- make.sh    (revision 756)
+++ make.sh    (working copy)
@@ -34,25 +34,7 @@

   install -m 755 dist/arduino work/arduino

-  ARCH=`uname -m`
-  if [ $ARCH = "i686" ]
-  then
-    echo Extracting JRE...
-    tar --extract --file=jre.tgz --ungzip --directory=work
-  else 
-#    echo This is not my beautiful house.
-#    if [ $ARCH = "x86_64" ]
-#    then 
-#      echo You gots the 64.
-#    fi
-    echo "
-The Java bundle that is included with Processing supports only i686 by default.
-To build the code, you will need to install the Java 1.5.0_15 JDK (not a JRE,
-and not any other version), and create a symlink to the directory where it is
-installed. Create the symlink in the \"work\" directory, and named it \"java\":
-ln -s /path/to/jdk1.5.0_15 `pwd`/work/java"
-    exit
-  fi
+  ln -s "$(java-config -O)" work/java
 fi

 cd ../..
@@ -91,6 +73,11 @@
 rm -rf ../build/linux/work/classes
 mkdir ../build/linux/work/classes

+rm ../build/linux/work/lib/RXTXcomm.jar
+rm ../build/linux/work/lib/librxtxSerial.so
+ln -s /usr/share/rxtx-2/lib/RXTXcomm.jar ../build/linux/work/lib/
+ln -s /usr/lib/rxtx-2/librxtxSerial.so ../build/linux/work/lib/
+
 ../build/linux/work/java/bin/java \
     -cp ../build/linux/work/java/lib/tools.jar \
     com.sun.tools.javac.Main \

Ora:

rm -rf work/
./make.sh
./run.sh

e ho l'ambiente funzionante! Davvero funzionante: ho usato il risultato di queste istruzioni per aggiornare il firmware di entrambe le board della CupCake, e ha funzionato perfettamente.

DateCreato: 2009-09-01 17:27:01 Ultima modifica: 2009-09-07 09:05:09