MokoMakefile/it

From Openmoko

Jump to: navigation, search

Contents

MokoMakefile

Attenzione, questa traduzione non e' molto aggiornata, fare riferimento alla versione inglese alla pagina http://wiki.openmoko.org/wiki/MokoMakefile. Questo consiglio vale quasi sempre!

MokoMakefile è un metodo completamente automatizzato per la configurazione dell'ambiente di sviluppo Openmoko, uno strumento inestimabile che aiuta i nuovi sviluppatori ad ottenere un ambiente con le stesse configurazioni di quelli già presenti. Permette di ottenere la stessa ripetibilità nella compilazione e manutenzione dell'ambiente che OpenEmbedded introduce nell'attuale software embedded.

Nota che MokoMakefile *non* sostituisce bitbake, svn, monotone, openembedded, qmake e null'altro. Costituisce un wrapper attorno ad essi che facilita la configurazione e la manutenzione di un ambiente di sviluppo che rispecchia le istruzioni pubblicate da Openmoko. MokoMakefile necessita circa 7 GB di spazio disponibile.

MokoMakefile è sviluppato da Rod Whitby - non è un prodotto ufficiale Openmoko (anche se sarebbe una buona cosa sfruttarlo per uso interno). Se ci sono delle discrepanze tra le istruzioni ufficiali compilazione Openmoko e le operazioni di MokoMakefile, vanno considerate corrette le istruzioni ufficiali.

Il MokoMakeFIle è capace di costruire le immagini sia di OM-2007.1 sia di OM-2007.2. Il core team ha scelto il default, ma è possibile scegliere l'uno o l'altro in cima al MakeFile.

MokoMakeFile costruisce anche l'emulatore del Neo1973 basato su Qemu, come parte del suo processo, ed ha come obiettivi l'installazione delle immagini di Openmoko e la loro esecuzione. Questi comandi possono essere anche usati senza scaricare e costruire la stessa distribuzione OpenEmbedded Openmoko. Questa parte è descritta in Usare QEMU con MokoMakeFile.

Requisiti per costruire Openmoko

Indipendentemente da qualsiasi MokoMakeFile o da qualsiasi processo manuale per mettere a punto l'ambiente Openmoko, ci sono molti prerequisiti che dovrebbero essere soddisfatti prima di cominciare la costruzione:

  • RAM: la macchina che ospiterà la costruzione (build host) dovrebbe avere almeno 512 Mb di RAM, ed uno stesso ammontare di swap. Alcuni pacchetti costruiti da Openmoko, come busybox sono costruiti compilando tutti i files sorgente in un solo file binario, e questo causa la crescita del processo di gcc fino a 300 Mb, e nessuna parte della memoria occupata dovrebbe essere in swap perchè il tutto finisca in tempi ragionevoli. Per quanto riguarda busybox, può essere disattivata, ma ciò significherebbe che busybox non sarà ottimizzata per gcc.
  • Spazio su disco: occorrono almeno 12 Gb di spazio disponibile su disco perchè la costruzione di Openmoko vada a buon fine (vedere sotto un consiglio per ridurre la quantità di spazio richiesto).
  • Tempo: la costruzione iniziale richiede almeno 5 ore (su un Core2Duo 2 GHz senza ottimizzazione per il multiprocessore) ed può richiedere alcuni giorni per le macchine lente.

Software richiesto

Il sistema di controllo della versione utilizzato da OpenEmbedded è monotone, e non è scaricato ed installato dal MokoMakeFile. Se la tua distribuzione non è provvista di tale programma, è possibile scaricarlo ed installarlo come binario statico da [1].

Alcune distribuzioni che preparano il sistema alla compilazione per OpenEmbedded sono elencate a questo indirizzo [2], ma potrebbero essere non aggiornate, incomplete e non coprire tutto ciò di cui Openmoko ha bisogno per essere costruito.

Una buona guida è la sezione sui prerequisiti della macchina per la costruzione di Openmoko in Costruire Openmoko da zero.

Se si dimentica qualcosa di cui OE ha bisogno per la sua costruzione, OE la richiederà velocemente durante la costruzione stessa, ma non controlla le dipendenze, motivo per cui si dovrà o installare le dipendenze prima di cominciare il build, oppure installarle dopo il fallimento del build. Openmoko continuerà il build dal punto in cui si era interrotto, quando il build verrà ripreso dopo l'installazione delle dipendenze mancanti.

Prima di iniziare

Controlla che /bin/sh (ls -l /bin/sh) sia linkato a bash. L'utilizzo di dash potrebbe causare problemi, soprattutto per le installazioni standard di Ubuntu 7.04 (almeno quando installato da Live CD). Se /bin/sh punta a /bin/dash, correggilo (da root):

