lunedì 14 maggio 2012

Arduino

La seguente guida e' stata realizzata con il preziosissimo aiuto dell'utente zizo, che e' riuscito a trovare il modo di applicare le patch in modo da far funzionare tutto correttamente.

Kernel settings

Controllare le seguenti impostazioni:

Device Drivers  --->
    [*] USB support  --->
        <*>   USB Modem (CDC ACM) support
        <*>   USB Serial Converter support  --->
            <*>   USB FTDI Single Port Serial Driver

Attaccare la scheda arduino al pc, controllando che lo veda come device ttyUSB0:

# dmesg | tail
[  154.160066] usb 2-2: new full-speed USB device number 3 using uhci_hcd
[  154.348869] ftdi_sio 2-2:1.0: FTDI USB Serial Device converter detected
[  154.348900] usb 2-2: Detected FT232RL
[  154.348903] usb 2-2: Number of endpoints 2
[  154.348907] usb 2-2: Endpoint 1 MaxPacketSize 64
[  154.348910] usb 2-2: Endpoint 2 MaxPacketSize 64
[  154.348912] usb 2-2: Setting MaxPacketSize 64
[  154.350879] usb 2-2: FTDI USB Serial Device converter now attached to ttyUSB0

Controllare che l'utente veda il device:

$ ls /dev/ttyUSB*
/dev/ttyUSB0

Istallazione software

Aggiungere l'utente ai gruppi tty e uucp:

# gpasswd -a ${username} tty
# gpasswd -a ${username} uucp

Allo stato attuale (2012-05-14) e' necessario applicare delle patch al software che istalleremo. Senza tali patch si ottiene qualcosa che compila con successo ma che non funziona a dovere sulla scheda arduino.

Il codice seguente permette a portage di applicare le patch incluse nella cartella /etc/portage/patches. Torna molto utile per applicare delle modifiche al pacchetto finale senza dover ogni volta modificare il relativo ebuild:

# cat >> /etc/portage/bashrc <<EOF
post_src_prepare() {
  if type epatch_user &> /dev/null && type epatch &> /dev/null
  then
    epatch_user
  else
    . ${ROOT}etc/portage/env/eclass/epatch
    epatch_user

    unset epatch
    unset epatch_user
  fi
}
EOF

Copiare i file seguenti nelle rispettive directory:

epatch in /etc/portage/env/eclass/

fix_ethernet.patch in /etc/portage/patches/dev-embedded/arduino/

gcc-005-constructor.patch in /etc/portage/patches/cross-avr/gcc/

avr-multilib.patch in /etc/portage/patches/sys-devel/crossdev/

Queste patch fanno riferimento alle seguenti versioni dei pacchetti:

dev-embedded/arduino-1.0
cross-avr/gcc-4.5.3-r2
sys-devel/crossdev-20120305

Smascherare i pacchetti interessati:

# echo "dev-java/rxtx" >> /etc/portage/package.keywords/dev-java
# echo "dev-embedded/avrdude" >> /etc/portage/package.keywords/dev-embedded
# echo "dev-embedded/uisp" >> /etc/portage/package.keywords/dev-embedded
# echo "dev-embedded/arduino" >> /etc/portage/package.keywords/dev-embedded
# echo "sys-devel/crossdev" >> /etc/portage/package.keywords/sys-devel

Istallare crossdev. Se era precedentemente istallato occorre reistallarlo (in modo che venga applicata la patch) e cancellare eventuali residui della toolchain precedente:

# emerge crossdev
# crossdev -C avr

Creare la toolchain:

# crossdev -v -t avr -s4 --without-headers --b 2.20.1-r1 --l 1.7.1

Versioni differenti di libc e binutils non sono attualmente compatibili con arduino e il suo ide arduino-1.0*. Riemergere arduino e a processo concluso:

# ln -s /usr/*-pc-linux-gnu/avr/lib/ldscripts /usr/avr/lib/ldscripts
# cd /usr/avr/lib
# ln -s avr5/crtm328p.o .
# ln -s avr6/crtm2561.o .
# ln -s avr6/crtm2560.o .

Gli ultimi tre link sono necessari per il funzionamento di arduino uno e mega 2560, in caso di chip differenti creare collegamenti anche per questi.

Bene, ora, per non utilizzare quella schifezza java, occorre un makefile. Uno che funziona perfettamente su gentoo e' questo.

Per usare il serial monitor, ecco che arriva in aiuto screen:

$ screen /dev/ttyUSB0 115200

Links

Edam

Crossdev

Makefile tutorial