Compiler Firefox OS

Vous vous êtes peut-être rendu compte que le nombre de mes posts a fortement diminué. La vie de famille, professionnelle, passe avant le blog. Cela dit, j'essaie en parallèle de compiler FirefoxOS pour un Xperia Kyno (Néo, hallon appelait le comme vous voulez). J'ai essayé plusieurs tutoriaux trouvés sur  les forum XDA. Celui qui a fonctionné a été celui ci-dessous. Il s'agit d'une expérience pour que le plus grand nombre puisse s'essayer à la compilation assistée.

 

J'avais bien essayé le portage avec la documentation de Mozilla. Cela ressemble plus à une chasse au trésor pour rassembler tous les éléments (fichier *.mk en tête) nécessaire à la compilation. J'ai donc céder à la facilité et repris le travail d'autre développeur plus malin que moi.

Le post d'origine du tuto est ici http://forum.xda-developers.com/showthread.php?t=2354392 qui est lui même la copie du travail d'un japonais. Il s'agit de la V1-Train de Firefox OS. Autrement dit la toute première version, en clair une alpha.

 

Pour une compilation de FirefoxOS V2.0 Il faudra trouver un autre tuto où s'inspirer ce celui là.

 

Le but de ce tuto est de se mettre le pied à l'étrier et donc se familiariser un peu avec FirefoxOS et sa compilation.

Je vous rappelle que pour tout cela vous devez avoir un téléphone dont le bootloader a été cassé.

Le pré-requis pour Ubuntu 14.04

Je suis sous Ubuntu 14.04. Pour les pré-requis, il faut suivre les recommandations de Mozilla que vous trouverez ici : https://developer.mozilla.org/en-US/Firefox_OS/Firefox_OS_build_prerequisites#Ubuntu_14.04

Pour les avancées vers l'objectif initial, vous pouvez me suivre sur diaspora (Cette adresse e-mail est protégée contre les robots spammeurs. Vous devez activer le JavaScript pour la visualiser.) depuis le pod http://framasphere.org .

 

Le tutorial original date de juillet 2013 (donc un peu). Il est basé sur une reprise d'une Cyanogen 4.0.4 pour urushi (Xperia Ray) dernière cyanogen stable pour cet appareil. Car aussi étrange que cela paraisse, Firefox OS s'appuie sur le kernel d'Android.

 

ATTENTION il est important de tout faire dans la même instance (fenêtre) de TERMINAL à cause des nombreux "export" Linux. Prévoir également 30 Go de libre sur votre disque dur. Il y a énormément de sources à bouger, sans compter les compilations.

La préparation

La première étape est de récupérer la version modifié de B2G (peut-être pas la meilleur idée du monde mais ça marche)

cd ~/b2g_work 
export B2G_WORK=`pwd`
export DEVICE=urushi
git clone https://github.com/neuralassembly/B2JC.git B2G
cd B2G 

Après on choisi ce que l'on veut configurer (pour nous Xperia Ray - urushi)

./config.sh urushi 

La commande ci dessus va récupérer tout un tas de sources un peu partout sur le web. Pour l'essentiel, les sources vont être récupéré chez Mozilla et Cyanogen. Cette étape est très longue car il y a quelques Giga de donnée à récupérer.

 

Maintenant on va créer un backup du téléphone à partir des sources Cyanogen

mkdir $B2G_WORK/B2G/backup-$DEVICE
cd $B2G_WORK/B2G/backup-$DEVICE

 On va récupérer la version d'Android pour Xperia Ray, il s'agit ici d'une Cyanogen 9.10 urushi. C'est la dernière stable chez Cyanogen pour le Xperia Ray.

wget http://download.cyanogenmod.com/get/jenkins/7098/cm-9.1.0-urushi.zip
unzip cm-9.1.0-$DEVICE.zip
cd $B2G_WORK/B2G/device/semc/$DEVICE/ ./extract-files.sh 

Normalement cette étape ci-dessus exige que le téléphone soit branché à l'ordinateur. L'auteur du tuto a modifié le script d'extraction pour prendre depuis l'archive. Mine de rien c'est un gain de temps non négligeable et permet de tester d'autres configurations sans forcément avoir le mobile sous la main.

 

Dans la version originale, il existe 2 options pour les téléphones japonais je ne les ai pas reporté ici, mais je les ai ajouté lors de mon test de compilation.

 

