Running applications

Bene, supponiamo che siamo riusciti a installare VirtualBox sul nostro PC, aver scaricato e installato una distribuzione Linux (Ubuntu o Fedora) sulla macchina virtuale creata con VirtualBox, aver correttamente installato nell'ambiente Linux la toolchain arm-linux-gcc-4.3.2.tgz e il toolkit Qt Creator, aver provato a compilare e far girare sul Desktop un progetto tra gli esempi di Qt, averlo riconfigurato per Embedded Linux e ricompilato per ARM, il più si può dire che è stato fatto.

Rilassiamoci e godiamoci un meritato riposo, perché quasi mai le cose sono così semplici, e tutte queste operazioni hanno richiesto tempo e fatica. Studiamo un po' la documentazione contenuta nel DVD in dotazione, che non è poca.

Nel DVD scopriamo che sono presenti tutte le immagini del software contenuto sulla Micro2440, più qualche altra cosetta. Per esempio, c'è il tool di comunicazione dnw, per ambiente Windows, ovvero un eseguibile che permette la connessione simultanea seriale e USB. In pratica è un'interfaccia terminale seriale che gestisce anche la ricezione e l'invio di file tramite USB. Per la sua installazione è sufficiente caricare il driver USB per Windows presente sul DVD, il suo uso è abbastanza ben spiegato nel manuale utente della Mini2440 (in inglese, per fortuna).


Bootloader

Un bootloader è il programma che prende il controllo al power-on/reset, effettua delle inizializzazioni e successivamente carica e lancia il sistema operativo. Il bootloader è solitamente provvisto anche di una console comandi da terminale seriale. Il bootloader Supervivi, presente sia nella Flash Nand che in quella Nor, non è tra i più evoluti come prestazioni, u-boot e barebox sono delle valide alternative, ma la loro installazione sulla scheda micro2440-SDK richiede una certa dimestichezza, come vedremo in seguito.
Il bootloader Supervivi si interfaccia con dnw (o con qualunque terminale seriale, tipo hyperterminal) e permette di eseguire sia una serie di operazioni veloci, contenute nel menu iniziale, che tutti i comandi Supervivi, una volta usciti dal menu iniziale. Tra le operazioni del menu iniziale c'è la possibilità di programmare nella Nand Flash un (altro) bootloader, un (nuovo) kernel e un (altro) rootfs. Se per qualche motivo quelli già presenti sulla Flash Nand dovessero essere ripristinati - come è successo a me - si può facilmente ricaricarli, tramite i comandi del menu iniziale:

[k]: download linux image to kernel partition on Nand Flash

[y]: download yaffs file system image to root partition on Nand Flash
rispettivamente con i file immagini zImage_A70rootfs_qtopia_qt4.img.

Come spiegato nel manuale, il menu del bootloader Supervivi è disponibile quando la scheda effettua il bootstrap da Nor Flash. Il manuale riporta che è possibile entrare nel menu di Supervivi anche quando la scheda effettua il bootstrap da Nand Flash, tenendo premuto lo spazio da interfaccia terminale, ma per poterlo fare va commutata la porta del Superterminal nella linea di comando d'avvio di linux, tramite il comando set del menu iniziale di Supervivi. Il comando s (set) ha un sottomenu che consente di visualizzare, modificare e salvare i parametri d'avvio del sistema:


Il parametro linux_cmd_line dovrà essere modificato in:

"noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC1,115200"

In tal modo, quando il sistema si riavvia, i messaggi d'avvio e di login saranno inviati sulla porta seriale 1, mentre i messaggi di Supervivi saranno ancora trasmessi sulla porta seriale 0.


Iniziamo con una cosa facile


Nel DVD troviamo una cartella linux, che a sua volta contiene la cartella examples. Da examples copiamo la cartella adc-test nel nostro ambiente virtuale Linux sul PC, e la andremo a mettere in /home/user/micro2440. Apriamo un terminale e spostiamoci in questa cartella:

[user@domain ~]$ cd /home/user/micro2440/adc-test
e configuriamo i permessi di lettura e scrittura per i due files presenti nella cartella (adc-test.c e Makefile):

[user@domain adc-test]$ chmod 666 *
Lanciamo quindi il comando di compilazione:

[user@domain adc-test]$ gmake
E avremo ottenuto l'eseguibile adc-test per la Micro2440.

Ora accendiamo la Micro2440, collegata alla rete o direttamente al PC con il cavo ethernet incrociato. Se non abbiamo già configurato l'indirizzo IP della Micro2440, sarà il momento di farlo ora, con il Network Setting di Qtopia. Dobbiamo configurare la stessa subnet del nostro PC ed assegnare un indirizzo IP statico disponibile (ad esempio 192.168.1.5) e infine compilare i campi Gateway e DNS (vanno bene quelli del nostro router).

Da ambiente Windows sul nostro PC, lanciamo Hyperteminal collegato alla serial0 della scheda, spostiamoci nella cartella /opt/init.d/ e modifichiamo con l'editor vi il file rcS, commentando il comando per l'avvio di Qtopia, nelle ultime righe del file:

# /bin/qtopia &
in questo modo Qtopia non verrà più aperto automaticamente all'avvio. Diamo il comando di reboot e attendiamo che la scheda si riavvii.

A questo punto siamo in grado di collegarci con la rete alla nostra scheda, lo faremo con ftp lanciato dalla finestra del terminale. Apriamo la connessione con il comando open seguito dall'indririzzo IP della scheda, ad aesempio:

ftp> open 192.168.1.5
apparirà il prompt della shell con la richiesta di login e password. Una volta loggati potremo  trasferire il nostro eseguibile adc-test - in modalità binary - tramite il comando put.

