G2 Core, le moteur de TinyG2 :
Le problème :
Le script DueFromOSX.sh est censé envoyer un binaire à la carte en utilisant l'un des éléments de la chaine de compilation arduino : bossac. Malheureusement, le script utilise l’architecture de répertoires définie dans l'environnement Arduino pour des version inférieures à la 1.5. Or depuis la 1.5 qui supporte des cartes additionnelles, les compilateurs additionnels sont placés dans un répertoire ~/Library/Arduino15/ et non dans /Application/Arduino.app/Contents/Resources/Java/hardware/tools/. Ca marche donc pas terrible.
La solution, version 1 :
Remplacer le script DueFromOsx.sh par le script suivant (en gras les lignes modifées):
#!/bin/bash __arduinoLibDir=~/Library/Arduino15/ #PATH=$PATH:$arduinoAppDir/Arduino.app/Contents/Resources/Java/hardware/tools/g++_arm_none_eabi/bin/:$arduinoAppDir/Arduino.app/Contents/Resources/Java/hardware/tools/ PATH=$PATH:$arduinoLibDir/packages/arduino/tools/arm-none-eabi-gcc/*/bin/:$arduinoLibDir/packages/arduino/tools/__ function show_usage() { cat <<END USAGE: $0 -f TinyG.elf -p <native port> Replacing <native port> with the device name of the Arduino Due native port or TinyG v9 port, respctively. One of the following may be a valid choice: END ls -1 /dev/tty.usbmodem* | xargs echo " " cat <<END You may be able to use /dev/tty.usbmodem* (with the star) if there is only one. END } file="" port="" native_port="true" while getopts h?f:p:P: flag; do case $flag in f) file=$OPTARG ;; p) port=$OPTARG ;; P) port=$OPTARG native_port="false" ;; [h]) show_usage; exit 0 ;; esac done if [[ ${file} == "" ]]; then echo "Error: Please specify a file to program. The name will most likely be 'TinyG.elf'." exit 1; fi if [[ ${port} == "" ]]; then echo "Error: Please specify a port with -p or -P. Currently visible ports:" ls -1 /dev/tty.usbmodem* | xargs echo " " exit 1; fi arm-none-eabi-objcopy -O binary "${file}" "${file/.elf/.bin}" echo "Forcing reset using 1200bps open/close on port ${port}" # perl -e 'open(my $fh, ">", "${port}"); close($fh);' stty -f "${port}" 1200 echo "wait..." # echo "" > "${port}" # perl -e 'open(my $fh, ">", "${port}"); close($fh);' sleep 0.5 # stty -f "${port}" 115200 echo "Starting programming of file ${file} -> ${file/.elf/.bin} on port ${port/\/dev\//}" __#$arduinoAppDir/Arduino.app/Contents/Resources/Java/hardware/tools/bossac -e -w -v -b "${file/.elf/.bin}" $arduinoLibDir/packages/arduino/tools/bossac/*/bossac -e -w -v -b "${file/.elf/.bin}"__ echo echo "WARNING: You may need to hit the RESET button on the device at this point." ##----------- PROGRAMMING port #Forcing reset using 1200bps open/close on port /dev/tty.usbmodem26231 #bossac --port=tty.usbmodem26231 -U false -e -w -v -b $tmp/BareMinimum.cpp.bin -R
La solution, version 2 :
Elle est trouvable dans les propositions de MAJ sur le Github: https://github.com/synthetos/g2/pull/118/files?diff=split Cela repose sur la commande locate afin de trovuer l'utilitaire "bossac", mais je suis moins fan, car il semblerait qu'Arduino n'envisage pas de changer les répertoires de si tôt. Il me semble donc plus logique d'utiliser la dernière arborescence connue et d'aller chercher directement bossac dans ~/Library/Arduino15/packages/arduino/tools/bossac/*/bossac . Mais tout cela n'est qu'une affaire de goût.
Ok, et après?
Et bien après il suffit de compiler avec la commande make, en précisant la config choisie (ici, compilation avec une machine de mon cru c'est à dire une Proxxon KT150, et une shield également de mon cru, la GTwo (cf https://github.com/labsud/GTwo):
make CONFIG=proxxon BOARD=GTwo clean make CONFIG=proxxon BOARD=GTwo ../Resources/TinyG2-OSX-Programmer/DueFromOSX.sh -f bin/proxxon-GTwo/g2core.elf -p /dev/tty.usbmodem*