Familiar Linux from scratch per a HTC BlueAngel
En el aquest post explicava com arrancar una imatge de Familiar Linux sobre dispositius HTC BlueAngel, la imatge concretament és una imatge de GPE que hi ha a gnulinux.biz, del 11 de Desembre de 2005. Gràcies a l’ajuda de lkcl al #htc-blueangel del IRC (irc.freenode.net) he aconseguit entendre com funciona tot aquest tinglado de OpenEmbedded per construir una imatge desde cero.
OpenEmbedded és un entorn de desenvolupament que permet cross-compilar un Linux (bootloader, kernel i aplicacions) a mida per a una gran varietat de dispositius sobre diferents arquitectures de hardware (ipaq’s, zaurus, wrt54g, nslu2, pvr’s…).
Les instruccions per a crear l’entorn de desenvolupament sobre la nostra màquina estàn a la pàgina GettingStarted de OE, i és amb això amb el que m’he basat per a fer aquest post.
El SCM que utilitza OpenEmbedded és monotone, és fàcil acostumar-te a usar-lo si has tocat abans algún sistema de control de versions com CVS o Subversion.
La utilitat per a la gestió de paquets de OpenEmbedded és BitBake, funciona de manera similar a emerge ja que és una utilitat derivada del portage de Gentoo. Aquí podeu veure el manual de BitBake.
Un cop feta aquesta petita introducció, anem a veure com preparar un sistema Gentoo GNU/Linux amb OpenEmbedded per poder crear la nostra imatge per a HTC Blueangel. Els passos son vàlids per a qualsevol altra distribució cambiant emerge per les comandes adeqüades, i per a qualsevol altre dispositiu que utilitzi OpenEmbedded, no ha de ser necessariament una HTC BlueAngel, sino que podría ser perfectament un Linksys wrt54g.
Comencem instal·lant BitBake, monotone i psyco (un mòdul de python que accelera la execució del codi):
# emerge bitbake monotone psyco
Ara creem la estructura de directoris necessaria, jo he utilitzat com a base /stuff
:
# mkdir /stuff
Tot el procés s’ha de poder fer com a usuari, així que és millor no treballar mai amb BitBake com a root perqué podem fer malbé el sistema, per tant canviem els permisos del /stuff
per a l’usuari que utilitzarem per generar el nostre entorn de compilació.
# chown pau:users /stuff # su - pau $ cd /stuff $ mkdir build
Seguidament baixem un daily snapshot de la base de dades de OpenEmbedded, això ens estalviarà molt de temps, ja que tot el repositori ocupa bastant i el monotone és molt lent:
$ wget [http://ewi546.ewi.utwente.nl/OE/OE.db.bz2](http://ewi546.ewi.utwente.nl/OE/OE.db.bz2)$ bzip2 -d OE.db.bz2 $ mv OE.db oe.db
Sincronitzem la bbdd local amb l’arbre existent al servidor per als 3 repositoris, el oz354fam083 conté la branca de desenvolupament de OpenZaurus 3.5.4 i familiar 0.83.
$ monotone --db=/stuff/oe.db pull ewi546.ewi.utwente.nl org.openembedded.{dreambox,dev,oz354fam083}
Creem la estructura de directoris local per als tres repositoris:
$ monotone --db=/stuff/oe.db checkout --branch=org.openembedded.{dreambox,dev,oz354fam083}
Creem la configuració local:
$ mkdir -p /stuff/build/conf $ cd /stuff/build $ wget [http://hands.com/~lkcl/blueangel/local.conf](http://hands.com/~lkcl/blueangel/local.conf)(canviar /home/lkcl/ per /stuff)
Per alguna raó misteriosa el bitbake de Gentoo peta, finalment jo he utilitzat la versió de bitbake de CVS:
# cd /stuff/ # svn co svn://svn.berlios.de/bitbake/trunk/bitbake
Així que per executar bitbake, primer cal fer això:
export PATH="/stuff/bitbake/bin:$PATH:/usr/local/arm/3.4.1/bin" export BBPATH="/stuff/build:/stuff/org.openembedded.dev"
Al fitxer /stuff/org.openembedded.dev/conf/machine/blueangel.conf
s’ha d’afegir aixó, sino intenta compilar un kernel que no toca:
PREFERRED\_PROVIDER\_kernel = "xanadux-ba-2.6"
Per mantenir els repositoris al dia, periòdicament haurem d’anar executant aquestes comandes:
monotone --db=/stuff/oe.db pull ewi546.ewi.utwente.nl org.openembedded.dev monotone --db=/stuff/oe.db pull ewi546.ewi.utwente.nl org.openembedded.dreambox monotone --db=/stuff/oe.db pull ewi546.ewi.utwente.nl org.openembedded.oz354fam083 cd /stuff/org.openembedded.dev && monotone update cd /stuff/org.openembedded.dreambox && monotone update cd /stuff/org.openembedded.oz354fam083 && monotone update
Finalment ja tenim l’entorn preparat per construir la imatge per a BlueAngel. Si volem una imatge de GPE farem:
# bitbake gpe-image
Si volem una imatge de OPIE:
# bitbake opie-image
Si volem cross-compilar una sóla aplicació (generar l’ipk), per exemple del gomunicator:
# bitbake gomunicator
Algunes cosetes a tenir en compte:
- La compilació de tot l’entorn i les imatges tardarà unes quantes hores i necessita uns 5Gb d’espai a disc.
- La imatge resultant estarà al directori
tmp/deploy/images
. - Els paquets ipk individuals per a cada aplicació estaràn al directori
tmp/deploy/ipk
. - El crosscompilador gcc estarà al directori
tmp/cross/bin
.
Espero que us sigui util! :)