ln -sf /bin/bash /bin/sh

Se hai già compilato tramite dash come shell, è probabile che la compilazione perl sia corrotta. Un sintomo è che la compilazione termina con un errore 'Unterminated quote string', oppure con 'You haven't done a "make depend" yet!'. Se si ottengono questi errori, eseguire:

make clean-package-perl
make clean-package-perl-native

e ricompilare.

Se qualcos'altro va storto, semplicemente rimuovere (rm -rf) le directory work e stamps di perl:

rm -rf build/tmp/work/i686-linux/perl-native-5.8.7-r3 
rm -f  build/tmp/stamps/i686-linux/perl*

MokoMakefile ha delle patch che potrebbero essere compilate correttamente anche con dash.

Installazione

1 - Assicurarsi che l'host su cui si vuole compilare soddisfi quanto riportato qui:

  http://www.openembedded.org/wiki/OEandYourDistro

2 - Creare la directory $OMDIR:

  mkdir /home/moko ; cd /home/moko

3 - Ottenere MokoMakefile:

  wget http://www.rwhitby.net/files/openmoko/Makefile

4 - Configurare l'ambiente:

  make setup

5 - Avviare la compilazione.

Prima di avviare una lunga compilazione, controllare nella sezione Tips come utilizzare make sui multicore. Potreste dover modificare il file build/conf/local.conf a seconda dell'ambiente destinatario (emulazione/chroot):

  make openmoko-devel-image

Questo creerà l'albero di directory descritto in Creare Openmoko da zero, scaricherà tutto il software richiesto (dai siti giusti e le versioni aggiornate) e avvierà la compilazione dell'immagine.

Una volta fatto, potrete scegliere se continuare ad usare MokoMakefile per le compilazioni successive, oppure utilizzare manualmente bitbake all'interno della directory di compilazione. La scelta è vostra.

Aggiornare l'ambiente

I seguenti comandi sono utili per la manutenzione dell'ambiente di compilazione.

1 - Per aggiornare MokoMakefile all'utlima versione:

  make update-makefile 

2 - Per aggiornare la lista dei repository Openmoko e le patch di MokoMakefile all'ultima versione:

  make update

3 - Per assicurarsi che le ultime modifiche alla struttura delle directory siano applicate:

  make setup 

Un metodo veloce per ricompilare una nuova immagine con gli ultimi aggiornamenti:

  make update-makefile && make update setup openmoko-devel-image

Segnalare problemi

Prima di tutto, assicurarsi che il problema sia riproducibile eseguendo

make update-makefile ; make update ; make setup

poi

make clean-package-<foo>

(dove <foo> va sostituito con il nome del pacchetto che dà errore)

poi eseguire

make all

Se ottieni l'errore per tre volte consecutive dopo l'esecuzione di questa sequenza di comandi per tre volte, allora sentiti libero di segnalare il problema a rwhitby su #openmoko IRC.

Work-arounds

I work-arounds sui problemi temporanei o isolati andrebbero aggiunti alla Discussion page associata a questa pagina. Nel momento in cui saranno risolti, verranno rimossi dalla pagina.

Tips

  • Puoi ridurre significativamente il consumo di spazio su disco aggiungendo
  INHERIT += "rm_work"