Maintenant on va patcher Gonk et Gaia. Je ne sais pas si ces patchs sont toujours nécessaires. Je n'ai pas regarder non plus de quoi il en retournait.

cd $B2G_WORK/B2G/gaia/build
wget https://dl.dropboxusercontent.com/u/69652790/patch/b2g-webapp-zip.patch
patch < b2g-webapp-zip.patch

cd $B2G_WORK/B2G/gecko/hal/gonk/
wget https://dl.dropboxusercontent.com/u/69652790/patch/b2g-GonkHal.patch
patch < b2g-GonkHal.patch
 

Maintenant, on va définir quelques variables systèmes pour la compilation. Si vous reprenez le travail après avoir éteint votre terminal, il vous sera nécessaire de refaire cette étape. (penser également à définir DEVICE et B2G_WORK comme au début de ce tutorial).

 

 

export LOCALE_BASEDIR=$B2G_WORK/B2G/multilocale/gaia-l10n
export LOCALES_FILE=$B2G_WORK/B2G/multilocale/languages-japan.json
export PATH="$PATH:$B2G_WORK/B2G/multilocale/compare-locales/scripts"
export PYTHONPATH="$B2G_WORK/B2G/multilocale/compare-locales/lib"
export MOZILLA_OFFICIAL=1
export GAIA_DEV_PIXELS_PER_PX=2
 

 On va passer à la compilation du noyau du système.

cd $B2G_WORK
git clone https://github.com/CyanogenMod/semc-kernel-msm7x30 -b ics
cd semc-kernel-msm7x30
export ARCH=arm
export CROSS_COMPILE=$B2G_WORK/B2G/prebuilt/linux-x86/toolchain/arm-eabi-4.4.3/bin/arm-eabi-
make semc\_$DEVICE\_defconfig
make -j16
cp `find drivers net -name "*.ko"` $B2G_WORK/B2G/device/semc/$DEVICE/
cp arch/arm/boot/zImage $B2G_WORK/B2G/device/semc/$DEVICE/kernel

 Petite explication des lignes ci-dessus.

 

On va récupérer les sources du noyau pour un processeurs msm7x30 de la branche ics (Ice Cream Sandwich) depuis les dépôts de cyanogen. Ensuite on donne 2 directives pour la compilation (les export), on fabrique le fichier de .config avec le make semc_... ,on reconstruit le noyau. On fini par le copier là où il doit se trouver à la fin (les cp).

 

xulrunner problème

Une petite modification de mon cru pour faire passer la compilation de Gaia. Il faut remplacer les sources de xulrunner. Le Makefile de Gaia est pour le moins étrange. Il a décidé que j'étais en i386 alors que lorsque je lance la commande uname -m je suis en x86_64. Je ne sais pas d'où vient se problème et ça fait planter la compilation.

 

Pour cela on va chercher le sdk qui va bien ici =>  http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/latest/sdk/

 

Dans mon cas il s'agit du xulrunner-32.0.3.en-US.linux-x86_64.sdk.tar.bz2 et le décompresser dans le répertoire suivant

cd $B2G_WORK/B2G/gaia/xulrunner-sdk/bin/xulrunner
wget http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/latest/sdk/xulrunner-32.0.3.en-US.linux-x86_64.sdk.tar.bz2 tar xjf xulrunner-32.0.3.en-US.linux-x86_64.sdk.tar.bz2

Autre solution pour xulrunner changer le fichier B2G.gaia/.xulrunner-url  Remplacer l'url présente par

http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/latest/sdk/xulrunner-32.0.3.en-US.linux-x86_64.sdk.tar.bz2

Dans le fichier $B2G_WORK/B2G/gaia/tools/xpcwindow/MakeFile et $B2G_WORK/B2G/gaia/Makefile Changer la valeur pour que la ligne devienne : XULRUNNER_SDK_URL=http://ftp.mozilla.org/pub/mozilla.org/xulrunner/releases/latest/sdk/xulrunner-32.0.3.en-US.

 On va s'éviter la compilation des tests (n'a pas vraiment fonctionné dans mon cas).

export PRODUCTION=1
export GAIA_APP_TARGET=production

Problème avec la radiofm

Lors d'une compilation j'ai eu une erreur sur la fmradio

2 solutions :

Soit virer le répertoire $B2G_WORK/B2G/framework/base/fmradio

