Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
EOS Book@0 Free - Down PDF
EOS Book@0 Free - Down PDF
Raspberry PI che poi sarà protagonista del secondo tutorial, una guida adatta a tutti,
informatici e “smanettoni” (al secolo makers) per imparare a configurarlo corretta-
mente, ottimizzarlo per la navigazione web, utilizzarlo per creare un Dropbox perso-
nale dove salvare i propri file per renderli accessibili dalla stessa rete Ethernet o Wifi
alla quale è connesso il nostro RasPI o addirittura tramite internet fino ad un altro PC
o dispositivo mobile. Vedremo anche come realizzare un media center completo di
telecomando IR, sfruttando uno dei tanti telecomandi che abbiamo in casa ;)
Infine, vorrei far notare sulla copertina il cambio di simbolo iniziale che precede la
numerazione e che identificherà anche in seguito gli EOS-Book extra riservati agli
abbonati Platinum!
Emanuele Bonanni
3}
Embedded GNU/Linux
partendo da zero
1. Ricompilare il kernel
Introduzione lavorando.
C
reare un sistema GNU/Linux da zero costi- Per agevolare la lettura, l’articolo è strutturato in
Tuttavia, oltre all’aspetto didattico, ci sono an- • integrazione e test su QEMU [2]
che risvolti pratici Tutti i passaggi illustrati di seguito sono stati te-
interessanti: conoscere i componenti e gli stru- stati su un sistema desktop GNU/Linux usando
menti base che servono a costruire un sistema la recente distribuzione Ubuntu 12.04.1.
purpose messe a disposizione dal fornitore del Linux consiste nello scegliere un’architettura
prodotto o della board di sviluppo su cui stiamo target. Dato che l’articolo ha un taglio prevalen-
temente orientato all’embedded e vista la pre-
Embedded G N U/Li nux par t endo da zer o {4
Toolchain di cross-compilazione
La toolchain è un insieme di strumenti (tipica-
mente un compilatore, un linker e delle librerie)
che ci permettono di generare le applicazioni
per il sistema target a partire dai sorgenti. La
GNU toolchain tipica è costituita dal compilatore
GCC, le binutils (strumenti per la manipolazione
dei binari) e le librerie glibc.
Per questa prima fase ci vengono in aiuto le
toolchain pre-compilate (creare un sistema da
zero non implica necessariamente di doverci ri-
compilare anche gli strumenti per creare il siste-
ma stesso).
Embedded G N U/Li nux par t endo da zer o {5
In rete si trovano molte toolchain pre-compilate, Per l’utente o il programmatore di alto livello
nel nostro caso utilizzeremo la Linaro Toolchain Linux è sempre lo stesso, indipendentemen-
Binaries [3], una toolchain ottimizzata per le più te da dove gira la propria applicazione.
recenti famiglie di CPU ARM (Cortex A8, A9, La prima fase della ricompilazione del kernel
etc.). consiste nel processo di configurazione. Esso
Il setup della toolchain è costituito dai seguenti permette di scegliere la particolare architettura
passaggi: che vogliamo utilizzare per il layer di basso li-
• download dei binari della toolchain da internet: vello, assieme a tutti i driver e le funzionalità di
https://launchpad.net/linaro-toolchain-binari- alto livello che vogliamo fornire alle applicazioni
es/trunk/2012.09/+download/... user-space.
• estrazione del pacchetto .tar.bz2:
Come abbiamo detto la piattaforma Versati-
le Express è già supportata
• setup della variabile di ambiente PATH per pienamente dal kernel Linux,
rendere disponibili i binari della toolchain quindi possiamo procedere direttamente alla
dalla shell corrente: configurazione senza dover applicare patch o
modificare codice:
Riferimenti
1. http://en.wikipedia.org/wiki/Board_support_
package
2. http://en.wikipedia.org/wiki/QEMU
3. https://launchpad.net/linaro-toolchain-
binaries/+download
4. http://wiki.qemu.org/Main_Page
5. http://www.arm.com/products/tools/deve-
lopment-boards/versatile-express/i...
Di seguito il link per accedere direttamente all’articolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/embedded-gnulinux-partendo-da-zero-ricompilare-kernel
Embedded G N U/Li nux par t endo da zer o {8
N
ella prima puntata (http://it.emcelettronica. cluso nell’immagine del kernel ad una locazione
com/embedded-gnulinux-partendo-da-ze- prefissata e viene estratto dal kernel stesso in
ro-ricompil...) abbiamo visto come ricompi- RAM durante l’inizializzazione.
lare un kernel Linux per una generica board di Questa soluzione ha il vantaggio di non ri-
sviluppo virtuale ARM-based. Il kernel rappre- chiedere nessun device driver aggiuntivo
senta una sorta di contenitore di applicazioni per flash, dischi o supporti di memoria ester-
che girano in spazio utente. In questa nuova ni di qualsiasi natura, dato che per il kernel
puntata vedremo come preparare i contenuti è sufficiente poter accedere solo alla RAM per
dello spazio utente, ovvero come preparare un montare l’initramfs. Spesso questo approccio
root filesystem minimale.Il kernel rappresen- viene utilizzato in ambito embedded nelle fasi
ta una sorta di contenitore di applicazioni che iniziali di testing delle nuove board per avere
girano in spazio utente. In questa nuova pun- praticamente a tempo zero un sistema GNU/Li-
tata vedremo come preparare i contenuti dello nux funzionante.
spazio utente, ovvero come preparare un root Vediamo un esempio pratico di un initramfs con-
filesystem minimale. tenente un unico file: il classico esempio “hello
world”.
Creare un root filesystem in RAM: Per prima cosa scriviamo un semplice program-
l’initramfs ma C in /tmp/init.c:
Nella puntata precedente ci siamo lasciati con il
seguente errore restituito dal kernel che abbia-
mo compilato:
nario stesso tutte le librerie necessarie, invece più di tempo al boot per ridurre lo spazio oc-
di tentare di caricarle dinamicamente a run-time. cupato può essere vantaggioso, ad esempio se
Come abbiamo detto il nostro initramfs conterrà dovessimo collocare kernel e initramfs in una
un unico file, quindi a run-time non sarà possi- flash di dimensioni ridotte, o scaricarli da una
bile trovare le librerie dinamiche all’interno del connessione di rete lenta, etc.
filesystem. L’initramfs che abbiamo creato noi richiede uno
Quiz #2: come mai il programma C che abbia- spazio di 244KB:
mo scritto contiene un loop che non esce mai?
Risposta #2: In Linux ogni processo viene ge-
nerato come figlio di un altro processo. Quando
un processo padre termina prima del processo
figlio quest’ultimo viene immediatamente adot- E’ giunto il momento di testare se tutto funziona.
tato dal processo di sistema speciale “init” (il Utilizziamo quindi lo stesso comando visto nella
cui PID è 1), che ne diviene il nuovo processo puntata scorsa per avviare la board virtuale, con
padre. Questa operazione viene chiamata re- l’aggiunta dell’opzione “-initrd /tmp/initramfs”
parenting, ed avviene automaticamente a cura per caricare anche l’initramfs:
del kernel. La terminazione del processo “init”
viene vista dal kernel come un errore irreversi-
bile e quando accade il kernel entra nello stato
di panic. Per questo motivo il nostro init non può Il risultato è il seguente:
Booting Linux on physical CPU 0
terminare.
A questo punto possiamo spostarci in /tmp e
creare l’initramfs:
E’ importante notare che il binario contenuto
all’interno dell’initramfs è stato chiamato “init”.
Questo perché il kernel si aspetta di trovare un
file con questo nome; se rinominiamo il file que-
sto non verrà eseguito al termine del processo
di boot.
Notare inoltre che con “gzip -9” abbiamo com-
presso l’initramfs. Il kernel supporta vari formati
di compressione e riesce ad accedervi anche in
questo caso, a costo di spendere un po’ più di
tempo in fase di boot per effettuare la decom-
pressione. Tuttavia, in certi casi, perdere un po’
Embedded G N U/Li nux par t endo da zer o {10
Di seguito il link per accedere direttamente all’articolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/embedded-gnulinux-partendo-da-zero-preparazione-del-root-filesystem
Embedded GN U/Li nux par t endo da zer o {12
3. Integrazione e test
Introduzione ded. Difatti praticamente tutte le note piattafor-
N
elle puntate precedenti (http:// me embedded Linux-based utilizzano BusyBox
it.emcelettronica.com/embedded-gnuli- (evaluation board, ricevitori, dispositivi mobile
nux-partendo-da-zero-ricompil... e http:// come tablet, smartphone, etc. anche Android!).
it.emcelettronica.com/embedded-gnulinux-par- Vediamo di seguito i passi necessari per inte-
tendo-da-zero-preparaz...) abbiamo analizzato grare BusyBox nel nostro sistema.
rispettivamente la ricompilazione del kernel e Per prima cosa possiamo reperire i sorgenti di-
la preparazione di un root filesystem minimale rettamente dal repository git di BusyBox:
usando l’initramfs.
In questa puntata vedremo come completare il $ git clone git://busybox.net/busybox.git
root filesystem dotandolo dei tipici comandi pre- Successivamente dobbiamo specificare la con-
senti in qualsiasi distribuzione GNU/Linux. Infi-
figurazione di ciò che vogliamo compilare e in-
ne vedremo alcuni esempi pratici per testare la
cludere nel nostro ambiente. Analogamente a
funzionalità della micro-distribuzione custom da
quanto abbiamo fatto con il kernel possiamo
noi creata.
lanciare un “make menuconfig” nel modo se-
guente:
I comandi della shell
$ cd busybox
La volta scorsa ci siamo lasciati con un root fi-
lesystem dotato di un unico binario eseguibile: / $ make ARCH=arm CROSS_COMPILE=arm-
init. Questo è sufficiente per permettere al ker- linux-gnueabihf- \
nel di lanciare una nostra applicazione custom OPTIMIZE_FOR_CPU=armv7-a CONFIG_
al termine del boot, ma è abbastanza diverso PREFIX=/tmp/initrd menuconfig
da quello che si aspetta di trovare in un tipico Al solito, con l’opzione CROSS_COMPILE ab-
sistema GNU/Linux. biamo dato indicazione al sistema id build di
Quello che manca è una vera e propria shell BusyBox quale cross-compilatore utilizzare (lo
completa, dotata dei comandi che caratterizza- stesso con cui abbiamo compilato precedente-
no qualsiasi distribuzione GNU/Linux. mente il kernel) e con ARCH=arm e OPTIMIZE_
FOR_CPU abbiamo specificato l’architettura
BusyBox target per i file binari che dovranno essere ge-
BusyBox[1] è conosciuto anche come il “coltel- nerati. Con CONFIG_PREFIX, invece, specifi-
lino svizzero” dell’embedded Linux. Si tratta di chiamo la directory dove vogliamo che BusyBox
un progetto open-source (GPLv2) in grado di vada ad installare tutti i binari.
fornire un intero set di comandi e utility presenti Se non vogliamo scorrere tutti i singoli menù del
nella suite GNU. “make menuconfig” di BusyBox possiamo utiliz-
L’intero progetto è stato scritto con un partico- zare la configurazione riportata come allegato a
lare occhio di riguardo all’ottimizzazione dello questo articolo (busybox-config.txt). Per fare ciò
spazio occupato dai binari, il che lo rendono basta lanciare i comandi seguenti:
particolarmente appetibile nell’ambito embed-
Embedded G N U/Li nux par t endo da zer o {13
telligente per distinguere un comando dall’al- qualsiasi informazione kernel allo user-space.
tro. Ad esempio quando eseguiamo il binario / Successivamente durante lo sviluppo della se-
bin/cat dalla shell, questo di fatto esegue /bin/ rie di kernel 2.5 è stato introdotto il sysfs, come
busybox, ma durante all’interno del codice il metodo più strutturato per separare le informa-
nome del binario risulta /bin/cat. zioni relative ai processi (procfs), rispetto alle
Alla fine possiamo immaginare il “main” di informazioni relative ai device o al sistema in
BusyBox nel modo seguente (con le dovute genere.
semplificazioni del caso): Infine la directory /dev [5] ospita tutti i file spe-
ciali che forniscono l’accesso ai device driver,
int main(int argc, char **argv) utilizzando le stesse interfacce per l’accesso ai
{ classici (open, read, seek, write, close, etc.). Ad
if (!strcmp(argv[0], “/bin/cat”)) { esempio /dev/sda rappresenta il primo di stora-
/* implementazione di cat */ ge rilevato dal sistema, /dev/console il termina-
} else if (!strcmp(argv[0], “/bin/ls”)) { le, etc. Anche in questo caso vale il principio
/* implementazione di ls */ dell’”everything is a file”, effettuando ad esem-
} else ... pio una read() su /dev/sda, il kernel attiva il de-
A questo punto ci mancano solo pochi passi per vice driver che gestisce il dispositivo di storage
completare un tipico root filesystem GNU/Linux: in questione, e ritorna all’applicazione utente
inizializzare /proc, /sys e /dev. un buffer contenente i dati reperiti sullo stora-
Il proc filesystem (o procfs) [3], montato gene- ge. Il mapping tra file e device driver in kernel
ricamente sotto /proc, è uno pseudo-filesystem space viene effettuato utilizzando una coppia
usato dal kernel per esportare le informazioni di numeri detti major e minor number (esistono
sui processi alle applicazioni che girano in spa- delle convenzioni sui nomi dei file che si trova-
zio utente. Tale filesystem si trova solitamente no sotto /dev, ma il nome del file dal punto di
montato nella directory /proc. Questo filesystem vista del kernel è totalmente arbitrario).
non utilizza nessun dispositivo di storage, è solo Per quanto riguarda /proc e /sys è sufficien-
un’astrazione messa a disposizione del kernel te creare i mount-point come directory vuote.
per dare una visione dei processi come file, nel Dopo che il kernel è partito dovremo predispor-
pieno rispetto della filosofia dell’”everything is a re uno script di inizializzazione per montare tali
file” [2]. filesystem nei mount-point predisposti.
Il sysfs, montato genericamente in /sys [4], è
anch’esso uno pseudo-filesystem. Anch’esso $ cd /tmp/initrd
viene utilizzato dal kernel per esportare infor- $ mkdir proc sys
mazioni allo spazio utente, ma che non hanno $ ls -l
niente a che vedere con i processi (es. la di- total 24
mensione di un disco, il numero di cpu, o infor- drwxrwxr-x 2 righiandr righiandr 4096 Dec 14
mazioni di debug. Inizialmente nei vecchi kernel 15:07 bin
(serie 2.4) esisteva solo il procfs, che veniva uti- drwxrwxr-x 2 righiandr righiandr 4096 Dec 14
lizzato come grande contenitore per esportare 17:11 proc
Embedded G N U/Li nux par t endo da zer o {15
Conclusioni
In questa puntata abbiamo visto come popola-
re l’initramfs implementando una vera e propria
micro-distribuzione GNU/Linux, integrando così
quello che avevamo visto nelle puntate prece-
denti e chiudendo la serie teorica “GNU/Linux
partendo da zero”.
Riferimenti
1. http://www.busybox.net/
2. http://en.wikipedia.org/wiki/Everything_
is_a_file
3. http://en.wikipedia.org/wiki/Procfs
4. http://en.wikipedia.org/wiki/Sysfs
5. http://en.wikipedia.org/wiki/Device_file
Di seguito il link per accedere direttamente all’articolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/embedded-gnulinux-partendo-da-zero-integrazione-e-test
Embedded G N U/Li nux par t endo da zer o {18
L
a Raspberry Pi [1] (o più brevemente RPi nella ROM del SoC Broadcom
da ora in poi) è un computer vero e proprio BCM2835. Il primo stage reperisce dalla prima
realizzato su una singola scheda elettronica partizione dell’SD card esterna il boot-loader di
sviluppato dalla Raspberry Pi Fundation, un’or- secondo livello (bootloader.bin), che si occu-
ganizzazione di beneficenza che ha sede nel pa di leggere tutti gli altri file necessari al boot,
Regno Unito. Lo scopo di tale progetto è di pro- compresa l’immagine del kernel (kernel.img),
muovere lo studio dell’informatica, in particolar caricando tutto nell’SDRAM. A questo punto il
modo in ambito accademico. Proprio per questa boot-loader ha terminato il suo compito e passa
ragione tale dispositivo è facilmente accessibi- il controllo al kernel.
le a costi molto contenuti (il prezzo va da $25 NOTA: ricompilare un kernel da zero su una bo-
per la prima versione a $35 per la seconda della
ard come la RPi può essere visto anche come
versione).
un’ottima opportunità per realizzare un labo-
Per maggiori dettagli sulle specifiche della bo-
ratorio di “kernel development”. La board po-
ard si rimanda all’articolo seguente:
trà essere utilizzata in seguito anche per fare
http://it.emcelettronica.com/computer-meno-di-
esperimenti sul kernel Linux senza aver paura
25-dollari-con-arm11-e-hdmi.
di danneggiare o compromettere il dispositivo
In questo nuovo articolo vedremo come ricom-
stesso. Difatti per ripristinare il kernel originale
pilare un kernel e come preparare un root filesy-
basta semplicemente sovrascrivere il file kernel.
stem minimale per la RPi, partendo dai sorgenti
img presente nella partizione di boot della SD
e da una SD card vuota.
card, ad esempio inserendo l’SD card in un PC.
Per una visione più generica sulla procedura di
ricompilazione del kernel si consiglia la lettura
Prerequisiti
degli articoli precedenti della serie “Embedded
• una RaspBerry Pi
GNU/Linux partendo da zero”:
• una SD card (la nostra sarà una distro ultra-
http://it.emcelettronica.com/embedded-gnuli-
minimale quindi va bene di qualsiasi dimen-
nux-partendo-da-zero-ricompil...
sione)
http://it.emcelettronica.com/embedded-gnuli-
• un PC con una distribuzione GNU/Linux
nux-partendo-da-zero-preparaz...
• una connessione a Internet per scaricare i
http://it.emcelettronica.com/embedded-gnuli-
sorgenti e il cross-compilatore
nux-partendo-da-zero-integraz...
$ make ARCH=arm CROSS_COMPILE=arm- Copiamo i file del boot loader e la nostra imma-
Test finale
Per testare la distribuzione è sufficiente inserire
l’SD card nello slot
presente sulla RPi e riavviare la scheda, colle-
gandola ad un monitor o a un televisore HDMI e sione del kernel che sta girando sulla board con
vedere cosa compare a video. il comando “uname -r”.
Come possiamo vedere il kernel risulta essere
proprio la nostra versione: 3.2.27-eos+.
Riferimenti
[1] http://www.raspberrypi.org/
[2] http://it.emcelettronica.com/computer-meno-
di-25-dollari-con-arm11-e-hdmi
[3] http://it.emcelettronica.com/raspberry-pi-tu-
torial-installazione-distro-...
Di seguito il link per accedere direttamente all’articolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/embedded-gnulinux-partendo-da-zero-test-sulla-raspberry-pi
23}
N
ato nel 2006 con l’intento di promuovere lo sono tutt’ora disponibili per l’auto-costruzione
studio dell’informatica, sopratutto a livello della prima versione di RasPI, ma chi di voi pro-
scolastico, e di realizzare un PC a basso verà a costruirlo non si aspetti la stessa fluidità
costo utilizzabile da tutti, inizialmente RasPI era del RasPI attuale: la prima versione, infatti, ave-
basato su un microcontrollore Atmel, e le sue di- va una frequenza di clock di 22.1MHz e 512 KB
mensioni erano molto diverse da quelle attuali. di SDRAM, contro gli attuali 700Mhz del proces-
sore ARM11 e i 512MB di SDRAM in dotazione
al Modello B.
Successivamente è stato rimodernato nel 2009
con la prima versione dotata di processore ARM
e di dimensioni notevolmente ridotte rispetto
alla versione del 2006. A questo punto RasPI
assomigliava ad una chiavetta USB e per la pri-
R a s p b e r r y P I Tu t o r i a l {24
lasciando solo lo spazio libero. Dopo di che se- Oltre a RasPI abbiamo bisogno di:
gniamoci con quale nome il sistema chiama la - Mouse e tastiera;
Memory inserita (es. mmcblk0). - Un alimentatore con connettore micro USB (un
carica batterie per cellulari va benis-
simo, controllate eventualmente che
sia presente nell’elenco compatibili-
tà);
- Un monitor con ingresso HDMI o un
Ora siamo pronti a procedere: apriamo il termi- adattatore HDMI/DVI per i monitor più vecchiot-
nale e iniziamo a compilare il comando dd. ti;
Un esempio può essere: - Il cavo per la connessione ad internet via
dd if=/home/utente/Scrivania/Raspbian.img of=/ ethernet.
dev/mmcblk0 Pronti? Alimentiamolo!
Qualora fossero necessari i permessi da ammi- Appena viene alimentato, RasPI inizia subito a
nistratore basterà aggiungere un “sudo” funzionare visualizzando sul monitor la fase di
sudo dd if=/home/utente/Scrivania/Raspbian. boot ed avvio. Ad avvio terminato, ci trovere-
img of=/dev/mmcblk0 mo di fronte ad una schermata che ci mette a
disposizione le prime configurazioni
pre-avvio.
sualizzazione su schermo presenti delle bande RasPI e avere quindi una maggior velocità del
nere laterali, abilitate l’overscan. sistema. Tuttavia, nonostante tutte le schede
Configure_keyboard: qua possiamo imposta- RasPI supportino l’incremento di frequenza im-
re il layout della tastiera per avere una piena posto da Raspbian senza perdere stabilità, ne
compatibilità con i simboli che altrimenti risulte- viene sconsigliato l’uso per non accorciare la
rebbero in posizioni diverse. Scegliamo quindi vita alla schedina.
Configure_keyboard e attendiamo che RasPI Ssh: abilita/disabilita il controllo di RasPI via
raccolga le dovute informazioni. Ci troveremo ssh. Già abilitato di default, permette di prende-
ora di fronte ad una lista di modelli preimposta- re i comandi di RasPI utilizzando un semplice
ti di tastiere. Se non siamo a conoscenza del programma per l’accesso via ssh da ethernet
modello esatto, o se non è presente nella lista, come Putty su windows, o il comando “ssh no-
scegliamo il valore di default e procediamo con meutente@ip_RasPI” su mac e linux.
la configurazione. Dobbiamo ora inserire il tipo Boot_behaviour: abilitando tale opzione, al
di layout basandoci sulla lingua utilizzata: pro- prossimo riavvio RasPI ci presenterà il suo De-
cediamo quindi scegliendo Italiano e confermia- sktop. Se non abilitato, al termine del prossimo
mo. Infine ci viene chiesta la funzione di alcuni avvio RasPI si avvierà in modalità testuale met-
tasti come AtlGr, se non conosciamo la funzione tendoci a disposizione la sola riga di comando
possiamo lasciare tutto di default e terminiamo e non l’ambiente Desktop, ricordiamoci quindi
la configurazione. di abilitarla.
Change_pass: con Change_pass cambiamo Update: con Update aggiorniamo i pacchetti
la password d’accesso a RasPI di default “ra- presenti in RasPI, compresi alcuni componenti
spberry” per l’utente “pi”. della lingua utilizzata per il sistema. Consiglio
Change_locale: permette di impostare una quindi di selezionare tale opzione prima proce-
lingua da utilizzare per il sistema. Tuttavia la dere al primo avvio vero e proprio, ricordando
lingua base rimane l’inglese in quanto molti che ciò richiede l’accesso ad internet.
dei pacchetti di Raspian utilizzano solo l’ingle- Configurato ciò che ci serviva? Allora clicchia-
se nell’interfaccia grafica. Si può quindi evitare mo Finish e aspettiamo che RasPI ci presenti il
questo passaggio. suo Desktop!
Change_timezone: imposta il fuso orario, la Se avete scelto di espandere la partizione prin-
data e l’ora. Ricordo però che RasPI non include cipale all’intera Memory, il primo avvio può du-
nel suo hardware un RTC(Realm Time Clock) e rare anche più di 5 minuti proprio perché RasPI
non è quindi in grado di ricordare l’ora e la data sta modificando la partizione principale. Potete
se viene rimossa l’alimentazione. La data e l’ora rendervi conto del fatto che sta “lavorando” dal
vengono comunque sincronizzate ogni qual vol- led ACT acceso di colore giallo.
ta vi sia una connessione ad internet.
Memory_split: modifica il quantitativo di me- L’ambiente desktop
moria disponibile alla GPU, di default 64. Terminato l’avvio, se ci siamo ricordati di abilita-
Overclock: l’overclock permette di aumentare re la visualizzazione del desktop, ci troveremo
la frequenza di clock del processore AMR di davanti all’ambiente desktop basato su LXDE
R a s p b e r r y P I Tu t o r i a l {28
pante, ed utilizzare l’editor di testo preinstallato. lazione di una nuova stampante e l’eventuale
La configurazione di una nuova stampante ri- condivisione in rete. Terminata l’installazione,
chiede l’utilizzo di una connessione ad internet dovremo comunicare a CUPS che noi abbiamo i
per scaricare i driver necessari, inoltre sarà poi permessi per poter accedere alla gestione delle
possibile condividere la stampante installata in stampanti, quindi da riga di comandi digitiamo:
rete, in modo tale da poter rendere disponibile sudo usermod -a -G lpadmin pi
la stampante anche ad altri eventuali PC com- Se durante la fase di configurazione di RasPI
presi nella rete Ethernet. abbiamo cambiato il nome dell’utente principa-
Ma prima di stampare qualcosa, dobbiamo scri- le, dovremo sostituire il “pi” presente nel coman-
verlo... do con il nome del nuovo utente.
Per creare un nuovo file di testo possiamo clic- Confermiamo, e siamo pronti per accedere alla
care sul menù di start, andare su Other/Altro e schermata di configurazione della stampante.
cliccare su LeafPad, si aprirà così un file di testo Apriamo il browser internet, e andiamo all’indi-
bianco pronto per accettare tutto ciò che voglia- rizzo http://127.0.0.1:631 e ci troveremo nella
mo scrivere. pagina principale di CUPS.
Scegliamo la stampante corretta, nel mio caso E ora siamo pronti per stampare il nostro file di
testo precedentemente scritto
la Epson WP-4515 e confermiamo.
Nella pagina successiva possiamo dare un
nome alla stampante, ed eventualmente condi-
viderla in rete prima di procedere alla selezione
del modello corretto. Ci verrà proposta una lista
di modelli di stampanti, e noi dovremo scegliere
quello giusto affinché CUPS carichi i driver adat-
ti. Se il modello non è presente, potete provare
con un modello simile purché sia della stessa
marca, oppure scaricare dal sito del produttore
il file PPD contenente i driver della stampante
da voi utilizzata e fornirli a CUPS nell’apposita
casella.
Con un ultimo click su conferma, potremo im-
postare il tipo di carta utilizzato di default e ter-
minare l’installazione della stampante, magari
stampando anche un testo di prova per verifica-
re che tutto sia andato a buon fine.
Di seguito il link per accedere direttamente all’articolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/raspberry-pi-tutorial-installazione-distro-configurazione-e-stampa
R a s p b e r r y P I Tu t o r i a l {31
N
ella distribuzione che abbiamo installa- collegato uno schermo con una bassa risoluzio-
to la volta scorsa, Raspbian, troviamo ne, o nel caso in cui si utilizzi l’adattatore HDMI-
preinstallati: Midori, Dillo e Netsurf. Questi tre Se avete seguito la guida precedente per la
browser sono molto leggeri e permettono una configurazione della stampante tramite CUPS,
navigazione abbastanza fluida, tuttavia vi sono vi potrà esser capitato una non corretta impagi-
In conclusione
Se siete interessati al mondo RasPI ma non
avete ancora fatto il passo dell’acquisto perchè
limitati dalla mancanza di un monitor per poterlo
usare, ora sapete che il monitor può essere vi-
sto come un “accessorio opzionale” ed è quindi
possibile prendere il totale controllo di RasPi
da remoto via linea di comando o con tutto l’am-
biente desktop. Più avanti vedremo come rea-
lizzare un piccolo server simile a DropBox con
RasPi e potremo sfruttare il controllo remoto per
lasciare RasPi in una posizione a noi comoda
anche priva di monitor durante tutto il tempo in
cui lavorerà come server per ospitare i nostri
dati.
Di seguito il link per accedere direttamente all’articolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/raspberry-pi-tutorial-navigazione-internet-controllo-remoto
S
icuramente ormai tutti conoscerete DropBox, sono sempre alla portata di un utente qualsiasi
il servizio che gratuitamente permette di che magari deve andare in vacanza e vuole fare
avere 2GB di spazio internet nel quale po- un backup di tutte le foto che scatta su un server
ter caricare file e foto per poterle poi condivide- sicuro. Allora facciamoci aiutare da RasPI!
re su più dispositivi. Come DropBox, esistono
molti altri siti, ma tutti mettono a disposizione Protocollo SFTP
L’ultima volta abbiamo visto l’SSH, un protocol-
un limitato numero di GB che può però aumen-
lo di rete che permette di stabilire una connes-
tare (fino ad un massimo di 16GB per DB) nel
sione remota tramite due dispositivi nella stessa
caso in cui si invitino altre persone, si aggiuga-
rete per l’invio di comandi da terminale, l’SFTP
no dispositivi, si carichino foto e via dicendo.
( SSH File Transfer Protocol) invece è un proto-
I problemi con questi siti però, si riducono sem-
collo di rete che ci permette di inviare o spostare
pre agli stessi: i nostri file si trovano sul server
file tra un Host ed un Client in maniera sicura e
di qualcun altro e nel momento in cui lo spazio cifrata. L’SFTP utilizza come base il protocollo
messo gratuitamente a disposizione non ci do- SSH, che come abbiamo già visto è supportato
vesse più bastare, i costi per aumentarlo non nativamente da RasPI, il che semplifica molto la
R a s p b e r r y P I Tu t o r i a l {37
A questo punto sarà necessario un riavvio, connessi a RasPI, vedremo i file presenti sulla
dopo il quale per connetterci via SSH non sarà Memory. In alto, troviamo quattro TextBox, nella
più possibile, qualora la connessione avvenisse prima inseriremo il tipo di protocollo e l’indirizzo
da Linux o Mac, utilizzare il semplice comando: IP di RasPI, nel secondo il nome utente dell’u-
ssh NomeUtente@IndirizzoIP tente appena creato, in seguito la password,
ma dovremo usare: ed infine la porta da noi precedentemente se-
ssh -p NumeroPorta NomeUtente@IndirizzoIP lezionata. Con un click su Connessione Rapi-
un esempio: da potremo accedere a tutti i file contenuti nella
ssh -p 51000 pi@192.168.1.4 Memory. In alternativa possiamo inserire nella
Se utilizziamo Windows invece, dovremo sem- prima TextBox il comando così composto:
plicemente impostare il numero della porta in sftp://NomeUtente:Password@IP_RasPI:Porta
Putty o nel programma utilizzato. Usando i dati di default ed un IP e porta a caso:
sftp://pi:raspberry@192.168.1.5:50265
Connessione dalla rete locale
Ora che RasPI è pronto per lo scambio di file
con i dati da noi impostati, possiamo già pro-
varlo utilizzando un PC o Smartphone collegato
alla stessa rete. Per farlo, ci faremo aiutare da
Filezilla, un programma gratuito che permette di
collegarci ad un dispositivo Host con i più dif-
fusi protocolli di invio e ricezione file. Una volta
scaricata la versione Client dal sito ufficiale e
dopo averlo installato, ci troveremo di fronte alla
seguente interfaccia grafica: Via web?
Ora viene “il bello”, ovviamente non è possibile
stabilire una connessione con RasPI dall’ester-
no della nostra rete LAN o WiFi, infatti se per
puro sfizio provate avviare Filezilla su un PC
connesso ad una diversa connessione internet,
e ad inserire l’indirizzo l’IP della connessione in-
ternet alla quale è connesso RasPI che potete
trovare cercando “my ip” su google con Midori,
Filezilla vi comunicherà che non è stato possibi-
le stabilire una connessione. Perchè? Semplice,
il vostro Modem blocca ogni accesso dal Web
Come possiamo notare, il programma è suddi- alla vostra rete privata, e guai se non lo facesse!
viso in due parti, “sito locale” e “sito remoto”. Per poter accedere dal web, magari da un altro
In Sito Locale troviamo il nostro computer con PC connesso ad internet, dobbiamo ora aprire
tutti i suoi file mentre in Sito Remoto, una volta la porta che abbiamo precedentemente inserito
R a s p b e r r y P I Tu t o r i a l {39
nel file di configurazione SSH, nel nostro mo- potete trovare l’apertura delle porte sotto la voce
dem di casa. In commercio vi sono centinaia di “Port Forwarding” “Port Mapping” o “Virtual Ser-
modem, uno diverso dall’altro, pare evidente ver” o in alternativa con una semplice ricerca in
quindi che sarebbe impossibile indicare passo- internet inserendo il modello del vostro modem
passo i procedimenti per aprire le porte deside- troverete la guida su come aprire le porte per
rate su ogni modello, tuttavia il percorso è molto certi “programmini”. A questo punto, apriamo la
simile per tutti i modem. Innanzitutto dobbiamo porta che abbiamo impostato su RasPI e natu-
conoscere l’indirizzo IP del nostro modem: ralmente indichiamo il suo indirizzo IP, mentre
alla richiesta del protocollo indicheremo TCP,
Windows salviamo, e chiudiamo il browser internet.
Indifferentemente dal tipo di Windows utilizzato,
andiamo su Start>Programmi>Accessori>Prom
pt dei comandi E nel terminale appena aperto
inseriamo il comando “ipconfig”. Alla voce Ga-
teway predefinito troveremo l’indirizzo IP del
modem.
Il nostro RasPI-DropBox è ora pronto! Possia- ci spostiamo nella cartella appena decompres-
mo aprire, salvare, e spostare file da RasPI al sa
PC in uso attraverso Internet o via Ethernet. cd noip-2.1.9-1
installiamo il DUC
No-IP! sudo make
Rimane un problema, e se il modem si riavvia sudo make install
e l’indirizzo IP cambia? Come faccio a comu- avviamolo, ed eseguiamo la prima configurazio-
nicare con RasPI se non conosco più il suo ne
IP? Semplice, No-IP! No-ip è un servizio gra- sudo /usr/local/bin/noip2
tuito con il quale possiamo avere un indirizzo Ci verranno ora chiesti i dati con cui ci siamo
internet simile a mariorossi.no-ip.org il quale ci registrati sul sito noip.com, iniziando con la mail
reindirizzerà verso l’IP della nostra connessione e la password, successivamente dovremo in-
Internet alla quale è connesso RasPI, non solo, serire ogni quanti minuti sincronizzare l’IP con
nel momento in cui il modem venisse riavviato, il dominio e ci viene consigliato un intervallo di
un software che installeremo su RasPI comu- 30 minuti. Non inserite un tempo tropo ristret-
nicherà automaticamente il nuovo IP in modo to come possono essere 5 o 10 minuti, 20-30
tale che collegandoci all’indirizzo fornito, potre- minuti sono più che accettabili e non obbliga-
mo sempre connetterci con RasPI! Ma andiamo no RasPI a continue comunicazioni con noip.
per gradi, innanzitutto dobbiamo registrarci su Infine, indicheremo il dominio precedentemen-
www.noip.com indicando, durante la registra- te creato, ed ecco il nostro RasPI-Box pronto
zione, il nome del nostro futuro “dominio” nella ad essere raggiunto inserendo al posto dell’IP
sezione Hostname. L’Hostname che indichere- in Filezilla, l’indirizzo che abbiamo precedente-
mo, sarà quello a cui dovremo connetterci con mente creato.
Filezilla per comunicare con RasPI, sarà quin-
di opportuno salvarlo da qualche parte insieme
alla mail e la password utilizzata per la registra-
zione. A registrazione effettuata, dobbiamo in-
stallare l’applicazione DUC (Dynamic Update
Client) su RasPI, quindi da terminale daremo i
seguenti comandi:
Creiamo una nuova cartella e la chiamiamo noip
mkdir /home/pi/noip
ci spostiamo all’interno della cartella
cd /home/pi/noip
scarichiamo il file d’installazione del DUC wget
http://www.no-ip.com/client/linux/noip-duc-li- Non ci rimane che far si che il DUC si avvii ogni
nux.tar.gz qual volta viene acceso RasPI! Sempre da ter-
decomprimiamo il file appena scaricato minale quindi, creeremo uno script per avviare
tar vzxf noip-duc-linux.tar.gz il DUC ad ogni accensione:
R a s p b e r r y P I Tu t o r i a l {41
Di seguito il link per accedere direttamente all’articolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/raspberrypi-tutorial-realizziamo-nostro-dropbox-con-raspi
R a s p b e r r y P I Tu t o r i a l {42
A
ndiamo per gradi, prima di addentrarci nella - Un telecomando IR, possibilmente non già uti-
ricezione dei comandi impartiti da un tele- lizzato da un altro dispositivo per evitare conflitti
comando IR, dobbiamo necessariamente - Un sensore IR siglato TSOPxxxx
prendere confidenza con la distribuzione che - Semplici cavetti per collegare il sensore ai pin
andremo ad utilizzare: Raspbmc. di I/O di Rpi
Raspbmc è una distribuzione basata su Debian Come avrete notato, il punto forte è sicuramen-
come anche Raspbian, la quale porta sulla no- te l’esiguo numero di componenti necessari,
stra piccola schedina il più diffuso programma oltre al fatto che un TSOPxxx non costa più
per MediaCenter: XBMC. Insieme a XBMC, ar- di 1,5€ ed è reperibile in quasi tutti i negozi di
riva la quasi totale compatibilità con gli Add-on componentistica elettronica. Il telecomando IR
per esso messi a disposizione, possiamo quindi che andremo ad utilizzare non deve avere par-
vedere direttamente sul televisore in streaming ticolari caratteristiche, ma per una più facile in-
tutte le puntate dei più famosi programmi televi- terazione tra noi e Raspbmc l’ideale sarebbe un
sivi, film, e molto altro. telecomando con le quattro frecce direzionali ed
Procediamo quindi con l’installazione di Ra- il tasto OK centrale, per poterci muovere age-
spbmc! Sul sito ufficiale troviamo tre Download, volmente nel menù.
il primo si riferisce ad un programma con una Per quanto riguarda il sensore TSOP invece,
semplice interfaccia grafica il quale ci guiderà c’è da fare una piccola precisazione prima di
nell’installazione di Raspbmc in un supporto procedere all’acquisto. Vi sono svariati sensori
esterno da noi scelto, il secondo ed il terzo fan- con tale sigla, i quali differiscono in tensione di
no rifermento al classico file .img da scaricare e
alimentazione, frequenze captate e tipo di se-
scrivere successivamente su Memory Card con
gnale in uscita.
lo stesso procedimento con cui, negli articoli
Come già saprete, su Rpi sono presenti dei pin
precedenti, abbiamo installato Raspbian. I due
file .img messi a disposizione differiscono nel di I/O per il collegamento di sensori, pulsanti,
fatto che il primo è un file molto leggero il quale, relè e per far interagire RPI con il “mondo ester-
dopo averlo scritto su Memory ed avviato in Rpi, no”. Tali pin, se utilizzati come ingressi per la
scaricherà tutto il necessario dalla rete Internet. ricezione di un segnale, accettano come tensio-
Il secondo invece contiene l’intera distribuzione ne massima in ingresso 3.3V, dovremo quindi
Raspbian la quale richiede solo di esser scritta scegliere un sensore IR in grado di ricevere
su Memory e poi avviata.
fedelmente i comandi impartiti dal telecoman-
Dopo aver preso un po’ di confidenza con que-
do con una tensione inferiore ai classici 5V dei
sta distribuzione, possiamo passare alla “lista
segnali TTL.
della spesa”. Per permettere a Rpi di ricevere i
R a s p b e r r y P I Tu t o r i a l {43
Tra questi, vi è il TSOP34138 il quale presen- Per aiutarvi nell’individuazione dei pin, potete
ta proprio le caratteristiche e l’affidabilità da noi utilizzare l’immagine qui riportata.
ricercate, potrete utilizzare anche modelli diffe-
renti, ma non sempre la ricezione del comando
avverrà in modo corretto ne verrà garantita una
buona distanza tra il ricevitore ed il telecoman-
do. Le prove iniziali le ho realizzate con un sen-
sore IR recuperato da un vecchio registratore, Controllate più volte che il collegamento avven-
ed infatti dopo il metro e mezzo mi era impos- ga nei giusti pin, un errore potrebbe portare alla
sibile impartire i comandi dal telecomando e ho rottura del vostro Rpi, come ad esempio alimen-
quindi dovuto acquistare un sensore più adatto tare il sensore dai 5V e non dai 3.3V. A collega-
allo scopo. mento effettuato, possiamo passare a conosce-
di utilizzeremo il comando modprobe per cari- venienti dal telecomando, LIRC dovrà innanzi-
carlo: tutto decifrarli, per poi permetterci di mappare il
sudo modprobe lirc_rpi telecomando. Procediamo con i comandi:
successivamente chiuderemo i processi che sudo kill $(pidof lircd)
tengono impegnato LIRC: sudo irrecord -d /dev/lirc0 ~/lircd.conf
sudo kill $(pidof lircd) ed inizierà quindi la fase di apprendimento.
ed ora siamo pronti per verificare che Rpi sia in Come ci viene anche riportato sul terminale,
grado di ricevere i segnali provenienti dal tele- dobbiamo premere uno ad uno i vari tasti del
comando. Dopo aver dato il comando: telecomando, premendo ogni singolo tasto per
mode2 -d /dev/lirc0 circa un secondo. Alla pressione del tasto, ap-
Rpi rimarrà in attesa della pressione di un ta- pariranno uno o più punti sul terminale, verran-
sto sul telecomando. Se il sensore IR è corret- no così composte due linee da 80 punti al ter-
tamente collegato a Rpi, alla pressione di un mine delle quali sarà possibile indicare l’esatto
qualsiasi tasto vedremo apparire una serie di comando da dare ad ogni singolo tasto.
dati simili a:
pulse 576 Mappatura dei tasti
space 548 Terminata la procedura di apprendimento, ci
pulse 602 verrà ora chiesto di mappare i tasti che voglia-
space 1663 mo utilizzare con XBMC. Se vogliamo avere un
pulse 549 interazione base, ci bastano le sole frecette ed
space 549 il tasto OK. Dovremo ora inserire testualmente il
comando da assegnare al tasto premuto, dall’e-
lenco che potete trovare allegato all’articolo tro-
vate una lista di tutti i comandi assegnabili, qui
riporto i soli comandi base:
KEY_UP
KEY_DOWN
KEY_LEFT
KEY_RIGHT
KEY_ENTER
Se non appare nulla, controllate che il sensore L’inserimento è case sensitive, quindi dovrete
IR sia connesso sui giusti pin, ripetete la serie di rispettare il maiuscolo. Può succedere che du-
comandi sopra indicati, o provate ad allontanar- rante la scrittura nel terminale, la tastiera non
vi o avvicinarvi al sensore. Se vi trovate troppo corrisponda per quanto riguarda i segni, per in-
vicini non sarà in grado di ricevere correttamen- serire l’underscore o “trattino basso” quindi, do-
te i comandi, posizionatevi quindi alla distanza vrete premere la combinazione Shift + ?. Per
di circa un metro. comodità, potete anche eseguire tutta la confi-
Decodifica dei segnali gurazione di LIRC via SSH, quindi da un qualsi-
Ora che Rpi è in grado di ricevere i segnali pro- asi PC connesso alla stessa rete di RPi potrete
R a s p b e r r y P I Tu t o r i a l {45
Di seguito il link per accedere direttamente all’articolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/raspberrypi-controlliamo-media-center-con-comune-telecomando-ir