Da Hyperteminal acquisiamo i diritti di supervisore (comando su) e spostiamoci nella cartella dove abbiamo trasferito il nostro file, a cui assegneremo i diritti di esecuzione con chmod:

[user@FriendlyARM adc-test]# chmod 755 adc-test
e finalmente lanciamo il nostro eseguibile:

[user@FriendlyARM adc-test]# ./adc-test
Se tutto ha funzionato a dovere vedremo una successione di numeri apparire sul terminale ad intervalli regolari, che sarebbero le letture del convertitore A/D AIN0. Girando il trimmer sul bordo destro della scheda, vedremo le letture cambiare. Ctrl+c permette di interrompere l'esecuzione del nostro primo test.



Running Qt applications

Ora siamo pronti per trasferire e lanciare la nostra applicazione Qt, in questo caso analogclock. Anche questa volta procederemo al trasferimento dell'eseguibile sulla scheda Micro2440-SDK per mezzo di ftp, come descritto nell'esempio precedente.

Quindi editeremo uno script per l'assegnazione delle variabili d'ambiente e l'avvio dell'applicazione.

Possiamo chiamare questo script con lo stesso nome dell'applicazione, ma con extension .sh, ad esempio analogclock.sh:

#!/bin/sh

export TSLIB_TSEVENTTYPE=INPUT

export TSLIB_CONSOLEDEVICE=none

export TSLIB_FBDEVICE=/dev/fb0

export TSLIB_TSDEVICE=/dev/input/ts

export TSLIB_CALIBFILE=/etc/pointercal

export TSLIB_CONFFILE=/usr/local/etc/ts.conf

export TSLIB_PLUGINDIR=/usr/local/lib/ts

export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib

export QTDIR=/usr/local/Trolltech/QtEmbedded-4.6.3-arm

export QWS_MOUSE_PROTO=tslib:/dev/input/event0

export QWS_DISPLAY=LinuxFB:mmWidth=310:mmHeight=190

./analogclock -qws &

Verificato che le path sulla nostra scheda Micro2440 siano corrette, possiamo inviare con ftp (in modalità ascii) anche questo script nella stessa cartella dove abbiamo messo l'applicazione, ad esempio /home/user/.

Infine, diamo i permessi d'esecuzione e lettura ai due file e lanciamo lo script:

[user@FriendlyARM user]# chmod 755 analogclock*
[user@FriendlyARM user]# ./analogclock.sh
E dovremmo veder girare la nostra applicazione sulla scheda Micro2440.



Bootstrap Micro2440 via NFS


Una caratteristica di questa scheda sicuramente interessante è quella di poter effettuare il bootstrap da un server Network File System sulla rete. Ciò consente alla scheda di operare con un file system residente sul disco di un altro PC, con maggiori possibilità di spazio e velocizzazione nello sviluppo del software.

Per prima cosa occorre decomprimere l’immagine del rootfs presente nel DVD, rootfs_qtopia_qt4-20110304.tar.gz, nella cartella /opt/FriendlyARM/ del sistema Linux Host:
$mkdir /opt/FriendlyARM
$tar –xvzf rootfs_qtopia_qt4-20110304.tar.gz /opt/FriendlyARM/
Dopo aver modificato i permessi della cartella /opt, con
$chmod 777 /opt
bisogna editare il file /etc/exports, inserendo la seguente riga:
/opt/FriendlyARM/mini2440/rootfs_qtopia  192.168.1.57(rw,insecure,sync,insecure_locks,nohide,no_root_squash)
Dove il percorso è quello dell’immagine della rootfs e l’indirizzo IP è quello della scheda.
In alternativa si può usare l’utility di configurazione NFS:


Infine, occorre avviare il servizio, con il seguente comando:
$su -c 'service nfs start'
(questo comando andrà lanciato una sola volta - a meno di non inserire NFS tra i servizi avviati automaticamente -  prima di accendere la scheda).

Sulla scheda Micro2440 occorre modificare la linea di comando del bootstrap, da Supervivi. Pertanto la scheda andrà avviata in modalità NOR e dal menù iniziale di Supervivi va lanciato il comando s (set parameters).

La linux_cmd_line andrà modificata nel seguente modo (senza ritorni a capo):
"console=ttySAC1,115200 root=/dev/nfs nfsroot=192.168.1.5:/opt/FriendlyARM/mini2440/rootfs_qtopia ip=192.168.1.57:192.168.1.5:192.168.1.5:255.255.255.0:MINI2440.arm9.net:eth0:off"
Dove ttySAC1 è la serial1 usata come Superterminal a 115200 baud, l’indirizzo IP 192.168.1.5 è quello del Host Linux in cui è stato avviato il server NFS, 192.168.1.57 è l’indirizzo IP della scheda Micro2440.

Salvare i parametri, con il comando w, uscire dal sottomenu con q e riavviare la scheda in modalità NAND.

Se tutto è stato fatto correttamente, la scheda effettuerà il bootstrap via NFS, eseguendo di nuovo la calibrazione del touchscreen e la configurazione di Qtopia.

Io ho riscontrato un problema quando ho cercato di far girare le mie applicazioni Qt, con la scheda in modalità NFS. In particolare veniva visualizzato l’errore:
error while loading shared libraries: libts-0.0.so.0: cannot open shared object file: No such file or directory
Nonostante il file libts-0.0.so.0 si trovasse regolarmente nella cartella /usr/local/lib. Per rimediare è stato necessario creare il link:
# ln -s /usr/local/lib/libts-0.0.so.0 /usr/local/Trolltech/QtEmbedded-4.6.3-arm/lib/libts-0.0.so.0
E le mie applicazioni Qt sono tornate a girare correttamente anche con la scheda in modalità NFS.

 (to be continued)

Nessun commento:

Posta un commento