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.