main index Ingredienti:


Fase uno: procurarsi gli ingredienti hardware e software

Parto dal presupposto che abbiate già sbirciato le pagine precedenti, o che almeno i comandi Linux descritti in questa pagina non vi suonino come cinese antico.

Ho comprato una SDHC da otto gigabyte (per imbottirla di multimedia da utilizzare sulla Beagleboard).

Ho poi configurato col sistema "Narcissus" (che fornisce una Angstrom Linux precompilata e configurabile) una distribuzione abbastanza completa, comprendente fra gli altri:

Clicco su "Build me" e dopo alcuni minuti mi prepara il malloppone da scaricare (un file .tar.bz2) - attenzione: non tutti i pacchetti sono supportati sulla Beagleboard (avevo aggiunto anche i tre ntp ma uno di loro fallisce miseramente e non viene aggiunto al malloppone).

A video mi viene detto che le mie scelte assommano a 467Mb di filesystem (che compresso in .tar.bz2 diventano circa 130 mega di download), dunque in teoria mi potrebbe perfino bastare una SD da 512Mb... se non dovessi imbottirlo di multimedia (per cui, per stare sicuro, ho preso una SDHC da otto gigabyte! goduria!). Il grosso dello spazio nella partizione Linux è occupato dall'Xorg e dai software che girano in ambiente grafico.


Fase due: formattare la secure digital su cui installare Linux

Per formattare la SD/SDHC ho dovuto utilizzare nientemeno che... la mia fotocamera digitale Lumix FZ50! Infatti il mio adattatore PCMCIA per SD/MMC clamorosamente non vede le SDHC (e non vede neppure tutte le SD). La fotocamera digitale, invece, in modalità "direct access" USB (anziché in modalità PTP) è vista dal PC come un normalissimo drive USB (in teoria dovrebbe servire solo per scaricare fotografie, in pratica possiamo farci di tutto - incluso il ripartizionamento con fdisk e la formattazione delle partizioni, anche in formati sconosciuti alla fotocamera).

Lanciando dmesg dal mio PC Linux scopro che appena accendo la fotocamera, il mio PC Ubuntu 8.10 la vede come /dev/sdb e ne vede la singola partizione FAT32 (come tutte quelle in commercio).

Con fdisk ripartiziono la SDHC in questo modo:

Nota: è buona abitudine marcare le partizioni come "tipo ''0b'' (Windows FAT32)", e marcare la EXT3 (che sarà la rootfs) col flag di boot "active" (anche se il bootloader della Beagleboard se ne infischia).

Attenzione: su alcune distribuzioni Linux, dopo aver completato i lavori con fdisk, l'hald (hardware abstraction layer daemon) tenta di "montare" le partizioni appena trovate. Per formattarle, è necessario prima "smontarle".