Soit ajouter au manisfest $B2G_WORK/B2G/.repo/manifests/urushi.xml la ligne suivante (non testé) et probablement relancer le ./config.sh

  <project path="hardware/ti/fmradio" name="android_hardware_ti_fmradio" remote="cm" revision="ics" />

 

La compilation

Voilà normalement tout est près pour lancer la commande qui va prendre une demi-journée pour certain (en fait pour moi le config.sh est beaucoup plus long)

 cd $B2G_WORK/B2G
./build.sh -j1 otapackage

 Si vous devez relancer une compilation il faudra effacer quelques répertoires

rm -rf objdir-gecko
rm -rf out

Si tout c'est bien passé dans le répertoire vous devez avoir une fichier out/targe /product /urushi/full_urushi-ota-eng.username.zip-ray  (pour moi ça donne full_urushi-ota-eng.jbaptiste.zip)
Si par hasard ça c'est mal passé vous pouvez enlever otapackage dans ce cas il va falloir envoyer les *.img un par un au terminal.

La compil plante

Si ça plante parce que c'est un peu la loose, (ça plante souvent les premières fois) vous pouvez lancer les commandes suivantes les unes à la suite des autres.

./build.sh gaia -j1
./build.sh gecko -j1
./build.sh -j1
./build.sh -j1 otapackage

 JE ME SUIS ARRETE Là, la suite est donnée pour les plus téméraires

L'envoi vers le smartphone

Pour le Xperia Neo (Kyno en Français ou son petit code hallon) la bonne nouvelle c'est que le Manifest est simple à changer. Il diffère d'une ligne par rapport à celui du xperia Ray. En revanche, il va falloir récupérer les .mk et là c'est une autre histoire.

 

Maintenant la touche finale l'envoi vers le smartphone de l'archive et surtout du boot.img

 

Parce qu'il n'est jamais trop tard, il aurait fallu déjà avoir installé fastboot, pour envoyer tout ce qu'il va bien vers le smartphone.

sudo apt-get install android-tools-adb android-tools-fastboot
adb start-server
adb devices -l 


 La dernière commande doit vous afficher votre terminal. Si par hasard, il est écrit que vous n'avez pas de droit dessus (style root). Il va falloir modifier quelques petites choses au niveau de la configuration Linux (je vous passerais ça plutard).

 

Je vous conseille d'envoyer le fichier zip qui contient tout ce qui va bien (gaia etc ) avec la commande suivante.

 adb push full_urushi-ota-eng.jbaptiste.zip /sdcard

Il va falloir le démarrer en mode fastboot. Pour cela, éteindre l'Xperia Ray, Appuyer sur Volume + puis tout en maintenant la touche (volume +) branchez le cable USB. Normalement, vous devez avoir une petite led bleu allumée.

 

refaire un adb devices -l pour controler la présence du téléphone puis envoyé le fichier boot.img (être dans le même répertoire que le fichier)

 Fastboot flash boot boot.img

 Maintenant il faut démarrer le téléphone en mode recovery.

 

Démarré le téléphone, et appuyé sur volume + une fois, lorsque la LED s'éclaire ou change de couleur.

 

Ensuite, il faut aller dans le menu install from a Zip (avec volume + et - pour monté descendre, et home pour valider). choisir full_urushi-ota-eng.jbaptiste.zip valider, choisir yes, valider. Flipper un moment le temps que le zip soit mis en place.

Appuyer sur home pour revenir, puis reboot

 

La flipper un long moment pour savoir si ça fonctionne.

 

 Pour les plus fous d'entre nous je mets à disposition les résultats de la compilation. JE VOUS AVERTIR QUE JE NE SUIS PAS RESPONSABLE SI VOUS BLOQUEZ votre téléphone. Je n'ai pas testé sur mon téléphone. Je n'ai aucune idée si ça fonctionne !!!

Pour le zip : http://j.baptiste.free.fr/geekmps/firefoxos/full_urushi-ota-eng.jbaptiste.zip

Pour le boot.img : http://j.baptiste.free.fr/geekmps/firefoxos/boot.img

 

Comments powered by CComment

We use cookies

Nous utilisons des cookies sur notre site web. Certains d’entre eux sont essentiels au fonctionnement du site et d’autres nous aident à améliorer ce site et l’expérience utilisateur (cookies traceurs). Vous pouvez décider vous-même si vous autorisez ou non ces cookies. Merci de noter que, si vous les rejetez, vous risquez de ne pas pouvoir utiliser l’ensemble des fonctionnalités du site.