giovedì 23 gennaio 2014

Nature Boy / Pinguino Innamorato medley



Una mia interpretazione di due brani celebri del passato.

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

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 e Datasheets/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

  1. Creare un'immagine iso a partire da una dirctory di file:

    $ mkisofs -R -J -iso-level 2 -o output_filename.iso input_filename/directory 
    
    
  2. 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

bitlbee

Introduzione a bitlbee

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 di bc 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/