domenica 19 aprile 2009

Beagleboard e mini-sistemino Linux tagliato su misura: appunti vari

clipped from uclibc.org
2 March 2009, uClibc 0.9.30.1 Released
Installerò volentieri una distribuzione Linux già pronta, ma nel frattempo intendo personalizzarmi la mia (da mettere sui 256Mb Flash).

Promemoria per il cross-compiling:

1) procurarsi l'ultimo kernel con aggiornamenti architettura OMAP (consigliano git clone git://git.kernel.org/pub/scm/linux/kernel/git/tmlind/linux-omap-2.6.git linux-omap-2.6 che pare sia già alla 2.6.30)

2) compilare un primo kernel essenziale (senza moduli ma con tutte le opzioni riguardanti l'hardware della Beagleboard) ed in maniera tale che riesca a fare il boot senza Panic, senza Oops, senza bloccarsi (al momento sono fermo proprio su questo punto ma solo per mancanza di tempo) e utilizzarlo per fare il boot "validazione" (basta che riesca ad arrivare al prompt di quella mini-Angstrom)

3) compilare un secondo kernel "con moduli" (supporto chiavette USB, etc) e creare una directory tree con kernel e moduli ed un /sbin/init (o equivalente) compilato in modo statico che si limiti a dire "Hello World"; tentare il boot da memorycard e vedere come se la cava

4) compilare uClibc (ha bisogno dei kernel header files) ed uClibc++ e inserirli nell'alberatura

5) tentare il boot con quel /sbin/init "helloworld" stavolta compilato dinamicamente (assicurarsi cioè che uClibc ed uClibc++ funzionano)

6) compilare Busybox, installarlo sulla memory card e verificare di avere un Linux minimale completo, "bootabile" e su cui poter inserire software scritti di proposito.

Per semplicità, non utilizzare una ramdisk al boot - non sto mica creando una distribuzione che faccia concorrenza a Ubuntu (né sto creando un'altra "validation")...

Fino al punto 6 non avrò fatto altro che ripetere il lavoro di creazione di una minidistribuzione per la validazione, con la differenza che in futuro potrò aggiornarmi autonomamente kernel, librerie uClibc ed eseguibili Busybox.

7) eventualmente, ricompilare Ruby e qualcos'altro di altrettanto indispensabile (quel complicato Perl? quella ciofeca di Python?) ed installarlo nel filesystem (sempre tenendo d'occhio il limite di 256 mega).

8) dividere i file-system in modo da avere una parte sempre montata read-only ed una parte "scrivibile" montata o su tmpfs (cioè su RAM) oppure su memory-card: infatti è bene non stressare inutilmente la NAND-Flash con swap, var, tmp.

9) aggiornare gli script al boot in modo che utilizzino ciò che trovano su memorycard (qualora la memorycard sia inserita).

Lo scopo è di avere un Linux ragionevolmente ricco entro i 256Mb RAM (anche se solo text-only; dopotutto mplayer funziona anche senza Xorg), che "reagisce" diversamente a seconda della memorycard inserita (se ci metto quella col film, visualizzarlo; se ci metto quella con gli MP3, suonarli; etc) senza bisogno di avere periferiche di input e output (tastiera, mouse, schermo - deve poter essere tutto autonomo già con la sola Beagleboard e le batterie). Idea da rifinire.

Nota: tutta la fatica dipende dalla compilazione di un kernel funzionante e ottimizzato per l'hardware della Beagleboard (non solo le ottimizzazioni OMAP, ma anche il supporto dei vari SPI, I2C etc e possibilmente anche bridge DSP, supporto accelerazione 3D, etc). Al momento infatti il supporto Beagleboard non è ancora entrato tutto nel kernel Linux ufficiale.

Una volta compilato un kernel Linux per Beagleboard che supporti tutto, portare qualsiasi altra distribuzione diventa relativamente facile (una Slackware, per esempio; per la Ubuntu già ci stanno pensando, ma una Slackware in 256Mb può entrarci, mentre una Ubuntu no), anche se ci sarà ancora da smanettare (le grosse distribuzioni hanno tutti i loro service attivi, cron, inetd, etc; presumono che la rootdirectory sia scrivibile, che ci sia qualche posto per lo swap, etc).

Nessun commento:

Posta un commento