==============================================
Compilare Arduino / Sanguino su Gentoo amd64
==============================================
:CreationDate: 2009-09-01 17:27:01
:Id: HW/makerbot/arduino-on-gentoo
:tags: - hardware
- software
- 3dPrint
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!
.. warning:: 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 </cgit/gentoo-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.
.. _CupCake: http://wiki.makerbot.com/cupcake
.. _`istruzioni di MakerBot`: http://wiki.makerbot.com/cupcake-motherboard-firmware-update
.. _crossdev: https://wiki.gentoo.com/wiki/Crossdev
.. _`consiglio trovato su una mailing list`: https://www.mail-archive.com/avr-libc-dev@nongnu.org/msg03019.html
.. _Arduino: https://arduino.cc/
.. _`istruzioni Arduino`: https://code.google.com/p/arduino/wiki/BuildingArduino
.. _Sanguino: http://sanguino.cc/
.. _`istruzioni Sanguino`: http://sanguino.cc/softwareforlinux