Intro
Questo articolo, speriamo breve, vuole essere una piccolo "how to" su come cominciare a divertirsi un po' con la beaglebone black board [1].
Mi è arrivata dagli EEUU in giornata, e visto che sono felice di averla ricevuta e dato che oggi avevo un po' di tempo per respirare (nonostante le tante cose da fare) ho deciso di mettermi subitissimo al lavoro e scrivere un breve tutorial per EY.
Ecco intanto una prima istantanea della scheda in funzionamento. :)
Collegare la scheda e rendersi operativi
Come prima cosa, è bene procurarsi i driver della scheda per il proprio sistema operativo (vedere link [1] Step 2).
Per Linux viene riportato che l'installazione non è necessaria, tuttavie per stare tranquillo io ho scaricato ugualmente il file mkudevrule.sh, l'ho reso eseguibile e l'ho eseguito con:
chmod +x mkudevrule.sh sudo ./mkudevrule.sh
Et voilà.
Una volta collegata la scheda al computer, su Linux è bene lanciare il comando dmesg. dmesg stampa nello stdout i messaggi di avviso del kernel.
In questo caso è di particolare aiuto per sapere sotto quale nome di dispositivo è stato riconosciuta la scheda. Dovrebbe essere qualcosa come ttyxxx:
[ 1250.023044] usb 2-3: new high-speed USB device number 4 using ehci_hcd [ 1250.138015] usb 2-3: New USB device found, idVendor=1d6b, idProduct=0104 [ 1250.138019] usb 2-3: New USB device strings: Mfr=2, Product=3, SerialNumber=4 [ 1250.138023] usb 2-3: Product: BeagleBoneBlack [ 1250.138025] usb 2-3: Manufacturer: Circuitco [ 1250.138027] usb 2-3: SerialNumber: 6A-0314BBBK1536 [ 1250.140570] rndis_host 2-3:1.0: eth1: register 'rndis_host' at usb-0000:00:1d.7-3, RNDIS device, d0:ff:50:08:ba:96 [ 1250.141130] cdc_acm 2-3:1.2: This device cannot do calls on its own. It is not a modem. [ 1250.141232] cdc_acm 2-3:1.2: ttyACM0: USB ACM device [ 1250.141984] scsi11 : usb-storage 2-3:1.4 [ 1251.144661] scsi 11:0:0:0: Direct-Access Linux File-CD Gadget 0308 PQ: 0 ANSI: 2 [ 1251.148642] sd 11:0:0:0: [sdb] 144522 512-byte logical blocks: (73.9 MB/70.5 MiB)
Dallo spezzone di output, vediamo che alla quart' ultima riga viene riconosciuto come ttyACM0. Benissimo. Questa informazione è importantissima in quanto è indispendabile per comunicare con il dispositivo.
Dopo aver osservato un pò i primi tutorial disponibili in rete, link [1] e [2], ho avuto un piccolo problema nel loggarmi al sistema operativo installato a bordo..
Nelle varie guide in rete viene citato di un indirizzo dinamico 192.168.7.2 al fine di effettuare il collegamento via rete. Sarà che è tardi ma nel mio caso non ho ottenuto nessun esito positivo... :(
Ho così deciso di proseguire in questo modo:
Non riuscendo a collegarmi con ssh dato che l' IP fornito non coincide (almeno per me), per prima cosa ho scaricato l'ultima versione di putty. Putty è un client terminal emulator opensource che permette di effettuare il collegamento via ssh, telnet, seriale etc..
Ecco, a me serviva proprio il collegamento seriale come alternativa al collegamento ethernet.
Io al momento uso una Slackware 14.0 e questa distribuzione non include un pacchetto precompilato putty, così ho proseguito scaricando il programma con wget in formato tar.gz:
simo@slack:~$ wget http://the.earth.li/~sgtatham/putty/0.63/putty-0.63.tar.gz --2014-02-11 00:22:11-- http://the.earth.li/~sgtatham/putty/0.63/putty-0.63.tar.gz HTTP request sent, awaiting response... 200 OK Length: 1887913 (1.8M) [application/x-gzip] Saving to: 'putty-0.63.tar.gz' 100%[====================================================================================>] 1,887,913 1.65MB/s in 1.1s 2014-02-11 00:22:13 (1.65 MB/s) - 'putty-0.63.tar.gz' saved [1887913/1887913] simo@slack:~$
Notiamo che il file scaricato è putty-0.63.tar.gz.
Altre versioni possono essere scaricate a questo indirizzo. Per utenti con distribuzioni aventi putty disponibile nei repositories, si consiglia di usare il package manager della distribuzione in uso.
Una volta scaricato putty è ora di scompattare il file e compilarlo (sperando che vada tutto bene! :) ).
Usiamo quindi tar per decomprimere il file e successivamente entriamo nella cartella estratta:
tar -xvf putty-0.63.tar.gz ... putty-0.63/unix/uxprint.c putty-0.63/unix/uxpty.c putty-0.63/unix/missing putty-0.63/unix/uxstore.c putty-0.63/unix/xpmptcfg.c putty-0.63/unix/install-sh putty-0.63/unix/xpmpucfg.c putty-0.63/unix/aclocal.m4 putty-0.63/unix/uxnet.c putty-0.63/unix/configure putty-0.63/unix/gtkcols.h putty-0.63/unix/Makefile.am putty-0.63/unix/gtkfont.c putty-0.63/unix/ux_x11.c putty-0.63/unix/gtkfont.h putty-0.63/unix/uxproxy.c putty-0.63/unix/gtkcfg.c putty-0.63/unix/uxmisc.c putty-0.63/unix/xpmputty.c ... cd putty-0.63/
Una occhiata veloce con ls ci permette di osservare che all' interno della cartella è presente il file configure, che si occupa di organizzare i preparativi di compilazione ed installazione del programma. configure accetta varie opzioni da riga di comando dipendendo dal software che si deve compilare, per esempio --prefix=<percorso di installazione> (/usr/ è quello predefinito).
Ad ogni modo si consiglia di leggere sempre il README per tutte le istruzioni.
configure si occupa anche di configurare il Makefile necessario per la compilazione del codice. Se tutto è andato bene, è sufficiente eseguire il comando make. :)
Non tarda molto, appena due minuti, Octave a confronto tarda molto di più!
Ecco un piccolo screenshot di gcc mentre compila il tutto.
Se tutto è andato bene, make non dovrebbe restituire nessun errore ed il file eseguibile di putty dovrebbe trovarsi all' interno della cartella. Se lo si vuole installare basta un
sudo make install
Ad ogni modo eseguiamo putty con permessi di root prima dalla cartella corrente di compilazione, giusto per provare. :)
sudo ./putty
Ecco uno screenshot:
La velocità di comunicazione deve essere impostata a 115200, come si vede bisogna anche riportare il nome del dispositivo ttyACM0.
Un volta impostata questa configurazione di base, si può avviare la sessione. :)
La distrubuzione di base è Angstrom ma è possibile installare anche altre distro (vedere i link e tutorial linkati).
La configurazione di base permette di loggarsi come root e la password non è settata. Quindi basta premere Enter ed il login è fatto.
Collegarsi con ssh (secure shell)
Dato che non sono un amante di putty, mi trovo molto bene con ssh per effettuare il login ed scp per il trasferimento di file da un host ad un altro.
Per questo serve sapere l'indirizzo IP della scheda, che può essere ottenuto con l'output di ifconfig da putty. Nel mio caso la IP è 168.xxx.xxx.241 quindi, dalla mia distribuzione configuro il collegamento con ifconfig ed il file /etc/resolv.conf
~ $ sudo ifconfig eth0 168.xxx.xxx.242 up
Ovviamente le xxx vanno sostituite con i numeri dell' IP.
Successivamente è possibile effettuare il login con ssh:
~ $ ssh root@168.xxx.xxx.241
Per il trasferimento dei file, è possibile usare scp. Per esempio, per caricare il file putty-0.63.tar.gz (scaricato anteriormente) nella memoria del sistema operativo della board:
scp putty-0.63.tar.gz root@168.xxx.xxx.241:/home/root/Desktop
Mentre per scaricarlo è sufficiente:
scp root@168.xxx.xxx.241:/home/root/Desktop/putty-0.63.tar.gz $PWD/putty-0.63.tar.gz
Et voilà.
La distribuzione installata all' interno della memoria incorpora già il compilatore arm-angstrom-linux-gnueabi-gcc/g++ e arm-binutils per sviluppare applicazioni per architettura ARM.
Data l'ora tarda al momento, non ho molta voglia di programmare, e lo scopo dell' articolo scritto velocemente è quello di illustrare il procedimento base per rendersi operativi con la scheda in mancanza di un monitor ed hardware esterno, e si spera che questa piccola introduzione possa essere utile ai prossimi nuovi utenti della beaglebone black..
Spero, prossimamente, di scrivere qualcosa di più dettagliato riguardo alla programmazione di sistemi embedded in ambiente Linux in C.
Si ricorda che per spegnere correttamente la board è bene cambiare il runlevel con
# poweroff
Un saluto a tutti.
Simo