MokoMakefile/it

From Openmoko

(Difference between revisions)
Jump to: navigation, search
(Work-arounds)
 
(11 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
==MokoMakefile==
 
==MokoMakefile==
  
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.
+
''' 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! '''
  
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 è 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.
  
MokoMakefile è sviluppato da [[User:RodWhitby|Rod Whitby]] - non è un prodotto ufficiale OpenMoko (anche se sarebbe una buona cosa sfruttarlo per uso interno). Se ci sono delle discrepanze tra le [[Building_OpenMoko_from_scratch/it|istruzioni ufficiali compilazione OpenMoko]] e le operazioni di MokoMakefile, vanno considerate corrette le istruzioni ufficiali.
+
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 [[User:RodWhitby|Rod Whitby]] - non è un prodotto ufficiale Openmoko (anche se sarebbe una buona cosa sfruttarlo per uso interno). Se ci sono delle discrepanze tra le [[Building_Openmoko_from_scratch/it|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 [[Using_QEMU_with_MokoMakefile/it|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 è [http://monotone.ca/ 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 [http://monotone.ca].
 +
 
 +
Alcune distribuzioni che preparano il sistema alla compilazione per OpenEmbedded sono elencate a questo indirizzo [http://www.openembedded.org/wiki/OEandYourDistro], ma potrebbero essere non aggiornate, incomplete e non coprire tutto ciò di cui Openmoko ha bisogno per essere costruito.
 +
 
 +
Una buona guida è la [[Building Openmoko from scratch/it#Build host prerequisites|sezione sui prerequisiti della macchina]] per la costruzione di Openmoko in [[Building Openmoko from scratch/it|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 ===
 
=== Prima di iniziare ===
Line 37: Line 58:
 
   make openmoko-devel-image
 
   make openmoko-devel-image
  
Questo creerà l'albero di directory descritto in [[Building OpenMoko from scratch/it|Creare OpenMoko da zero]], scaricherà tutto il software richiesto (dai siti giusti e le versioni aggiornate) e avvierà la compilazione dell'immagine.
+
Questo creerà l'albero di directory descritto in [[Building Openmoko from scratch/it|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.
 
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.
Line 47: Line 68:
 
   make update-makefile  
 
   make update-makefile  
  
2 - Per aggiornare la lista dei repository OpenMoko e le patch di MokoMakefile all'ultima versione:
+
2 - Per aggiornare la lista dei repository Openmoko e le patch di MokoMakefile all'ultima versione:
 
   make update
 
   make update
  
Line 79: Line 100:
  
 
===Tips===  
 
===Tips===  
*You can reduce the amount of consumed disk space significantly by adding
+
*Puoi ridurre significativamente il consumo di spazio su disco aggiungendo
 
   INHERIT += "rm_work"
 
   INHERIT += "rm_work"
in your local.conf (e.g. /home/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/<package> directory after the corresponding package builds correctly.
+
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:
*If you an encounter an error with monotone similar to the following:
+
 
   mtn: misuse: database /home/moko/OE.mtn is laid out according to an old schema
 
   mtn: misuse: database /home/moko/OE.mtn is laid out according to an old schema
Then you need to upgrade OE.mtn Use the following command while in /home/moko:
+
Allora c'è bisogno di aggiornate OE.mtn Utilizzare il seguente comando in /home/moko:
 
   # mtn --db OE.mtn db migrate
 
   # mtn --db OE.mtn db migrate
  
*If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.
+
*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>*
 
  rm sources/<package>*
 
  cd build
 
  cd build
 
  . ../setup-env
 
  . ../setup-env
 
  bitbake -crebuild <package>
 
  bitbake -crebuild <package>
after that your build might just work again.
+
dopo questi comandi la compilazione dovrebbe terminare con successo.
  
*For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.
+
*Per chi ha diverse CPU (o diversi core) questa piccola modifica sarà utile per compilare più velocemente.
Edit the local.conf and add the following lines:
+
Modifica il file local.conf aggiungendo le seguenti righe:
 
  PARALLEL_MAKE = "-j 4"
 
  PARALLEL_MAKE = "-j 4"
 
  BB_NUMBER_THREADS = "4"
 
  BB_NUMBER_THREADS = "4"
  
Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.
+
Cambia i valori PARALLEL_MAKE e BB_NUMBER_THREADS a seconda del numero di CPU della macchina.
  
*For amd64 host users you need the patch from http://bugs.openembedded.org/show_bug.cgi?id=1765 to build db3-native
+
*Per gli host amd64 è necessaria la patch http://bugs.openembedded.org/show_bug.cgi?id=1765 per la compilazione db3-nativa.
  
 
===QEMU===
 
===QEMU===
The MokoMakefile now has support for automatically building, flashing, and running [[OpenMoko under QEMU|the new Neo1973 emulator]] (which is based on QEMU).
+
MokoMakefile automatizza la compilazione, il flashing e l'esecuzione del nuovo [[Openmoko under QEMU/it|emulatore Neo1973 emulator]] (basato su QEMU).
  
Dependencies:  
+
Dipendenze:  
 
   
 
   
 
*lynx ('apt-get install lynx' in Ubuntu 7.04)
 
*lynx ('apt-get install lynx' in Ubuntu 7.04)
Line 114: Line 134:
 
*sdl-devel ('apt-get install libsdl1.2-dev in Ubuntu .704')
 
*sdl-devel ('apt-get install libsdl1.2-dev in Ubuntu .704')
  
“make qemu” will build qemu-neo1973, download the latest official OpenMoko images, flash the images into the virtual NAND flash, and run the emulator (you still need to install the makefile as mentioned above, however).
+
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).
  
Other targets are “make download-images” (to download the latest official images), “make flash-qemu-official” (to flash those images) and “make flash-qemu-local” (which will flash your latest locally built images), which can then be followed by “make run-qemu” or “make run-qemu-snapshot” to run the emulator with the most recently flashed images.
+
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.
  
Make sure you have the “lynx” and “netpbm” packages installed on your build host first.
+
Assicurarsi di avere “lynx” e “netpbm” installati nel sistema su cui si compila.
  
You're also invited to read more about how to run [[OpenMoko under QEMU]] in the article dedicated to this subject.
+
Potrebbe essere utile leggere altro sul funzionamento di [[Openmoko under QEMU/it|Openmoko sotto QEMU]] nella pagina dedicata.
  
 
===Developing with MokoMakefile===
 
===Developing with MokoMakefile===
  
To make in-tree changes and have them built and used by qemu:
+
Per compilare ed eseguire su qemu dei sorgenti modificati:
  
 
   cd /home/moko/openmoko
 
   cd /home/moko/openmoko
 
   quilt new descriptive-patch-name.patch
 
   quilt new descriptive-patch-name.patch
   quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify
+
   quilt add trunk/src/name-of-file-to-change # per ogni file che è stato modificato
 
   ...make the changes...
 
   ...make the changes...
   quilt refresh # this creates a file in /home/moko/patches/openmoko-HEAD/ and updates the quilt series file there
+
   quilt refresh # questo crea un file in /home/moko/patches/openmoko-HEAD/ e aggiorna i files quilt
  
Note: Do '''NOT''' use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!
+
Nota: '''NON''' utilizzare percorsi assoluti, quilt potrebbe provare a ottenere un file diff di /dev/null!
  
To build the changes and have them used by qemu:
+
Per compilare le modifiche e utilizzare il risultato con qemu:
  
 
   make build-qemu
 
   make build-qemu
Line 140: Line 160:
 
   make run-qemu
 
   make run-qemu
  
If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: openmoko-messages):
+
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# . ./setup-env
Line 153: Line 173:
 
   /usr/src/openmoko/openmoko# bitbake openmoko-messages
 
   /usr/src/openmoko/openmoko# bitbake openmoko-messages
  
Then continue with MokoMakefile usage.
+
Poi continuare con MokoMakefile.
  
If you want to add an application to your openmoko distribution, do this:
+
Se vuoi aggiungere una applicazione alla tua distribuzione Openmoko:
All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project.
+
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.
First, create a directory that will correspond to your package and edit a '''.bb''' file in there:
+
Prima di tutto, creare una directory che corrisponderà al package e modificare un file '''.bb''':
 
   /usr/src/openmoko# cd openmoko/
 
   /usr/src/openmoko# cd openmoko/
 
   /usr/src/openmoko/openmoko# quilt new mycoolpackage.patch
 
   /usr/src/openmoko/openmoko# quilt new mycoolpackage.patch
Line 164: Line 184:
 
   /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb
 
   /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/mycoolpackage/mycoolpackage_1.bb
  
The file should have the following content:
+
Il file dovrebbe avere il seguente contenuto:
 
   DESCRIPTION = "This is a cool package"
 
   DESCRIPTION = "This is a cool package"
 
   SECTION = "username/mycoolpackage"
 
   SECTION = "username/mycoolpackage"
Line 173: Line 193:
 
   SRC_URI = "http://www.example.com/download/mycoolpackage-1.tar.gz"
 
   SRC_URI = "http://www.example.com/download/mycoolpackage-1.tar.gz"
  
Explanation:
+
Spiegazione:
* DESCRIPTION - Just a short text explaining the package
+
* DESCRIPTION - Una corta descrizione del pacchetto
* SECTION - I have no clue, but I'll use username/mycoolpackage for now
+
* SECTION - Non ne sono sicuro, useremo username/mycoolpackage per ora
* PV - Package Version
+
* PV - Versione
* inherit autotools - The package can be compiled by './configure && make && make install' so we tell MokoMakefile to do it this way.
+
* inherit autotools - Il pacchetto può essere compilato tramite './configure && make && make install' quindi indica a MokoMakefile di farlo in quel modo.
* SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called '''packagename-packageversion''' (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.
+
* 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à.
  
This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do
+
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
 
   /usr/src/openmoko/openmoko# quilt edit trunk/oe/packages/tasks/task-openmoko.bb
Here, increase the value '''PR''' by one and add '''mycoolpackage \''' (with the backslash!) just before the line reading '''#  update-alternatives \'''.
+
Incrementare il valore di '''PR''' di uno e aggiungere '''mycoolpackage \''' (compreso il backslash!) prima della riga '''#  update-alternatives \'''.
  
Now run
+
Eeguire
 
   /usr/src/openmoko/openmoko# quilt refresh
 
   /usr/src/openmoko/openmoko# quilt refresh
 
   /usr/src/openmoko/openmoko# cd ..
 
   /usr/src/openmoko/openmoko# cd ..
 
   /usr/src/openmoko# make update all
 
   /usr/src/openmoko# make update all
  
And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.
+
Se tutto è andato a buon fine, dovremmo avere una immagine Openmoko pronta per il flash o l'emulazione tramite qemu.
  
 
===Testimonials===  
 
===Testimonials===  
MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as "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!", and "MokoMakefile rocks!".
+
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!".
  
Project page:
+
Pagina del progetto:
 
http://mokomakefile.projects.openmoko.org/
 
http://mokomakefile.projects.openmoko.org/
  
 
{{Languages|MokoMakefile}}
 
{{Languages|MokoMakefile}}
 +
 +
[[Category:Application Developer/it]]
 +
[[Category:System Developers/it]]

Latest revision as of 16:29, 16 September 2008

Contents

[edit] 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.

[edit] 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.

[edit] 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.

[edit] 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.

[edit] 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.

[edit] 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

[edit] 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.

[edit] 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.

[edit] 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.

[edit] 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.

[edit] 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.

[edit] 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

MokoMakefile

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.

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

  • You can reduce the amount of consumed disk space significantly by adding
  INHERIT += "rm_work"

in your local.conf (e.g. /home/moko/build/conf/local.conf). This will remove the contents of each build/tmp/work/*/<package> directory after the corresponding package builds correctly.


  • If you an encounter an error with monotone similar to the following:
  mtn: misuse: database /home/moko/OE.mtn is laid out according to an old schema

Then you need to upgrade OE.mtn Use the following command while in /home/moko:

  # mtn --db OE.mtn db migrate
  • If a certain package does not build due to corrupted download or some such try to remove the sources and rebuild it.
rm sources/<package>*
cd build
. ../setup-env
bitbake -crebuild <package>

after that your build might just work again.

  • For people with multiple CPU's (or dual-core ones) this small patch might be useful to build things faster.

Edit the local.conf and add the following lines:

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

Change the PARALLEL_MAKE and BB_NUMBER_THREADS values to something that suits better if it chokes your machine.

QEMU

The MokoMakefile now has support for automatically building, flashing, and running the new Neo1973 emulator (which is based on QEMU).

Dependencies:

  • 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')

“make qemu” will build qemu-neo1973, download the latest official OpenMoko images, flash the images into the virtual NAND flash, and run the emulator (you still need to install the makefile as mentioned above, however).

Other targets are “make download-images” (to download the latest official images), “make flash-qemu-official” (to flash those images) and “make flash-qemu-local” (which will flash your latest locally built images), which can then be followed by “make run-qemu” or “make run-qemu-snapshot” to run the emulator with the most recently flashed images.

Make sure you have the “lynx” and “netpbm” packages installed on your build host first.

You're also invited to read more about how to run OpenMoko under QEMU in the article dedicated to this subject.

Developing with MokoMakefile

To make in-tree changes and have them built and used by qemu:

 cd /home/moko/openmoko
 quilt new descriptive-patch-name.patch
 quilt add trunk/src/name-of-file-to-change # do this for every file you are about to modify
 ...make the changes...
 quilt refresh # this creates a file in /home/moko/patches/openmoko-HEAD/ and updates the quilt series file there

Note: Do NOT use absolute paths as this confuses quilt and will get you a diff of the file against /dev/null!

To build the changes and have them used by qemu:

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

If you want to modify applications instead of the openmoko toolchain, this is what you have to do (example: 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

Then continue with MokoMakefile usage.

If you want to add an application to your openmoko distribution, do this: All file edits should be done using quilt as described above. That way a patch can easily be submitted to the openmoko project. First, create a directory that will correspond to your package and edit a .bb file in there:

 /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

The file should have the following content:

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

Explanation:

  • DESCRIPTION - Just a short text explaining the package
  • SECTION - I have no clue, but I'll use username/mycoolpackage for now
  • PV - Package Version
  • inherit autotools - The package can be compiled by './configure && make && make install' so we tell MokoMakefile to do it this way.
  • SRC_URI = ... - This is the download location of the package source. It's imperative that the tar.gz contains a directory called packagename-packageversion (in this case: mycoolpackage-1) so that MokoMakefile can find it automatically or the build will fail.

This is not all. We also need to tell MokoMakfile that it needs to build and include the package in the image. To do this, do

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

Here, increase the value PR by one and add mycoolpackage \ (with the backslash!) just before the line reading # update-alternatives \.

Now run

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

And if everything's alright you should now have an OpenMoko image to flash to your phone or run in qemu as described above.

Testimonials

MokoMakefile is recommended by 4 out of 4 new developers on #openmoko, with testimonials such as "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!", and "MokoMakefile rocks!".

Project page: http://mokomakefile.projects.openmoko.org/