============================================== 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 `_. 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: http://en.gentoo-wiki.com/wiki/Crossdev .. _`consiglio trovato su una mailing list`: http://www.mail-archive.com/avr-libc-dev@nongnu.org/msg03019.html .. _Arduino: http://arduino.cc/ .. _`istruzioni Arduino`: http://code.google.com/p/arduino/wiki/BuildingArduino .. _Sanguino: http://sanguino.cc/ .. _`istruzioni Sanguino`: http://sanguino.cc/softwareforlinux