Sei sulla pagina 1di 44

{2

Il primo EOS-Book monotematico!

E con viva e vibrante soddisfazione che sono a presentarvi il primo


EOS-Book monotematico, anzi, quasi bitematico! Infatti allinterno contiene 2 tuto-
rial partendo da zero, il primo su Embedded GNU/Linux, adatto a programmatori che
vogliono addentrarsi nellaffascinante mondo di Linux professionale, imparando a
compilare il Kernel, preparare il root filesystem fino ad arrivare a realizzare una distro
minimale ma funzionante per il RasPI.

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!

EOS-Book @0 mettetevelo nello stack!

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, larticolo strutturato in

tuisce un buon esercizio per comprendere pi parti distinte:

alcuni aspetti chiave del suo funzionamen- preparazione del kernel

to interno. preparazione del root filesystem

Tuttavia, oltre allaspetto 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.

GNU/Linux ci permette spesso, specie in ambito


embedded, di generare ambienti pi compat- Requisiti
ti ed efficienti rispetto alle soluzioni general- Il primo requsito per creare un sistema GNU/

purpose messe a disposizione dal fornitore del Linux consiste nello scegliere unarchitettura

prodotto o della board di sviluppo su cui stiamo target. Dato che larticolo ha un taglio prevalen-
temente orientato allembedded e vista la pre-
Embedded G N U/Li nux par t endo da zer o {4

donimanza delle architetture ARM in tale setto-


re, opteremo per unarchitettura ARM.
Una volta scelta larchitettura target abbiamo bi-
sogno di due componenti fondamentali:
1. una piattaforma di prova su cui testare il no-
stro sistema
2. una toolchain che ci permetta di cross-com-
pilare i binari che vanno a costituire lintero
sistema operativo
Nel nostro caso prenderemo in esame la Versa-
tile Express (vexpress-a9) [5], visto che quella
Board (virtuale) di sviluppo
supportata perfettamente dal kernel mainline
Il mercato mette a disposizione una vasta gam-
(la versione del kernel ufficiale, reperibile da
ma di board di sviluppo ARM-based, anche a
http://www.kernel.org), sia da QEMU, senza do-
basso costo. Tuttavia chi si vuole cimentare
ver applicare patch aggiuntive. Inoltre, la Versa-
nella creazione di un sistema GNU/Linux su
tile Express monta un core Cortex-A9, una CPU
ARM pu farlo completamente a costo zero,
ARM-based utilizzata su gran parte dei tablet,
emulando virtualmente la piattaforma di svi-
smartphone e netbook di recente produzione.
luppo.
Emulare la piattaforma di sviluppo piuttosto
Come software di emulazione ci baseremo su
semplice, basta lanciare il comando:
QEMU [4], che di fatto costituisce lemulatore
$ qemu-system-arm -M vexpress-a9 -kernel flash.img
di architettura per eccellenza nel mondo Linux.
Dove flash.img un file contenente limmagine
QEMU permette di emulare diverse piattafor-
del nostro kernel/firmware che vogliamo far gi-
me ARM-based, ad esempio nella versione di
rare.
QEMU installata su Ubuntu 12.04 abbiamo a di-
Nei passi seguenti vedremo come generare tale
sposizione le seguenti piattaforme:
immagine.

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 lutente 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:

Fase 1: preparazione del kernel


A questo punto abbiamo tutti gli strumenti ne- Le variabili di ambiente ARCH e CROSS_COM-
cessari per iniziare a sviluppare sulla board vir- PILE sono informazioni per il compilatore; esse
tuale. permettono di selezionare la particolare archi-
Il primo passo consiste nel reperire i sorgenti tettura (ARCH) e la particolare versione com-
mainline del kernel da http://www.kernel.org e pilatore (CROSS_COMPILE) per generare il
ricompilarli per la nostra archiettura target. codice oggetto.
Al momento della stesura di questo articolo lul- Lopzione vexpress_defconfig viene usata dal
timo kernel del ramo stable il 3.5.4, proce- kernel nel processo di build: essa permette di
diamo quindi al download e allestrazione dei selezionare la configurazione di default (defcon-
sorgenti: fig) stabilita dalla comunit di sviluppatori che
mantengono il codice per tale architettu-
ra. Le varie configurazioni *_defconfig per
ARM si trovano tutte in arch/arm/configs/*.
Il kernel Linux supporta unampia gamma di Infine resta da effettuare il passo di compilazio-
architetture e piattaforme eterogenee: fonda- ne vero e proprio:
mentalmente esso composto da un layer di
basso livello
(./arch/*) che si interfaccia direttamente con il La ricompilazione di un intero kernel richiede
particolare hardware ed esporta ai livelli pi alti dai 5 ai 10 minuti. Al termine, se tutto andato
interfacce generiche indipendenti dallhardware correttamente, troveremo il seguente file nelle
sottostante. directory dei sorgenti del kernel:
Embedded G N U/Li nux par t endo da zer o {6

Il file zImage rappresenta limmagine della flash


per la nostra board virtuale. In questo caso il
singolo kernel richiede 2.4MB. Al momento per
non abbiamo ancora nessuna applicazione, i
2.4MB rappresentano solo il contenitore dove
far girare le applicazioni utente.

Testare il kernel sulla board virtuale


E possibile testare il kernel appena generato
sull board virtuale QEMU lanciando il comando
seguente:

QEMU emula un ambiente identico ad una bo-


ard Versatile Express fisica, quindi per il kernel
non fa nessuna differenza, di fatto come ese-
guirlo sullhardware reale. Con le opzioni `-serial
stdio -display none` stiamo dicendo a QEMU di
collegare la seriale emulata direttamente alla
console da cui lanciamo il comando. Con `-ap-
pend console=ttyAMA0` stiamo invece dicendo
al kernel di ridirigere tutti i suoi messagi verso
la seriale primaria. In pratica per noi sar come
avere aperto una sessione seriale sulla board.
Ecco il risultato pratico una volta eseguito il co-
mando sopra:
Embedded G N U/Li nux par t endo da zer o {7

In output possiamo vedere i messaggi di un tipi-


co boot di Linux. Il kernel partito correttamen-
te, rilevando tutti i dispositivi hardware emulati
dalla board virtuale, come se questa fosse effet-
tivamente una board fisica.
Al termine della fase di boot otteniamo tuttavia
un kernel panic (cio un
errore irreversibile che compromette il funziona-
mento del sistema). Il motivo di tale errore lo
possiamo trovare nei messaggi immediatamen-
te precedenti al panic:
In pratica per il kernel non esiste nessun root
filesystem. Come abbiamo detto il kernel solo
un contenitore in cui girano le applicazioni, una
volta terminato il processo di boot il kernel cerca
di montare un filesystem radice (root) da uno
dei dispositivi a blocchi rilevati ed eseguire un
binario denominato init. Se questo binario non
viene trovato il kernel non sa cosa fare e entra
nella condizione di panic.

Nella prossima puntata vedremo come creare


un root filesystem adatto al kernel, continuando
a seguire stessa filosofia di questo tutorial: ge-
nerando tutto completamente da zero.

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 allarticolo 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

2. Preparazione del root filesystem


Introduzione Tale archivio, chiamato initramfs [2], viene in-

N
ella prima puntata (http://it.emcelettronica. cluso nellimmagine 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 linizializzazione.
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 linitramfs. 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-
linitramfs ma C in /tmp/init.c:
Nella puntata precedente ci siamo lasciati con il
seguente errore restituito dal kernel che abbia-
mo compilato:

Il kernel partito correttamente, ma non ri- E lo cross-compiliamo con lo stesso cross-com-


uscito a trovare un root filesystem da montare pilatore che abbiamo usato nella puntata scorsa
per avviare il processo init e passare il controllo per compilare il kernel:
allo user-space.
La soluzione pi semplice per creare un root fi-
lesystem di usare parte della RAM come se
fosse un filesystem vero e proprio. Il kernel per- Quiz #1: come mai abbiamo usato lopzione
mette di includere al suo interno un archivio in -static?
formato cpio [1] (in pratica una sorta di tar o Risposta #1: Con lopzione -static richiediamo
zip). al compilatore di includere direttamente nel bi-
Embedded GN U/Li nux par t endo da zer o {9

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 allinterno del connessione di rete lenta, etc.
filesystem. Linitramfs 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 questultimo 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- laggiunta dellopzione -initrd /tmp/initramfs
parenting, ed avviene automaticamente a cura per caricare anche linitramfs:
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 linitramfs:
E importante notare che il binario contenuto
allinterno dellinitramfs 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 linitramfs. 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

Molto bene! Il kernel ha avviato il nostro loop


hello world al termine del processo di boot.
Notare che a questo punto abbiamo un ker-
nel Linux completo a nostra disposizione.
Potremmo quindi modificare il semplice hel-
lo world (/tmp/init.c) per implementare anche
qualcosa di pi complesso, come ad esempio
un piccolo echo server TCP/IP multi-task.
Il programma seguente crea un processo ser-
ver che accetta connessioni TCP/IP sulla por-
ta 8080; per ogni connessione ricevuta viene
creato un nuovo processo figlio che legge un
messaggio dal client e lo rimanda indietro tale e
quale (tutto tramite TCP/IP):
Embedded GN U/Li nux par t endo da zer o {11

Lopzione -redir tcp:8080:10.0.2.15:8080 per-


mette di creare una conessione di rete virtuale
dal sistema GNU/Linux host alla board virtuale
tramite la porta 8080, mentre con ip=10.0.2.15
diciamo al kernel di assegnare lindirizzo IP
10.0.2.15 alla prima interfaccia di rete rilevata.
Una volta partita la board virtuale, il nostro ker-
nel e la nostra applicazione user-space possia-
mo testare lecho server lanciando il comando
seguente sul sistema host:

Perfetto! La nostra applicazione ha risposto alla


richiesta di echo dalla board virtuale. Sul termi-
nale di questultima compare il messaggio se-
guente:

Gli sviluppi futuri di questa applicazione sono


lasciati alla fantasia e alla creativit del lettore.
Nella prossima puntata vedremo come creare
Se sostituiamo lesempio hello world con questo
un initramfs completo, dotato dei tipici comandi
codice e ripetiamo i passi di generazione dellini-
presenti in qualsiasi distribuzione GNU/Linux.
tramfs possiamo vedere in funzione lecho server
TCP/IP creato completamente da zero. Riferimenti
Per prima cosa lanciamo la board virtuale con le 1. http://en.wikipedia.org/wiki/Cpio
seguenti opzioni: 2. http://lxr.linux.no/linux+v3.6.3/Documenta-
tion/early-userspace/README

Di seguito il link per accedere direttamente allarticolo 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 linitramfs.
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 lopzione 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 larchitettura
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 dellembedded 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-
Lintero progetto stato scritto con un partico- zare la configurazione riportata come allegato a
lare occhio di riguardo allottimizzazione dello questo articolo (busybox-config.txt). Per fare ci
spazio occupato dai binari, il che lo rendono basta lanciare i comandi seguenti:
particolarmente appetibile nellambito embed-
Embedded G N U/Li nux par t endo da zer o {13

$ wget http://it.emcelettronica.com/files/ lrwxrwxrwx 1 righiandr righiandr 7 Dec 14 15:07


busybox-config_0.txt ash -> busybox
$ cp busybox-config.txt busybox/.config lrwxrwxrwx 1 righiandr righiandr 7 Dec 14 15:07
Una volta messa a punto la configurazione si base64 -> busybox
pu compilare la suite di strumenti: -rwxr-xr-x 1 righiandr righiandr 1314624 Dec 14
15:07 busybox
$ make ARCH=arm CROSS_COMPILE=arm- lrwxrwxrwx 1 righiandr righiandr 7 Dec 14 15:07
linux-gnueabihf- \ cat -> busybox
OPTIMIZE_FOR_CPU=armv7-a CONFIG_ lrwxrwxrwx 1 righiandr righiandr 7 Dec 14 15:07
PREFIX=/tmp/initrd install catv -> busybox
E infine installarla nella directory di destinazio- lrwxrwxrwx 1 righiandr righiandr 7 Dec 14 15:07
ne: chattr -> busybox
lrwxrwxrwx 1 righiandr righiandr 7 Dec 14 15:07
$ make ARCH=arm CROSS_COMPILE=arm- chgrp -> busybox
linux-gnueabihf- \ ...
OPTIMIZE_FOR_CPU=armv7-a CONFIG_ Quiz #1: come mai BusyBox genera un solo bi-
PREFIX=/tmp/initrd install nario e sopratutto a cosa servono i link simbo-
Dopo linstallazione la directory di destinazione lici?
assume la tipica struttura che troviamo nella ra- Risposta #1: Come abbiamo visto nella puntata
dice di un qualsiasi sistema UNIX-based: precedente, nel filesystem che generiamo com-
pletamente da zero non abbiamo a disposizione
# ls -l /tmp/initrd le librerie dinamiche (glibc, etc.); le alternative
total 12 quindi sono di cross-compilare e installare an-
drwxrwxr-x 2 righiandr righiandr 4096 Dec 14 che tutte le librerie dinamiche richieste, oppure
15:07 bin di compilare staticamente i binari (cio include-
drwxrwxr-x 2 righiandr righiandr 4096 Dec 14 re direttamente nel binario il codice delle librerie
15:07 sbin richieste).
drwxrwxr-x 4 righiandr righiandr 4096 Dec 14 Nel nostro caso abbiamo compilato BusyBox
15:01 usr staticamente, ma se per ciascun binario inclu-
In pratica con linstallazione di BusyBox abbia- dessimo al suo interno il codice delle librerie ri-
mo generato la struttura base del nostro tipico chieste, avremo una duplicazione e ridondanza
filesystem UNIX-based. del codice non necessaria.
Allinterno della sotto-directory bin lunico bi- BusyBox risolve questo problema implementan-
nario busybox; tutti gli altri comandi sono di- do il codice di ciascun comando allinterno dello
sponibili nel filesystem come link simbolici alle- stesso binario (invece di avere una separazione
seguibile busybox: a livello di file, possiamo vedere un comando
della shell di BusyBox come una funzione allin-
# ls -l /tmp/initrd/bin/ terno dello stesso binario).
total 1284 I link simbolici costituiscono una soluzione in-
Embedded G N U/Li nux par t endo da zer o {14

telligente per distinguere un comando dallal- 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 allinterno 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 laccesso ai device driver,
int main(int argc, char **argv) utilizzando le stesse interfacce per laccesso 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 */ delleverything 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 allapplicazione 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-
unastrazione 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 delleverything is a re uno script di inizializzazione per montare tali
file [2]. filesystem nei mount-point predisposti.
Il sysfs, montato genericamente in /sys [4],
anchesso uno pseudo-filesystem. Anchesso $ 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

drwxrwxr-x 2 righiandr righiandr 4096 Dec 14 lo stesso meccanismo di BusyBox: creiamo un


15:07 sbin link simbolico a /sbin/init, allinterno dellimmagi-
drwxrwxr-x 2 righiandr righiandr 4096 Dec 14 ne del nostro initramfs:
17:11 sys
drwxrwxr-x 4 righiandr righiandr 4096 Dec 14 $ cd /tmp/initrd
15:01 usr $ ln -s sbin/init init
Per /dev, invece necessario fare un passo $ ls -l
aggiuntivo, che consiste nellinizializzare i file $ ls -l
di dispositivo base che il kernel e lambiente total 24
BusyBox si aspettano di trovare. drwxrwxr-x 2 righiandr righiandr 4096 Dec 15
Per questo possiamo usare il comando mknod: 00:29 bin
drwxrwxr-x 2 righiandr righiandr 4096 Dec 15
$ cd /tmp/initrd 00:29 dev
$ mkdir dev lrwxrwxrwx 1 righiandr righiandr 9 Dec 15 01:25
$ cd dev init -> sbin/init
$ sudo mknod tty1 c 4 1 drwxrwxr-x 2 righiandr righiandr 4096 Dec 15
$ sudo mknod tty2 c 4 2 00:29 proc
$ sudo mknod tty3 c 4 3 drwxrwxr-x 2 righiandr righiandr 4096 Dec 15
$ sudo mknod tty4 c 4 4 00:29 sbin
$ sudo mknod tty5 c 4 5 drwxrwxr-x 2 righiandr righiandr 4096 Dec 15
$ sudo mknod tty6 c 4 6 00:29 sys
$ sudo mknod console c 5 1 drwxrwxr-x 4 righiandr righiandr 4096 Dec 15
$ sudo mknod null c 1 3 00:29 usr
$ sudo mknod zero c 1 5 A questo punto abbiamo completato limmagine
I primi sei dispositivi (tty1 ... tty6) rappresentano di un filesystem GNU/Linux minimale: la stessa
i terminali virtuali (quelli a cui possiamo acce- base di quello che troviamo in qualsiasi distribu-
dere su un tipico sistema GNU/Linux premen- zione GNU/Linux.
do la combinazione ALT+F1 ... ALT+F6); il file / Il passo finale quindi di creare linitramfs (sem-
dev/console il terminale principale. Infine /dev/ pre come abbiamo visto nella puntata prece-
null e /dev/zero sono device virtuali: il primo, se dente) e far partire finalmente la nostra micro-
viene letto ritorna sempre un buffer vuoto, se ci distribuzione:
scriviamo sopra i dati vengono ignorati; infine /
dev/zero se letto ritorna un buffer pieno di zeri # cd /tmp/initrd/
(esattamente una quantit pari alla dimensione # find . | cpio -o --format=newc > ../initramfs
del buffer specificato per la lettura). 2667 blocks
Lultimo passo, come visto nella puntata prece- # du -sh ../initramfs
dente, di creare nellinitramfs un binario chia- 1.4M ../initramfs
mato /init, che il kernel provveder ad eseguire Come possiamo notare la nostra distribuzione
al termine della fase di boot. Per questo usiamo occupa solo 1.4MB. Decisamente minimale.
Embedded G N U/Li nux par t endo da zer o {16

Adesso possiamo far partire la board virtuale su


QEMU: / # mount -t proc none /proc
/ # ps
$ qemu-system-arm -M vexpress-a9 -kernel ./ PID USER TIME COMMAND
arch/arm/boot/zImage -serial stdio -display 1 0 0:01 init
none -append console=ttyAMA0 -initrd /tmp/ 2 0 0:00 [kthreadd]
initramfs 3 0 0:00 [ksoftirqd/0]
Booting Linux on physical CPU 0 5 0 0:00 [kworker/u:0]
Initializing cgroup subsys cpuset 6 0 0:00 [migration/0]
Linux version 3.5.4 (righiandr@thinkpad) (gcc 7 0 0:00 [cpuset]
version 4.7.2 20120910 (prerelease) (crosstool- 8 0 0:00 [khelper]
NG linaro-1.13.1-2012.09-20120921 - Linaro 9 0 0:00 [kworker/u:1]
GCC 2012.09) ) #1 SMP Fri Dec 14 14:15:35 158 0 0:00 [sync_supers]
CET 2012 160 0 0:00 [bdi-default]
CPU: ARMv7 Processor [410fc090] revision 0 162 0 0:00 [kblockd]
(ARMv7), cr=10c53c7d 168 0 0:00 [ata_sff]
... 178 0 0:00 [khubd]
Freeing init memory: 172K 273 0 0:00 [rpciod]
cant run /etc/init.d/rcS: No such file or directory 274 0 0:00 [kworker/0:1]
Please press Enter to activate this console. 280 0 0:00 [khungtaskd]
/ # ls -l 285 0 0:00 [kswapd0]
total 0 330 0 0:00 [fsnotify_mark]
drwxrwxr-x 2 1000 1000 0 Dec 14 23:29 bin 339 0 0:00 [nfsiod]
drwxrwxr-x 2 1000 1000 0 Dec 15 00:28 dev 410 0 0:00 [kpsmoused]
lrwxrwxrwx 1 1000 1000 9 Dec 15 00:25 init -> 413 0 0:00 [kworker/0:2]
sbin/init 463 0 0:00 [deferwq]
drwxrwxr-x 2 1000 1000 0 Dec 14 23:29 proc 468 0 0:00 -/bin/sh
drwx------ 2 0 0 0 Dec 14 13:11 root 469 0 0:00 init
drwxrwxr-x 2 1000 1000 0 Dec 14 23:29 sbin 471 0 0:00 init
drwxrwxr-x 2 1000 1000 0 Dec 14 23:29 sys 472 0 0:00 init
drwxrwxr-x 4 1000 1000 0 Dec 14 23:29 usr 481 0 0:00 ps
Oppure visualizzare il tipo di architettura da /
E al termine del boot otteniamo finalmente proc/cpuinfo:
una vera shell sulla nostra board virtuale!
A questo punto possiamo gestire la board come / # cat /proc/cpuinfo
gestiremo un generico sistema GNU/Linux. Processor : ARMv7 Processor rev 0 (v7l)
Possiamo usare il comando ls per listare i file processor :0
del root filesystem (come visto sopra). O mon- BogoMIPS : 129.43
tare il procfs e visualizzare la lista dei processi: Features : swp half thumb fastmult vfp edsp
Embedded GN U/Li nux par t endo da zer o {17

neon vfpv3 tls


CPU implementer : 0x41
CPU architecture: 7
CPU variant : 0x0
CPU part : 0xc09
CPU revision : 0
Hardware : ARM-Versatile Express
Revision : 0000
Serial : 0000000000000000

Conclusioni
In questa puntata abbiamo visto come popola-
re linitramfs 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.

Nella prossima puntata analizzeremo pi in


dettaglio laspetto pratico, ripetendo tutti i
passi teorici visti nelle puntate precedenti
su una board reale: la Raspberry Pi.

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 allarticolo 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

4. Test sulla Raspberry Pi


Introduzione boot-loader (bootcode.bin), che memorizzato

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 dellSD card esterna il boot-loader di
sviluppato dalla Raspberry Pi Fundation, unor- 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 limmagine del kernel (kernel.img),
muovere lo studio dellinformatica, in particolar caricando tutto nellSDRAM. 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).
unottima opportunit per realizzare un labo-
Per maggiori dettagli sulle specifiche della bo-
ratorio di kernel development. La board po-
ard si rimanda allarticolo 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 lSD 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...

Preparare lambiente di sviluppo


Procedura di avvio sulla RPi
Per prima cosa necessario reperire il cross
La procedura di avvio della RPi utilizza un pro-
compilatore e tutti i sorgenti richiesti a creare
cesso di boot a pi stage.
da zero la nostra distribuzione per la RPi. Per
Quando la RPi viene accesa la GPU inizia ad
quanto riguarda il boot-loader si pu trovare una
eseguire il primo stage del
versione precompilata nel repository git ufficia-
Embedded G N U/Li nux par t endo da zer o {19

le della RPi (github.com/raspberrypi). questultimo. Luso di altri cross-compilatori


Per preparare lambiente di sviluppo della no- lasciato come esercizio per il lettore.
stra micro-distribuzione per la RPi sufficiente
lanciare i comandi seguenti: Inizializzare lSD card
Dopo aver reperito tutti i sorgenti e gli strumenti
$ mkdir raspberry per lo sviluppo possiamo formattare lSD card
$ cd raspberry utilizzando un layout compatibile al boot della
$ git clone git://github.com/raspberrypi/firmwa- RPi.
re.git Possiamo quindi inserire lSD card nel PC e (da
$ git clone git://github.com/raspberrypi/tools.git Linux) partizionarla usando il comando seguen-
$ git clone git://github.com/raspberrypi/linux.git te:
$ git clone git://busybox.net/busybox.git
Il primo repository git contiene i file binari del $ sudo sfdisk /dev/mmcblk0 << EOF
boot loader, che andremo a copiare direttamen- unit: sectors
te sullSD card. Gli altri repository contengono /dev/mmcblk0p1 : start= 16, size= 97648, Id= c,
rispettivamente i cross-compilatori (e utility va- bootable
rie per la gestione dei binari), e infine i sorgenti /dev/mmcblk0p2 : start= 97664, size= 97648,
del kernel Linux e BusyBox per la parte user- Id=83
space, che andremo a ricompilare. /dev/mmcblk0p3 : start= 0, size= 0, Id= 0
NOTA #1: teoricamente potremo partire dai sor- /dev/mmcblk0p4 : start= 0, size= 0, Id= 0
genti ufficiali di Linux EOF
(denominati vanilla), disponibili su http://www. ATTENZIONE! Questo comando causa la
kernel.org tuttavia i kernel vanilla non hanno al perdita di tutti i contenuti che erano presen-
loro interno i driver e i moduli per gestire il SoC ti sullSD card, quindi verificate di utilizzare
Broadcom BCM2835 presente sulla RPi. Per una SD card vuota o contenente informazio-
questo motivo usare un kernel vanilla generico ni che volete cancellare.
presupporrebbe una lunga e complessa fase Con questo comando abbiamo creato una parti-
di porting di tutte le patch specifiche della RPi zione primaria FAT (/dev/mmcblk0p1) che verr
sulleventuale kernel scelto come base di par- usata per il boot (cio dove copieremo i file del
tenza. In questo caso ci affidiamo direttamente boot-loader e limmagine del kernel che cross-
al kernel gi patchato e messo adisposizione su compileremo nei passi successivi) e una parti-
GitHub alla comunit di utilizzatori. zione per il root filesystem (/dev/mmcblk0p2),
NOTA #2: possibile utilizzare lo stesso cross- dove copieremo i binari user-space (BusyBox).
compilatore visto nelle NOTA: le dimensioni delle due partizioni sono
puntate Embedded GNU/Linux partendo da entrambe di 50MB. Il resto dellSD card va ov-
zero, in fin dei conti siamo sempre su architet- viamente sprecato; tuttavia in questo caso tale
ture ARM. In questo caso, per, visto che nei spazio risulta addirittura sovradimensionato per
repository di sorgenti della RPi troviamo gi un ospitare la nostra micro-distribuzione, ma in
cross-compilatore pronto alluso, optiamo per questo modo siamo sicuri di rientrarci con le di-
Embedded G N U/Li nux par t endo da zer o {20

mensioni e di poter supportare SD card di qual- configurazione con i comandi seguenti:


siasi taglio. $ cd linux
Una volta partizionata lSD card con uno sche- $ make ARCH=arm CROSS_COMPILE=arm-
ma compatibile per il boot-loader andremo a bcm2708-linux-gnueabi- bcmrpi_defconfig
creare i filesystem su entrambe le partizioni: Per rendere la cosa un po pi interessante
possiamo cambiare la versione del kernel,
$ sudo mkfs.vfat /dev/mmcblk0p1 appendendo alla fine della stringa originale
$ sudo mkfs.ext4 /dev/mmcblk0p2 una stringa personalizzata: es. -eos. Que-
La partizione primaria deve essere necessaria- sta stringa comparir nella nostra distribu-
mente VFAT. Per la secondaria zione personalizzata, ogni volta che verr
(root filesystem) possiamo scegliere un qualsia- stampata la versione del kernel.
si filesystem supportato da Per fare ci possiamo lanciare:
Linux. In questo caso abbiamo scelto ext4.
$ make ARCH=arm CROSS_COMPILE=arm-
Ricompilare il kernel bcm2708-linux-gnueabi- menuconfig
E` infine giunto il momento di cross-compilare il E dallinterfaccia andare a modificare il parame-
kernel. Percorreremo tro:
velocemente questi passi, perch sono esatta-
mente gli stessi visti nei General setup ---> Local version - append to
precedenti articoli di questa serie. kernel release
Le uniche differenze consistono in: Aggiungendo la stringa -eos (o quella che pi
1) aggiungere al PATH della shell il cross-com- ci piace).
pilatore giusto (lanciare il A questo punto giunto il momento di lanciare il
comando dalla directory raspberry dove ab- passo di compilazione
biamo scaricato i repository git): effettiva del kernel:
export PATH=$PWD/tools/arm-bcm2708/arm-
bcm2708-linux-gnueabi/bin:$PATH $ make ARCH=arm CROSS_COMPILE=arm-
bcm2708-linux-gnueabi-
2) selezionare il branch rpi-3.2.27 (il ramo del Per generare un file immagine del kernel com-
kernel stabile che si trova nel repository git del patibile con il boot-loader della RPi dobbiamo
kernel della RPi) anche pacchettizzarlo in modo opportuno.
$ git checkout rpi-3.2.27 Questo passaggio non sempre richiesto; in
questo caso pu essere effettuato lanciando lo
3) configurare il kernel per abilitare i settaggi di script imagetool-uncompressed.py (che si trova
default per la RPi nel repository tools insieme al cross-compila-
(la configurazione di default per questa board tore):
chiamata bcmrpi_defconfig).
Spostiamoci quindi nella directory dei sorgenti $ cd ../tools/mkimage
del kernel e lanciamo la $ ./imagetool-uncompressed.py ../../linux/arch/
Embedded G N U/Li nux par t endo da zer o {21

arm/boot/zImage otfs i file speciali sotto /dev:


$ cd -
Infine installiamo i moduli esterni nella directory $ mkdir /tmp/rootfs/dev
temporanea /tmp/rootfs $ cd /tmp/rootfs/dev
(copieremo tutto nellSD card successivamente, $ cat << EOF | sudo sh
insieme ai binari dello mknod tty1 c 4 1
user-space): mknod tty2 c 4 2
mknod tty3 c 4 3
$ make ARCH=arm CROSS_COMPILE=arm- mknod tty4 c 4 4
bcm2708-linux-gnueabi- \ mknod tty5 c 4 5
INSTALL_MOD_PATH=/tmp/rootfs/ modules_ mknod tty6 c 4 6
install mknod console c 5 1
mknod null c 1 3
Installazione di BusyBox mknod zero c 1 5
Anche per installare BusyBox i passi sono gli EOF
stessi visti nellarticolo $ cd -
http://it.emcelettronica.com/embedded-gnuli-
nux-partendo-da-zero-integraz... (si pu anche Trasferire i binari sullSD card
utilizzare lo stesso file di configurazione, dispo- Il passaggio finale consiste nel copiare tutto sul-
nibile come allegato dellarticolo stesso). lSD card e vedere se il
Spostiamoci nella directory di BusyBox e lancia- sistema parte veramente.
mo il passo di configurazione (prendendo il file Montiamo quindi le due partizioni dellSD card
di configurazione dallarticolo precedente): (boot e rootfs):

$ cd ../busybox $ mkdir -p /tmp/sdcard/boot


$ wget http://it.emcelettronica.com/files/ $ mkdir -p /tmp/sdcard/rootfs
busybox-config_0.txt $ sudo mount /dev/mmcblk0p1 /tmp/sdcard/
$ cp busybox-config.txt busybox/.config
boot
Infine lanciamo la cross-compilazione di
$ sudo mount /dev/mmcblk0p2 /tmp/sdcard/ro-
BusyBox:
otfs

$ make ARCH=arm CROSS_COMPILE=arm- Copiamo i file del boot loader e la nostra imma-

bcm2708-linux-gnueabi- \ gine del kernel nella partizione di boot:


CONFIG_PREFIX=/tmp/rootfs install
Se tutto andato per il verso giusto troveremo $ cd ..
i binari del nostro user-space minimale in /tmp/ $ sudo cp firmware/boot/* /tmp/sdcard/boot/
rootfs, insieme ai moduli esterni del kernel in- $ sudo cp tools/mkimage/kernel.img /tmp/
stallati al passo precedente.
sdcard/boot
Lultimo passaggio consiste nel creare nel ro-
E infine trasferiamo anche il root filesystem
Embedded G N U/Li nux par t endo da zer o {22

nellaltra partizione ext4 Se colleghiamo una tastiera possiamo interagi-


dellSD card: re con lambiente della shell e lanciare comandi
come su una qualsiasi distribuzione GNU/Linux.
$ sudo rsync -avHS /tmp/rootfs/ /tmp/sdcard/ Ad esempio possiamo stampare a video la ver-
rootfs/
NOTA: per questultima copia utilizziamo il co-
mando rsync che permette di preservare sia i
link simbolici creati durante linstallazione di
BusyBox, sia i file speciali creati nella /dev del
nostro root filesystem.
Perfetto! Possiamo smontare i filesystem del-
lSD card e ammirare la nostra
micro-distribuzione allopera:

$ sudo umount /tmp/sdcard/boot


$ sudo umount /tmp/sdcard/rootfs

Test finale
Per testare la distribuzione sufficiente inserire
lSD 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 allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/embedded-gnulinux-partendo-da-zero-test-sulla-raspberry-pi
23}

Rasp berr yPI


t u t o ri al

1. Installazione distro, configura-


zione e stampa
Un p di storia... Gli schemi ed il layout del circuito stampato

N
sono tuttora disponibili per lauto-costruzione
ato nel 2006 con lintento di promuovere lo
della prima versione di RasPI, ma chi di voi pro-
studio dellinformatica, sopratutto a livello
ver a costruirlo non si aspetti la stessa fluidit
scolastico, e di realizzare un PC a basso
del RasPI attuale: la prima versione, infatti, ave-
costo utilizzabile da tutti, inizialmente RasPI era
va una frequenza di clock di 22.1MHz e 512 KB
basato su un microcontrollore Atmel, e le sue di- di SDRAM, contro gli attuali 700Mhz del proces-
mensioni erano molto diverse da quelle attuali. 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-
ma volta dotato di un uscita HDMI. Ma solo nel
2011 stata presentata la versione che noi ora
R a s p b e r r y P I Tu t o r i a l {24

particolare, infatti scaricando la distribuzione


dal sito ufficiale ed estraendo il file .zip salvato
sul computer, ci troviamo di fronte ad un file con
estensione .img il quale andr in seguito scrit-
to su Memory seguendo il giusto procedimento
relativo al sistema operativo utilizzato. Qualora
qualcuno provasse a fare un semplice copia ed
incolla del file .img su Memory, sappia che in
Dopo aver verificato che lunit scelta esat-
questo caso RasPI non sar in grado di esegui-
tamente la Memory Card che intendiamo utiliz-
re il Boot restando quindi inutilizzabile.
zare, con un click su Write inizier il proces-
Prima di procedere alla scrittura del sistema
so di scrittura. A scrittura terminata possiamo
operativo scelto c da fare una piccola preci-
rimuovere la Memory ed inserirla su RasPI per
sazione sulla scelta della Memory Card: il file
il primo avvio.
.img contenente Raspbian grande allincirca
1,9 GB e viene quindi consigliata una Memo-
ry di 2GB o superiore. Scegliendo una Memory
Card da 2GB per, vi renderete presto conto
che lo spazio a disposizione per file e program-
mi irrisorio. Se non lavete ancora acquistata
quindi, vi consiglio di riflettere su ci che avete
intenzione di realizzare con RasPI e scegliere la
Linux e Mac
giusta SD di conseguenza. Per avere la sicurez-
Se utilizziamo Linux o Mac, non abbiamo biso-
za di una piena compatibilit e stabilit vi consi-
gno di appoggiarci a nessun tipo di programma
glio inoltre di verificare, prima dellacquisto, che
esterno ma procediamo utilizzando il terminale
la Memory in questione sia presente nellelenco
ed un comando in grado di copiare e scrivere i
compatibilit.
file immagine: il comando dd.
Vediamo ora come scrivere Raspbian su Me-
Tale comando viene seguito da due parametri
mory Card con i tre principali sistemi operativi.
if ed of: con if si indica il percorso in cui
risiede il file .img di Raspbian, con of si indica
Windows
invece lunit od il punto di mount della Memory
Per scrivere Raspbian su Memory Card, dob-
Card.
biamo utilizzare Win32DiskImager. Tale pro-
Prima di procedere alla scrittura per, dobbia-
gramma in grado di operare con i file .img
mo assicurarci che nella Memory non vi siano
contenenti file system non supportati da Win-
partizioni, questo per evitare problemi durante
dows, come lEXT4. Win32DiskImager ha un in-
la scrittura con il comando DD ed avere succes-
terfaccia grafica molto semplice ed immediata,
sivamente problemi di avvio con RasPI. Apria-
infatti ci che ci viene immediatamente chiesto
mo quindi il Gestore Dischi su Linux o lUtility
linserimento del percorso del file e, succes-
sivamente lunit rimovibile sul quale scriverlo. Disco su Mac e rimuoviamo tutte le partizioni
R a s p b e r r y P I Tu t o r i a l {25

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 nellelenco 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.

Non verr segnalato in alcun modo lo stato


davanzamento e il cursore rimarr a lampeg-
giare nella riga sottostante alla richiesta della
password , ma non preoccupatevi perch tutto
procede per il verso giusto. Qualora il percorso
non sia stato digitato correttamente, il percorso
della Memory sia sbagliato, o il nome del file er-
rato, ci verr segnalato e la scrittura non verr Info: qualche semplice informazione riguardan-
eseguita. te il tool di configurazione.
A scrittura terminata, apparir nuovamente la Expand_rootfs: abilitando questa funzione, al
riga di comando e potremo rimuovere la Memo- prossimo riavvio RasPI espander la partizione
ry e inserirla su RasPI. principale allintera Memory Card, in modo tale
da avere a disposizione per i dati lintero spazio
Il primo avvio! rimasto libero.
Ora che la Memory stata caricata con Ra- Overscan: tale funzione abilita o disabilita la
spbian, siamo pronti per il primo avvio. visualizzazione a schermo intero. Qualora la vi-
R a s p b e r r y P I Tu t o r i a l {26

sualizzazione su schermo presenti delle bande RasPI e avere quindi una maggior velocit del
nere laterali, abilitate loverscan. sistema. Tuttavia, nonostante tutte le schede
Configure_keyboard: qua possiamo imposta- RasPI supportino lincremento 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 luso 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 laccesso 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 lambiente Desktop, ricordiamoci quindi
la configurazione. di abilitarla.
Change_pass: con Change_pass cambiamo Update: con Update aggiorniamo i pacchetti
la password daccesso a RasPI di default ra- presenti in RasPI, compresi alcuni componenti
spberry per lutente 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 linglese in quanto molti che ci richiede laccesso ad internet.
dei pacchetti di Raspian utilizzano solo lingle- Configurato ci che ci serviva? Allora clicchia-
se nellinterfaccia 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 lora. Ricordo per che RasPI non include cipale allintera 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 lora e la data sta modificando la partizione principale. Potete
se viene rimossa lalimentazione. La data e lora 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- Lambiente desktop
moria disponibile alla GPU, di default 64. Terminato lavvio, se ci siamo ricordati di abilita-
Overclock: loverclock permette di aumentare re la visualizzazione del desktop, ci troveremo
la frequenza di clock del processore AMR di davanti allambiente desktop basato su LXDE
R a s p b e r r y P I Tu t o r i a l {27

messo a disposizione da Raspbian. comandi i quali permettono di realizzare anima-


zioni, piccole applicazioni, giochi e molto altro.

Come possiamo notare, oltre al terminale, sul


desktop troviamo le icone di alcune delle appli- Per chi non dispone di una connessione Ether-
cazioni preinstallate nella distribuzione. Per chi net e vuole utilizzare una connessione Wifi, vi
conosce il linguaggio di programmazione Py- poi Wifi Config che permette di configurare il di-
thon, ci sono IDLE ed IDLE3 i quali permettono spositivo con il quale andare in internet, cercare
di impartire comandi in Python e di interagire la rete ed effettuare laccesso. Vorrei aggiun-
con i pin di I/O utilizzando le librerie integrate in gere un particolare: le chiavette Wifi, in genere,
Raspbian. assorbono una cospicua corrente dalla presa
USB, pertanto potrebbe succedere
che appena connessa la chiavetta
Wifi RasPI si spenga o si riavvi. Per
risolvere a questo inconveniente,
baster collegare la chiavetta ad un
Hub USB alimentato separatamen-
te.
Infine, troviamo Midori, uno dei tre
browser preinstallati in Raspbian.
Midori, Dillo e Netsurf ci consentono
una navigazione in internet alquanto
fluida e piacevole. Nonostante fati-
chino un po nel caso in cui il sito
sia particolarmente pesante, nulla
Con Scratch presente sul desktop, ci torna in impedisce la normale navigazione.
mente lintento di chi ha realizzato RasPI: av-
vicinare i bambini alla programmazione e allin- Scriviamo e stampiamo
formatica. Scratch infatti un ambiente di svi- Come primo passo nellambiente Raspbian, ve-
luppo con un interfaccia visuale dotata di molti diamo ora come configurare una nuova stam-
R a s p b e r r y P I Tu t o r i a l {28

pante, ed utilizzare leditor di testo preinstallato. lazione di una nuova stampante e leventuale
La configurazione di una nuova stampante ri- condivisione in rete. Terminata linstallazione,
chiede lutilizzo 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 dellutente 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 allindi-
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.

Ora possiamo aggiungere una nuova stampan-


A questo punto, se vogliamo stampare il testo te aprendo la sezione Amministratore e cliccan-
appena scritto, dobbiamo procedere alla confi- do su Aggiungi stampante. Prima di procedere,
gurazione della stampante. CUPS ci chieder username e password, solo
Colleghiamo quindi la stampante alla porta dopo ci mostrer le stampanti trovate suddivi-
USB, ed avviamo il terminale per inserire il se- dendole tra quelle locali e quindi collegare a
guente comando: RasPI e quelle presenti in rete.
sudo apt-get install cups
Diamo conferma, ed inizier cos linstallazione
di CUPS. Tale software permette infatti linstal-
R a s p b e r r y P I Tu t o r i a l {29

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 nellapposita
casella.
Con un ultimo click su conferma, potremo im-
postare il tipo di carta utilizzato di default e ter-
minare linstallazione 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 allarticolo 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 {30

2. Navigazione in internet e con-


trollo remoto
Browser internet...quale? tali browser vengano avviati quando a RasPI

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 ladattatore HDMI-

tre browser per la navigazione internet DVI o luscita S-Video.

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-

alcune differenze riguardanti la compatibilit nazione della pagina di configurazione da parte

con i linguaggi ed i protocolli utilizzati nelle pa- di Midori come segue:

gine web come JavaScript, HTML5, FTP.


Netsurf e Dillo, per esempio, sono privi
del supporto a JavaScript, quindi duran-
te la navigazione tutte le funzionalit ed
i contenuti realizzati con tale metodo non
verranno riprodotti, tuttavia questo per-
mette, se pur a discapito dei contenuti, di
avere una navigazione pi rapida e fluida
rispetto a Midori.
Da un lato non vi il supporto a Java-
Script per Dillo e Netsurf, dallaltro questi
due browser hanno piena compatibilit
In questo caso, lutilizzo del browser Dillo avreb-
con i protocolli come lFTP, assente in Midori.
be risolto il problema dellimpaginazione.
Possiamo quindi scegliere il browser pi adatto
al nostro tipo di navigazione in web basandoci Browser alternativi
proprio sui siti maggiormente frequentati e sop- Lerrata impaginazione delle pagine web da
perire alla mancanza di un particolare supporto parte dei browser preinstallati, si risolve utiliz-
utilizzando un browser diverso. Un difetto co- zando un browser internet alternativo. Vediamo
mune a questi tre browser che stato riscontra- quindi come installare due valide alternative ba-
sate su Firefox e Chrome, due tra i browser pi
to da molti, che non sempre limpaginazione
conosciuti.
delle pagine avviene in maniera corretta, e il di-
fetto si presenta maggiormente nei casi in cui
R a s p b e r r y P I Tu t o r i a l {31

Iceweasel, un browser internet basato sul Sudo apt-get install chromium


progetto Gnuzilla, progetto che aveva lobiettivo
di rendere disponibile il software della suite Mo-
zilla utilizzando per soltanto codice libero, ed
ecco perch il nome Gnu-zilla. Iceweasel, eredi-
ta gran parte delle features del fratello maggio-
re, oltre alla grafica infatti, gran parte dei plugin
messi a disposizione per Mozilla Firefox sono
compatibili con questo browser a codice libero.
Gi presente tra i pacchetti di Raspbian, per in-
stallarlo dobbiamo semplicemente avviare il ter-
minale ed inserire il comando:
sudo apt-get install iceweasel Vi sono molte discussioni, sopratutto nel forum
Ad installazione terminata, se ci rechiamo nel ufficiale RasPI, su quale sia il miglior browser in
men di start, troveremo Iceweasel nella cate- fatto di compatibilit con i vari linguaggi utiliz-
goria Internet insieme ai browser gi presenti zati nel web, la velocit nel caricare le pagine e
in Raspbian. La navigazione con Iceweasel la fluidit nello scorrerle, tuttavia ognuno dice il
abbastanza fluida e veloce, integra il supporto a suo parere e non si arriva mai ad una conclusio-
JavaScript quindi verranno visualizzati i conte- ne. A mio avviso, Iceweasel e Chromium sono
nuti in tale linguaggio e limpaginazione avviene ottimi browser molto fluidi e veloci, ma facendo
sempre nel modo corretto. una ricerca in rete si trova sempre chi dice lop-
posto. Lascio quindi a voi la possibilit di sce-
gliere quale usare, e perch no, provarne altri e
dirci come vi trovate.

Flash Player, video e SWF


Appena fatta un po di pratica con la navigazio-
ne internet e RasPI, vi accorgerete subito che
nessuno dei browser in grado di riprodurre un
Chromium, come ricorda il nome, un browser video su Youtube o delle animazioni in SWF,
internet basato sullormai famoso Google Chro- questo perch Adobe non ha rilasciato una ver-
me. Il progetto Chromium punta a fornire un sione di Flash Player compatibile con il proces-
browser Open Souce veloce, sicuro e molto sta-
sore AMR di RasPI, lunica versione compatibile
bile. Anche qua, come per Iceweasel, la grafica
con tali processori stata rilasciata per Android
molto simile al browser da cui deriva, da quale
e non quindi possibile installarla su Raspbian.
eredita anche la compatibilit con i vari addons.
Come prima, lo installiamo via terminale e sia- Per poter riprodurre i filmati ed i contenuti SWF,

mo pronti per navigare. tuttavia possibile installare Gnash, un player


in grado di integrarsi con i browser installati e
R a s p b e r r y P I Tu t o r i a l {32

di riprodurre i contenuti che di solito vengono va di abilitare o disabilitare la possibilit di colle-


visualizzati con Flash Player. garsi a RasPI via SSH. Ma cos questo SSH?
Come sempre, ci rechiamo sul terminale e con i SSH un particolare protocollo di comunica-
seguenti comandi installiamo Gnash: zione di rete il quale permette di stabilire una
sudo apt-get install gnash connessione cifrata tra due dispositivi per poter
sudo apt-get install browser-plugin-gnash controllare il dispositivo host o dispositivo al
Installato Gnash, siamo pronti per visualizzare quale ci si collega, tramite linea di comando, un
qualche video da youtube, ma, non possiamo p come avviare RasPI ed aprire il terminale,
aspettarci fluidit anche durante la visione. Ra- solo che da remoto e quindi da un qualsiasi altro
sPI infatti fatica molto a riprodurre i video pre- PC o dispositivo come Smartphone con Android
senti allinterno dei browser internet ed alcune o IOS collegato alla stessa rete. Se non abbia-
volte la riproduzione avviene a scatti ed quasi mo disabilitato lopzione ssh durante la fase di
impossibile seguire con fluidit il video, tuttavia inizializzazione siamo gi pronti per cominciare,
ricordiamoci che stiamo gi chiedendo molto ad in alternativa se lavete disabilitata, magari per
un PC grande quanto una carta di credito... sbaglio, possiamo sempre tornare alla scher-
mata di inizializzazione digitando:
sudo raspi-config
da terminale. Abilitato il protocollo ssh, dobbia-
mo essere a conoscenza di alcuni dati fonda-
mentali: il nome utente e la password di RasPI
ed il suo IP. Sicuramente sapete gi il nome
utente e la password, che se non avete cam-
biato di default sono pi e raspberry mentre
per lip, una volta connesso RasPI alla rete, da
terminale diamo il comando:
ifconfig
Controllo remoto e comandi via SSH e ci verranno proposti tutti i dati relativi alla con-
A volte pu essere necessario poter controllare nessione Ethernet o Wifi. A noi interessa lIP
RasPI da remoto per esempio nel caso in cui quindi ci segneremo lindirizzo presente alla
non si abbia a disposizione uno schermo da po- voce inet addr o indirizzo internet.
tergli collegare, per questo ci viene incontro un
protocollo supportato da RasPI e gi abilitato di
default.
Tra le opzioni di inizializzazione viste la volta
scorsa, vi era lopzione ssh la quale permette-
R a s p b e r r y P I Tu t o r i a l {33

In alternativa, possiamo utilizzare un compu- Windows


ter connesso alla stessa rete per visualizza- In Windows non possibile usare il comando
re la pagina di configurazione del modem da ssh da terminale o Dos, dobbiamo quindi ap-
noi usato che solitamente si trova allindirizzo poggiarci ad un software in grado di creare un
192,168,1,1 e da li vedere i dispositivi connes- collegamento con protocollo SSH verso un altro
si ed il loro IP. A questo punto non ci rimane che dispositivo. Vi sono vari programmi pi o meno
connetterci via SSH al nostro RasPI. In base al complessi per questo uso, uno in particolare
sistema operativo da quale vogliamo connetter- Putty. Con un interfaccia molto semplice, Putty
ci, vi sono due modi: ci permette di stabilire una connessione con il
nostro RasPI ed avere, anche su Windows, una
Linux e Mac finestra contenete la riga di comando in attesa
Se utilizziamo Linux od un Mac, non dobbiamo di un nostro ordine. Installato ed avviato Putty,
installare nessun tipo di software aggiuntivo poi- immettiamo lindirizzo IP su Host Name e se-
ch tutto quello che ci serve il terminale. Av- lezioniamo SSH, cos facendo verr imposta-
viato il terminale dobbiamo inserire un comando ta automaticamente la porta 22, di default per
strutturato cos: questo tipo di protocollo. Clicchiamo su Open
ssh NomeUtente@IpRasPI e non dovremo far altro che immettere nome
Utilizzando i dati di accesso di default ed ipo- utente e password.
tizzando lindirizzo IP di RasPi come
192.168.1.5 avremo per esempio:
ssh pi@192.168.1.5
Confermiamo, e se i dati immessi sono
corretti ci verr chiesta la password di
accesso allutente pi ed infine apparir
la linea di comando pronta ad attendere
le nostre comunicazioni. Ora per probabilmente vi starete chiedendo,
ma se volessi avere il controllo remoto del de-
sktop? Nulla di pi semplice!
Dal terminale dellinterfaccia di RasPI o sempli-
cemente dalla riga di comando appena ottenuta
tramite connessione SSH, ci baster installare
VNC, il classico software per il controllo remoto.
Digitiamo quindi:
sudo apt-get install tightvncserver
ed avverr linstallazione del necessario per il
R a s p b e r r y P I Tu t o r i a l {34

controllo remoto. Ad installazione terminata, client TightVnc, molto semplice ed intuitivo,


non ci rimane altro che avviare il server VNC ed oltre ad essere anche multipiattaforma e quindi
impostare una password daccesso per le future installabile su qualsiasi sistema operativo. Se
connessioni. Digitiamo: utilizziamo Windows possiamo scaricare il file
vncserver :1 -geometry 800x600 -depth 24 eseguibile (.exe) mentre se utilizziamo Linux o
Analizziamo questo comando: la prima parte in- Mac vi un apposita versione in Java. Da utenti
dica che vogliamo avviare la funzione server di Windows, dopo linstallazione baster sempli-
VNC ed il numero di questo server, -geometry cemente avviare il Viewer mentre per eseguire
indica la dimensione in pixel della finestra che il programma scaricato in Java avviamo il termi-
apparir sullo schermo del nostro computer, nale, e dopo esserci spostati nel percorso in cui
mentre -depth 24 stabilisce semplicemente un si trova il file digitiamo:
set di colori a 24 bit, pi che sufficienti per la vi- java -jar NomeProgramma.jar
sualizzazione ottimale dello schermo in remoto e ci si aprir TightVNC in attesa dellinserimento
di RasPI. dei dati di connessione. Alla richiesta Remo-
Confermato il comando, ci verr richiesta una te Host inseriamo semplicemente lindirizzo IP
password che dovr poi essere immessa da co- del nostro RasPI, mentre su Port va indicata la
lui che tenter di accedere al desktop remoto, porta di accesso la quale, se non abbiamo av-
ed infine se vogliamo inserire una password di viato pi di un server VNC su Raspi, sar 5901
sola lettura ovvero nella connessione remota od in alternativa 590x ed al posto di x andr
che verr a stabilirsi utilizzando tale password messo il numero precedentemente comunicato
non potremo modificare nessun tipo di file, ma da RasPI. Confermiamo cliccando su connetti,
solo aprirli e leggerli. Inseriti i dati richiesti, ci ed ecco che dopo la richiesta dellinserimento
verr comunicato che il server VNC ora in fun- della password apparir il desktop del nostro
zione ed anche il numero di tale server. RasPI!

Ora RasPI configurato correttamente, non ci


rimane altro che scaricare ed avviare lapplica-
zione lato client sul nostro PC o Smartphone
collegato alla stessa rete di RasPI. Un buon
R a s p b e r r y P I Tu t o r i a l {35

In conclusione
Se siete interessati al mondo RasPI ma non
avete ancora fatto il passo dellacquisto 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 lam-
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 allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/raspberry-pi-tutorial-navigazione-internet-controllo-remoto

3. Realizziamo il nostro DropBox


con RasPI!

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
Lultima volta abbiamo visto lSSH, 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 linvio di comandi da terminale, lSFTP
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. LSFTP 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 {36

fase di configurazione per effettuare poi il colle-


gamento per il trasferimento dei dati.

Iniziamo con la sicurezza


Come prima cosa, dato che metteremo i nostri
Ora che abbiamo creato un nuovo utente, an-
dati nella Memory di RasPI, bene innanzitutto
dremo a modificare la porta di accesso a RasPI
cambiare, qualora non lavessimo fatto, la pas-
tramite protocollo SSH (e quindi anche SFTP)
sword per lutente di default pi. Tale utente in-
che, come abbiamo visto laltra volta, di default
fatti rimarr in RasPi per il normale utilizzo e ne
la numero 22. Questo accorgimento serve
creeremo un altro per lo stoccaggio dei file e
laccesso via SFTP. Dal terminale diamo il solito sempre per aumentare la privacy dei nostri dati
comando sudo raspi-config ed alla voce chan- in modo tale che non bastino nome utente e
ge_pass impostiamo una password diversa da password per accedervi, ma si devessere an-
raspberry per evitare che qualcuno vi acceda che a conoscenza della porta nella quale pas-
utilizzando proprio la password di default. sano i comandi per laccesso. Andiamo quindi
a cambiare un parametro nei file di configura-
zione del protocollo SSH, apriamo il terminale
e digitiamo:
sudo nano /etc/ssh/sshd_config
E ci verr aperto, con il solito editor di testo
Nano, il file di configurazione SSH. Il primo co-
mando che contiene questo file di configurazio-
ne port 22 ed proprio quello che serve a
noi. Facendo riferimento allelenco delle porte
TCP e UDP, possiamo scegliere quale porta uti-
Ora che abbiamo cambiato la password, dob- lizzare, purch non sia gi utilizzata da qualche
biamo creare un nuovo utente con nome e pas- altro programma. Per evitare una ricerca tra le
sword a nostra scelta i quali verranno successi- porte utilizzate, sappiate che tutte le porte com-
vamente utilizzati per laccesso via SFTP. Per prese tra la 49152 e la 65535 sono libere, quindi
la creazione di un nuovo utente e linserimento possono essere utilizzate per i fini dellutente.
della relativa password useremo da terminale i Scelta la porta, ed inserita al posto del 22 nelle-
comandi useradd e passwd cos strutturati: ditor di testo, confermiamo con CTRL + X, y
sudo useradd NomeUtente ed invio per sovrascrivere il file.
sudo passwd NomeUtente
Se abbiamo sbagliato nellinserire il nome dellu-
tente, o se per qualche altro motivo lo vogliamo
cancellare, dovremo usare il comando:
sudo userdel NomeUtente
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 lindirizzo
da Linux o Mac, utilizzare il semplice comando: IP di RasPI, nel secondo il nome utente dellu-
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 dallester-
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 lindirizzo lIP 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 {38

nel file di configurazione SSH, nel nostro mo- potete trovare lapertura delle porte sotto la voce
dem di casa. In commercio vi sono centinaia di Port Forwarding Port Mapping o Virtual Ser-
modem, uno diverso dallaltro, 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 lindirizzo 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 lindirizzo IP del
modem.

Se tutto andato correttamente, possiamo av-


viare Filezilla su un PC collegato ad una diversa
connessione internet, ed inserendo lindirizzo IP
Linux, Mac e RasPI della connessione internet che utilizza RasPI,
Dopo aver cercato ed avviato il Terminale, con il nome utente, password e la porta da noi scelta,
comando route -n potremo facilmente identifica- potremo visualizzare i file della Memory card!
re lindirizzo del modem presente nella colonna Se Filezilla ci comunica che la connessione non
Gateway. andata a buon fine invece, probabilmente non
abbiamo aperto correttamente le porte del mo-
dem, e non quindi raggiungibile.

Memorizzato lindirizzo del modem, apriamo


un qualsiasi browser internet ed inseriamolo al
posto dellindirizzo internet della nostra Home e
ci verranno chiesti dei dati per lautenticazione.
Per accedere alla configurazione del modem in-
fatti, dovremo inserire il suo nome utente e la
password, che solitamente sono admin e ad-
min o user e user, in alternativa potete trovarli
scritti sotto il modem.
Ora la procedura indicata generale quindi
dovrete essere voi ad adattarla al vostro caso,
R a s p b e r r y P I Tu t o r i a l {39

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 lindirizzo 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 lIP della nostra connessione e la password, successivamente dovremo in-
Internet alla quale connesso RasPI, non solo, serire ogni quanti minuti sincronizzare lIP 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 allindirizzo 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 dellIP
sezione Hostname. LHostname che indichere- in Filezilla, lindirizzo 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 lapplicazione 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 allinterno della cartella
cd /home/pi/noip
scarichiamo il file dinstallazione 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 {40

Creiamo un nuovo file Da utente Android, dato che ho parlato della


sudo nano /etc/init.d/NoIPstartup possibilit di accedere a RasPI via sftp anche
Allinterno delleditor di testo scriveremo: da Smartphone, segnalo lapplicazione Andftp
#! /bin/sh che oltre ad essere gratuita permette la connes-
# /etc/init.d/noip sione ad un dispositivo Host per lo scambio di
### BEGIN INIT INFO file via Wifi e 3G utilizzando sftp, ftp, etc.
# Provides: noip
# Required-Start: $remote_fs $syslog
# Required-Stop: $remote_fs $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
### END INIT INFO
case $1 in image credits | adafruit.com
start)
echo Starting noip
/usr/local/bin/noip2
;;
stop)
echo Stopping noip
killall noip2
;;
*)
echo Usage: /etc/init.d/noip {start|stop}
exit 1
;;
esac
exit 0
e come sempre, confermeremo con CTRL+X,
y ed Invio. Rendiamo lo script appena creato
eseguibile
sudo chmod 755 /etc/init.d/NoIPstartup
ed infine lo rendiamo eseguibile allavvio
sudo update-rc.d NoIPstartup defaults
Ecco RasPI pronto per ospitare i nostri dati pre-
via autenticazione con nome utente e password.

Di seguito il link per accedere direttamente allarticolo 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 {41

4. Controlliamo il Media Center con


un comune telecomando IR!
Raspbmc segnali IR avremo bisogno di:

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 lesiguo 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 lideale sarebbe un
sivi, film, e molto altro. telecomando con le quattro frecce direzionali ed
Procediamo quindi con linstallazione 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
nellinstallazione di Raspbmc in un supporto procedere allacquisto. 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 lintera 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 {42

Tra questi, vi il TSOP34138 il quale presen- Per aiutarvi nellindividuazione dei pin, potete
ta proprio le caratteristiche e laffidabilit da noi utilizzare limmagine 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-

Passiamo al lato pratico e iniziamo quindi a pre- re LIRC.

disporre lhardware per la ricezione degli infra-


LIRC
rossi. Per il collegamento del sensore al connet-
Per la decodifica dei segnali ricevuti dal tele-
tore presente sul PCB di Rpi, potete utilizzare
comando, useremo il pacchetto LIRC ormai
dei connettori facilmente reperibili in vecchi PC presente di default in tutte le nuove versioni di
in quanto utilizzati per il collegamento dei vari Raspbmc. LIRC in grado di identificare ogni
pulsanti/led alla scheda madre, cos si eviteran- singola pressione sul telecomando, per poi as-
no eventuali saldature. segnare il giusto comando al tasto premuto.
Quello che andremo a fare ora, sar innanzitut-
to permettere a LIRC di decodificare il segnale
ricevuto e successivamente mapperemo i vari
tasti del telecomando. Con il sensore collega-
to, avviamo Raspbmc, e successivamente dal
men dello spegnimento premiamo Esci per ac-
cedere al terminale e quindi alla linea di coman-
do, la configurazione di LIRC verr infatti fatta in
modalit testuale.
Il sensore che andremo ad utilizzare, presenta
Entrati in modalit testuale, ci verranno richiesti
tre terminali i quali fanno riferimento a GND, Vs
i dati per laccesso, i quali come anche in Ra-
ed il segnale in uscita, i quali andranno rispetti-
spbian sono:
vamente collegati pin 6,1 e 12 di Rpi.
User: pi
Password: raspberry
Ora che siamo davanti alla linea di comando,
come prima cosa dobbiamo assicurarci che
LIRC sia presente nel Kernel di Raspbmc, quin-
R a s p b e r r y P I Tu t o r i a l {43

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 lesatto
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, dalle-
lenco che potete trovare allegato allarticolo 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 Linserimento 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 lunderscore 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 {44

visualizzarne il terminale ed inserire tutti i co- mente riavviare Raspbmc:


mandi necessari. sudo reboot
Abilitiamo il telecomando
Ci rimane solo da abilitare lutilizzo
del telecomando in Raspbmc :)
Terminato il riavvio, rechiamoci in
Programmi > Raspbmc Settings e
nel tab IR Remote abilitiamo Ena-
ble GPIO TSOP IR Receiver.
Su GPIO IR Remote Profile sce-
Terminata la mappatura dei tasti, alla pressione gliamo ora il profilo che abbiamo sostituito, in
del tasto Enter la procedura di configurazione alternativa se non abbiamo copiato il file di con-
terminer, e verr cos creato un file contenente figurazione nella cartella di LIRC e labbiamo
tutte le assegnazioni dei tasti con i comandi. lasciato nella home, indicheremo Custom(lircd.
Pu succedere che ci venga chiesto di premere conf on pis home folder).
un singolo tasto ripetutamente il pi veloce pos- Riavviamo, e navighiamo nel men di Raspbmc
sibile prima di terminare la configurazione, fate con il nuovo telecomando.
attenzione a premere sempre e solo lo stesso
tasto, altrimenti verr invalidato il processo in
atto.
Non ci rimane altro dire a LIRC di utilizzare il
file di configurazione appena creato. Dovremo
ora andare a copiare il file contenente la nostra
configurazione nella cartella di LIRC, sostituen-
do un file gi presente ed integrato in Raspbmc:
sudo cp /home/pi/lircd.conf /etc/lirc/xbox-lircd. Infine, se volete rieseguire la procedura di con-
conf figurazione per via di un evenutale errore nella
Non avendo nessuna XBOX in casa, ho sostitui- mappatura, o per cambiare il telecomando da
to quello relativo al suo telecomando, in alterna- utilizzare, ricordatevi di rimuovere il file presen-
tiva potete sostituire la configurazione appena te nella home, altrimenti LIRC vedendo gi un
creata con uno dei seguenti file preesistenti: file di configurazione esistente, non ci permette-
Nulla vieta di non sostituire un file di configura- r di eseguire una nuova mappatura.
zione preesistente, e di utilizzare il file appena sudo rm /home/pi/lircd.conf
creato che ora si trova in /home/pi, ma copian-
dolo nellapposita cartella di LIRC rimane tutto Sono a disposizione nei commenti per ogni
pi ordinato. eventuale domanda.
Come ultimo passaggio, dobbiamo semplice-

Di seguito il link per accedere direttamente allarticolo sul Blog e partecipare alla discussione:
http://it.emcelettronica.com/raspberrypi-controlliamo-media-center-con-comune-telecomando-ir

Potrebbero piacerti anche