A questo punto ho potuto formattare manualmente le tre partizioni. Ecco i comandi che ho usato per formattare la root ext3 e riempirla con il filesystem ottenuto dalla pagina di Narcissus (notare come in /home/root della Beagleboard metto un po' di file personali dalla mia directory "tarballs"):
mkfs.ext3 -m 1 -L LinuxBeagleboard /dev/sdb2
mount /dev/sdb2 /mnt/
cd /mnt/
tar xjvpf /tmp/beagleboard-image-che-goduria.tar.bz2
cd home/root
cp ~/beagleboard/tarballs/* .

La volume label "LinuxBeagleboard" non è indispensabile, ma fa tanto chic...

Per formattare le partizioni VFAT32 mi è bastato usare (sempre da PC Linux che "comanda" la SDHC nella fotocamera digitale):
mkfs.vfat -F 32 /dev/sdb1 -n Beagle-Boot
mkfs.vfat -F 32 /dev/sdb3 -n Multimedia

Sulla partizione Beagle-Boot vanno poi copiati u-boot.bin e MLO (ma non sono sicuro che servano davvero) e la uImage del kernel Linux per il boot, che andiamo a recuperare dalla directory /boot del root filesystem appena creato:
cp /mnt/boot/uImage /media/Beagle-Boot/

Ne approfitto anche per mettere sulla partizione "Multimedia" un po' di files MP3 e AVI:
cp ~/Desktop/gits-sac/*.avi /media/Beagle-Boot/
cp ~/Music/De-Victoria/Responsori/*.mp3 /media/Beagle-Boot/

A questo punto possiamo smontare le partizioni e possiamo mettere nello slot SD della Beagleboard la SDHC appena riempita.


Fase tre: il boot sulla Beagleboard

Una volta accesa la Beagleboard, interrompiamo la sequenza di boot e diamo manualmente questi comandi:
mmcinit
setenv bootargs 'console=ttyS2,115200n8 console=tty0 root=b302 rootdelay=1 rw'
fatload mmc 0 80200000 uImage
bootm 80200000

In poche decine di secondi si carica il kernel Linux, poi l'ambiente grafico (che su porta seriale non vediamo, ma dalle uscite video della Beagleboard sì), e quindi (su console RS232) il canonico prompt "login" (con cui entrare con root e senza password).

Per automatizzare il tutto ad ogni accensione (e per ridurre la pausa iniziale da 10 secondi a 3 secondi), dal prompt del boot manager è possibile dare questi comandi:
setenv bootargs 'console=ttyS2,115200n8 console=tty0 root=b303 rootdelay=1 rw'
setenv bootcmd 'mmcinit; fatload mmc 0 ${loadaddr} uImage; bootm ${loadaddr}'
setenv bootdelay 3
saveenv

(andrebbe messo qualche "if" in più per controllare eventuali messaggi di errore, ma non vado nei dettagli).

Per comodità ho creato le directory /dos (a cui permettere l'accesso read-only) e /extra (la partizione da imbottire di multimedia); ho perciò modificato la tavola /etc/fstab aggiungendo nelle ultime due righe:
rootfs           /                auto       defaults,noatime      1  1
proc             /proc            proc       defaults              0  0
devpts           /dev/pts         devpts     mode=0620,gid=5       0  0
usbfs            /proc/bus/usb    usbfs      defaults              0  0
tmpfs            /var/volatile    tmpfs      defaults              0  0
tmpfs            /dev/shm         tmpfs      mode=0777             0  0
tmpfs            /media/ram       tmpfs      defaults              0  0

/dev/mmcblk0p1   /dos             auto       defaults,sync,ro      0  0
/dev/mmcblk0p3   /extra           auto       defaults,sync,user    0  0

Nota: la directory /tmp sulla Beagleboard punta in realtà ad una sottodirectory di /var/volatile che è montata su temporary file system (tmpfs), cioè su RAM, al pari di altre directory "volatili" (basta vedere di persona sotto /var/volatile). Dunque si può utilizzare selvaggiamente la /tmp senza scrivere settori sulla SDHC (come è noto, ogni settore delle memory card ha un numero limitato di operazioni di "write", tipicamente diecimila o centomila, e perciò ho messo anche il noatime alla root directory (in tal modo il kernel non aggiornerà su disco gli "atime" dei files, che se non sai cosa sono vuol dire che non ne hai bisogno).


Fase quattro: compilazione di Ruby e gpsd

Ora la Beagleboard ha un Linux completo di toolchain Gnu, per cui posso procedere a compilare Ruby 1.9 (nel mio caso, la 1.9.1 patch level 129):
tar xzvf ruby-1.9.1-p129.tar.gz
cd ruby-1.9.1-p129
./configure --prefix=/usr
make
make test
make install

Nota: la compilazione richiede più di un'ora (dipende dalla velocità della SD e da quanti altri software erano in esecuzione al momento), di cui gran parte per compilare il "parse.c" (più di tre quarti d'ora).

L'installazione riesce senza problemi: ora ho dunque Ruby sulla Beagleboard!

Stesso metodo, per compilare il daemon gpsd, che però fallisce perché cerca la libstdc++ che nel filesystem non c'era ancora.

(continua...)