al file local.conf (e.g. /home/moko/build/conf/local.conf). Questo rimuoverà il contenuto di ogni directory build/tmp/work/*/<package> dopo la compilazione del package corrispondente.

  • Se si ottiene un errore simile al seguente:
  mtn: misuse: database /home/moko/OE.mtn is laid out according to an old schema

Allora c'è bisogno di aggiornate OE.mtn Utilizzare il seguente comando in /home/moko:

  # mtn --db OE.mtn db migrate
  • Se un determinato package non viene compilato a causa di un download corrotto o per motivi simili, prova a rimuovere i sorgenti e ricompilarlo.
rm sources/<package>*
cd build
. ../setup-env
bitbake -crebuild <package>

dopo questi comandi la compilazione dovrebbe terminare con successo.

  • Per chi ha diverse CPU (o diversi core) questa piccola modifica sarà utile per compilare più velocemente.

Modifica il file local.conf aggiungendo le seguenti righe:

PARALLEL_MAKE = "-j 4"
BB_NUMBER_THREADS = "4"

Cambia i valori PARALLEL_MAKE e BB_NUMBER_THREADS a seconda del numero di CPU della macchina.

QEMU

MokoMakefile automatizza la compilazione, il flashing e l'esecuzione del nuovo emulatore Neo1973 emulator (basato su QEMU).

Dipendenze:

  • lynx ('apt-get install lynx' in Ubuntu 7.04)
  • netpbm ('apt-get install netpbm' in Ubuntu 7.04)
  • sdl-devel ('apt-get install libsdl1.2-dev in Ubuntu .704')

Il comando “make qemu” compila qemu-neo1973, scarica le ultima immagini ufficiali Openmoko, esegue il flash delle immagini sulla memoria virtuale ed esegue l'emulatore (c'è ancora bisogno di installare il makefile come descritto precedentemente).

Altri target sono “make download-images” (per scaricare le ultime immagini ufficiali), “make flash-qemu-official” (flash delle immagini) e “make flash-qemu-local” (flash dell'ultima immagine compilata in locale), che possono essere seguite da “make run-qemu” o “make run-qemu-snapshot” per eseguire l'emulatore.

Assicurarsi di avere “lynx” e “netpbm” installati nel sistema su cui si compila.

Potrebbe essere utile leggere altro sul funzionamento di Openmoko sotto QEMU nella pagina dedicata.

Developing with MokoMakefile

Per compilare ed eseguire su qemu dei sorgenti modificati:

 cd /home/moko/openmoko
 quilt new descriptive-patch-name.patch
 quilt add trunk/src/name-of-file-to-change # per ogni file che è stato modificato
 ...make the changes...
 quilt refresh # questo crea un file in /home/moko/patches/openmoko-HEAD/ e aggiorna i files quilt

Nota: NON utilizzare percorsi assoluti, quilt potrebbe provare a ottenere un file diff di /dev/null!

Per compilare le modifiche e utilizzare il risultato con qemu:

 make build-qemu
 make flash-qemu-local
 make run-qemu

Se le modifiche vengono apportate alle applicazioni e non a Openmoko, questo è quello che va fatto (esempio: openmoko-messages):

 /usr/src/openmoko# . ./setup-env
 /usr/src/openmoko# cd openmoko/
 /usr/src/openmoko/openmoko# bitbake -c unpack openmoko-messages
 /usr/src/openmoko/openmoko# cd \
 ../build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages/
 /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \
 vim src/detail-area.c
 /usr/src/openmoko/build/tmp/work/armv4t-linux/openmoko-messages-0.0.1+svnnow-r2_2276/openmoko-messages# \
 cd -
 /usr/src/openmoko/openmoko# bitbake openmoko-messages

Poi continuare con MokoMakefile.

Se vuoi aggiungere una applicazione alla tua distribuzione Openmoko: Tutte le modifiche ai files dovrebbero essere fatte utilizzando quilt, come descritto sopra. In questo modo una modifica può essere facilmente inviata a Openmoko project. Prima di tutto, creare una directory che corrisponderà al package e modificare un file .bb:

 /usr/src/openmoko# cd openmoko/
 /usr/src/openmoko/openmoko# quilt new mycoolpackage.patch
 /usr/src/openmoko/openmoko# mkdir trunk/oe/packages/mycoolpackage
 /usr/src/openmoko/openmoko# quilt add trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb
 /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb

Il file dovrebbe avere il seguente contenuto:

 DESCRIPTION = "This is a cool package"
 SECTION = "username/mycoolpackage"
 PV = "1"
 
 inherit autotools
 
 SRC_URI = "http://www.example.com/download/mycoolpackage-1.tar.gz"

Spiegazione:

  • DESCRIPTION - Una corta descrizione del pacchetto
  • SECTION - Non ne sono sicuro, useremo username/mycoolpackage per ora
  • PV - Versione
  • inherit autotools - Il pacchetto può essere compilato tramite './configure && make && make install' quindi indica a MokoMakefile di farlo in quel modo.
  • SRC_URI = ... - Percorso da cui si possono scaricare i sorgenti del pacchetto. Il tar.gz deve contenere una directory chiamata packagename-packageversion (in questo caso: mycoolpackage-1) in modo che MokoMakefile possa trovarlo automaticamente, altrimenti la compilazione fallirà.

Non è tutto. Bisogna specificare a MokoMakefile che dovrà compilare ed includere il pacchetto nell'immagine:

 /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb

Incrementare il valore di PR di uno e aggiungere mycoolpackage \ (compreso il backslash!) prima della riga # update-alternatives \.

Eeguire

 /usr/src/openmoko/openmoko# quilt refresh
 /usr/src/openmoko/openmoko# cd ..
 /usr/src/openmoko# make update all

Se tutto è andato a buon fine, dovremmo avere una immagine Openmoko pronta per il flash o l'emulazione tramite qemu.

Testimonials

MokoMakefile è raccomandato da 4 su 4 nuovi dei svilupparoti su #openmoko, con testimonianze come "For some reason last night I couldn't get my manual install of everything to work (bb complained about my bbpath I think) ... but with your makefile, it works great!", e "MokoMakefile rocks!".

Pagina del progetto: http://mokomakefile.projects.openmoko.org/

Personal tools