2010-11-29

Compilazione busybox per Emtec s800h - 3

segue da Compilazione busybox per Emtec s800h - 2

L'occupazione di 1,9 GiB è derivata dal download di una serie di tarball che si possono trovare nella directory dl. Tra i tarball scaricati si trovano il gcc (al momento alla versione 4.3.5) che una volta compilato verrà utilizzato per compilare per l'architettura di destinazione, binutils che contiene i programmi necessari per assemblare e linkare (scusate i termini poco corretti), linux (alla versione 2.6.34.3).
In pratica il buildroot predispone tutto il necessario per una linux box da utilizzare per l'architettura scelta.
Per il mio scopo la maggior parte di quello che viene generato è inutile, il mio obiettivo è quello di compilare il programma busybox attivando tutte le funzionalità già presenti nel busybox rilasciato con s800h e l'aggiunta della funzionalità ftpd ovvero quella che permette di attivare il server FTP.

Busybox a prima vista mi ha dato l'impressione di andare contro i pricipi iniziali di Unix secondo cui ogni programma doveva fare poche cose ma fatte bene. Busybox sembra essere l'esatto opposto, almeno per il fatto di fare poche cose, in base alle opzioni di compilazione ne può fare veramente tante; non mi sono mai soffermato sull'elenco di quelle che chiamano applet, ma per chi volesse è disponibile sul sito ufficiale lo screenshot che riporta la lista completa ma dubito che sia aggiornata. Ad ogni modo ogni busybox compilato riporta la lista delle applet alla chiamata del programma senza opzioni. Per eseguire una delle applet abilitate al momento della compilazione si deve richiamare il programma con il primo parametro uguale al nome del comando da eseguire e di seguito i parametri e le opzioni del comando stesso, ad esempio per eseguire il normale comando "ls -l" va impartito il comando "busybox ls -l". Questo metodo per impartire i comandi penso che possa risultare scomodo a chiunque, a tal proposito la soluzione migliore è quella di creare un link simbolico avente il nome dell'applet da utilizzare che punti al file dell'eseguibile busybox; ripetendo l'operazione per tutti comandi abilitati al momento della compilazione si otterrà il risultato di avere a disposizione tutti (o quasi) i comandi più utilizzati in una linux box con tutte (o quasi) le opzioni più comuni. Tra le motivazioni che portano a scegliere di utilizzare busybox, invece di ricorrere ai singoli programmi, riesco ad evidenziarne due, la ridotta occupazione di spazio su disco da parte del file eseguibile che in sistemi embedded non è trascurabile e l'occupazione di memoria a partire dal caricamento della seconda funzionalità richiesta e questa in sistemi embedded è molto importante.
Per quanto riguarda l'occupazione su disco si potrebbe fare il calcolo della differenza di occupazione tra la dimensione di busybox e la somma delle dimensioni dei singoli programmi, già così si può notare una buona differenza, se poi si analizza il fatto che l'occupazione su disco dipende anche dalla dimensione dei blocchi del filesystem utilizzato si nota che ogni file occupa su disco la dimensione arrotondata per eccesso alla dimensione del blocco su disco, di solito almeno 4KiB.
Per quanto riguarda l'occupazione di memoria dovuta al caricamento dell'eseguibile posso essere meno chiaro in quanto l'argomento è molto ampio e non penso di riuscire ad esporlo come richiederebbe, posso cercare di semplificare dicendo che la parte eseguibile del programma (text come indicata nelle proprietà dell'eseguibile) viene caricata solo la prima volta, le restanti volte viene allocata in memoria solo la parte dati (data nelle proprietà dell'eseguibile), con un notevole risparmio di tempo e memoria.
Dopo tutta questa spiegazione posso tornare alla configurazione e compilazione di busybox.
Per configurare le funzionalità desiderate in busybox si può eseguire il comando make busybox-menuconfig che permette tramite una semplice interfaccia a carattere di abilitare e disabilitare le singole opzioni del programma, il sistema risulta essere molto comodo e ben documentato visto che per ogni opzione viene riportata anche una breve spiegazione sul significato dell'opzione; devo ammettere che ho utilizzato questo comando solo allo scopo di individuare quale fosse il file in cui sarebbe stata salvata la configurazione.
Piccola parentesi per riportare il metodo utilizzato per individuare il file modificato:
touch adesso
make busybox-menuconfig # con il menu modifico anche una sola opzione e salvo la configurazione
find . -newer adesso # trovo tutti i file modificati dopo la data di modifica del file "adesso"

Individuato il file .config dentro la directory output/build/busybox-1.17.1 sono andato a modificare a mano il file con il mio editor preferito (vi).

Nessun commento:

Posta un commento