Carlo Caponi
giovedì 23 gennaio 2014
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
sabato 12 giugno 2010
Programmazione PIC su Linux
Programmazione PIC su linux
Questa guida descrive i passi da compiere per iniziare a programmare in assembler i PIC (in ambiente gentoo linux, facendo riferimento al Pickit 2 Starter Kit della Microchip, e comprato dal sottoscritto sul sito RS Elettronica.
La confezione contiene due CD, scaricare il contenuto del cd "PICkit Starter kit" sull'hard disk.
Aprire i documenti
Users Guides/Low Pin Count User Guide DS51556a.pdf
eDatasheets/PIC16F685,687,689,690/PIC16F658,687,689,690_41262D.pdf
: in questo modo si potranno seguire i tutorial avendo sottomano anche il datasheet del PIC fornito con la confezione.Istallare i seguenti programmi, necessari per la compilazione ed il trasferimento del codice sul dispositivo. Faccio notare che al momento della stesura di questo articolo gpsim non gestisce il 16F690, quindi si deve fare a meno della simulazione grafica.
Links:
Curuxa : Insieme di link e tutorial per realizzare circuiti con pic, secondo la filosofia "open source".
pk2cmd
Programma che si occupa del trasferimento, esecuzione e verifica del codice sul PIC.
Istallazione:
# emerge pk2cmd
Ottenere la lista dei pic supportati da PICkit 2 :
# pk2cmd -?P
Scaricare su hd un programma residente sul pic:
# pk2cmd -PPIC16Fxx -GF/home/my_user/my_program.hex
Trasferire un .hex
sul pic:
# pk2cmd -PPIC16Fxxx -M -F/home/my_user/my_program.hex
Verificare che il trasferimento del programma my_program.hex
sul pic sia andato a buon fine:
# pk2cmd -PPIC16Fxxx -Y -Fmy_program.hex
Eseguire un programma sul pic (il parametro -A
specifica i volt da applicare al pic, nell'esempio seguente si applicano 4V:
# pk2cmd -PPIC16Fxxx -A4 -T
Interrompere l'esecuzione del programma sul pic:
# pk2cmd -PPIC16Fxxx -R
Links:
Program PICs with a PICkit2 using the command line on Linux : Tutorial sull'utilizzo del programma pk2cmd
gputils
Compilatore asm e disassemblatore.
Istallazione
# emerge gputils
Convertire da .hex
a .asm
:
# gpdasm -p16fxx my_program.hex > my_program.asm
Compilare un programma .asm
:
#gpasm -p16fxx my_program.asm
gpsim
Simulazione grafica del codice residente sul PIC.
Istallazione:
# echo "x11-libs/gtk+extra" >> /etc/portage/package.keywords
# emerge gpsim
Utilizzo:
$ gpsim -p16f690 -s helloWorld.cod
Links:
Intro to Programming PIC Microcontrollers in Linux : Guida introduttiva sull'utilizzo di gpsim.
cdrecord
cdrecord
Chiudere una sessione:
cdrecord dev=/dev/cdrw -fix
Creare un cd dati
Creare un'immagine iso a partire da una dirctory di file:
$ mkisofs -R -J -iso-level 2 -o output_filename.iso input_filename/directory
Scrivere l'iso su cd:
$ cdrecord -eject -v -data -dao driveropts=burnfree dev=/dev/cdrw speed=4 output_filename.iso
Creare il cd di gentoo
$mount /dev/cdrom /mnt/cdrom/
mkisofs -o cd.iso /mnt/cdrom/
cdrecord dev=/dev/cdrw blank=fast speed=16
cdrecord -eject driveropts=burnfree dev=/dev/cdrw speed=24 -v cd.iso
bitlbee
## bitlbee
Istallazione
Eliminare la use-flag relativa a oscar, che riguarda ICQ:
# echo "net-im/bitlbee -oscar -yahoo" >> /etc/portage/package.use
# emerge bitlbee
Configurazione
Lanciare il server bitlbee:
# /etc/init.d/bitlbeed start
Connettersi al server ed entrare nel canale di controllo (con ALT-2):
$ irssi -c localhost
Impostare la password per bitlbee (e ricordare i propri settings):
register ${password}
/quit
$ irssi -c localhost
identify ${password}
account add jabber username@gmail.com mypasswd talk.google.com:5223:ssl
account add msn <msn address> <password>
account list
account on ${id}
/query ${nome}
Per chiudere la finestra di conversazione:
/wc
Eliminare un contatto:
remove ${nomeContatto}
Links
bc
bc
$ bc -li
-l
carica le routine matematiche predefinite-i
forza la modalita' interattiva
Conversione di base
Ci sono molti modi per effettuare la conversione di base. Supponiamo di voler convertire da esadecimale a decimale:
Utilizzando
bc
:echo "obase=A; ibase=16; 7D001" | bc
Utilizzando
printf
, risparmiando qualche carattere per la digitazione ed eliminando la fastidiosa regola dibc
che impone l'utilizzo di lettere maiuscole:printf "%d\n" 0x7d001
Utilizzando il semplicissimo comando bash:
echo $((0x7d001))
rsync
rsync
Introduzione
A mio giudizio una buona strategia di backup consiste nella copia dei file contenuti nelle directory /etc
e /home/${nomeUtente}
, in modo che sia preservata la situazione attuale: chiameremo sorgente l'insieme dei file di cui bisogna fare il backup, chiameremo backup la destinazione della sorgente, destinazione che puo' essere un hard disk o un server di backup. L'idea e' la seguente:
i file che non esistono piu' alla sorgente devono essere cancellati in backup.
i file in backup che devono essere scritti sono quelli nuovi (ossia che sono creati in sorgente in data successiva a quella dell'ultimo backup eseguito) o quelli modificati (ossia che differiscono dai dati presenti in backup per data dell'ultima modifica, lunghezza di byte ecc..).
rsync non copia tutti i byte di tutti i file ogni volta che viene lanciato, ma usa un algoritmo per dererminare solo quello che serve, in modo da risparmiare tempo e banda: in questo modo si puo' fare il mirroring di grandi quantita' di dati e l'esecuzione di backup incrementali che non crescono in maniera indefinita. La prima volta che rsync esegue la copia dei file e' piu' lento del comando cp
, ma nelle copie successive si puo' osservare che vengono trasferite solo le informazioni relative alle differenze in byte dei file confrontati.
Utilizzo
Per realizzare il backup che rispetti i punti precedenti si puo' usare rsync nel modo seguente:
$ rsync -avz --delete ${percorsoSorgente} ${percorsoDestinazione}
-a: abbreviazione di archivio, e' un insieme di parametri, per la precisione -rlptgoD. -r copia ricorsivamente nelle sottodirectory, -l copia anche i link simbolici, -p mantiene sui file di destinazione i permessi presenti sui file di sorgente al momento della copia, -t mantiene la data di ultima modifica, -g preserva l'attributo di gruppo dei file di sorgente, -o preserva il proprietario dei file di sorgente (opzione attiva solo se rsync e' eseguita come root), -D preserva i devices (solo se rsync e' eseguito da root).
-v
: verbose, vengono mostrate a video le operazioni che rsync sta facendo.-z
: zip, comprime i file in trasmissione, in modo da occupare meno banda di trasferimento, buona cosa se si fa un backup attraverso una LAN.--delete
: cancella i file che sono presenti in backup ma che non lo sono piu' in sorgente al momento del lancio di rsync.
Esempi ==
$ rsync -avz --delete /home/${utente} utenteBackup@backupServer:/backup/
Copia la directory ${utente}
(con le sue sottodirectory) sul server backupServer nella directory /backup/ accedendo in modalita' ssh come utente utenteBackup.
# rsync -av --delete /etc /mnt/hd
Copia la directory /etc
(e le sue sottodirectory) sull'hard disk montato su /mnt/hd
.
Strategie di backup
Tutte le fasi seguenti devono essere fatte entro lo stesso giorno, in modo che non vengano aggiunti o editati file durante queste fasi.
Da chiavetta a portatile (update)
I file in destinazione che hanno lo stesso nome e sono diversi, vengono sostituiti con quelli di origine (e gli vengono assegnati i permessi di root). Viene anche creata una copia di backup di detti file.
# rsync -rbv /mnt/usb/utente/${dir} /home/utente
Si arriva dunque ad una situazione in cui i file nuovi si riconoscono perche' hanno i permessi di root, quelli modificati finiscono per ~
(e vanno editati per poi essere cancellati).
# find /home/utente -iname "*~"
# diff /home/utente/${file} /home/utente/${file~}
Una volta risolto il conflitto, si puo' cancellare il file che termina per ~
.
- Da portatile ad hd-portatile (rilascio)
Copia speculare della directory /home/utente
su hd-portatile:
# rsync -av --delete /home/utente /mnt/usb/
# rsync -av --delete /etc /mnt/usb/
# mount /boot
# rsync -av --delete /boot /mnt/usb/
# umount /boot
- Da hd-portatile a pc domestico (update)
Come da chiavetta a portatile:
# rsync -rvtb /mnt/usb/utente/${dir} /home/utente/
Da pc domestico a hd-backup
Come da portatile ad hd-portatile:
# rsync -av --delete /home/utente /mnt/usb/
# rsync -av --delete /etc /mnt/usb/
# mount /boot
# rsync -av --delete /boot /mnt/usb/
# umount /boot
Da pc domestico a hd-portatile (rilascio)
# rsync -rvt --delete /home/utente/${dir} /mnt/usb/utente/
Da hd-portatile a portatile (rilascio)
Come da pc domestico a hd-backup
# rsync -av --delete /mnt/usb/utente/${dir} /home/utente/
- Da portatile a chiavetta (rilascio)
Come da pc domestico a hd-backup, --no-o
--no-g
non preserva gli attributi di gruppo e di owner:
# rsync -av --delete --no-o --no-g utente /mnt/usb/