Résumé du processus de compilation de Firefox OS

Compiler, construire et installer Firefox OS demande du temps, une connexion Internet et de la puissance de calcul. Plusieurs obstacles peuvent poser problème en chemin. Cette page liste les différentes étapes dans leur ensemble pour aider l'utilisateur. Chacune des étapes est traitée par une page distincte, liée depuis cet article.

Note : Le processus de compilation de Firefox OS contient de nombreuses références à « B2G » ou « Boot2Gecko ». Boot2Gecko était le nom de code original du projet Firefox OS.

L'objectif de la compilation : quatre fichiers image

Le but général de la compilation est de construire quatre fichiers, appelés images, qui peuvent être copiés sur un appareil Firefox OS.

boot.img Le noyau Linux et l'image d'un système de fichiers racine (root filesystem). Ce dernier fournit un ensemble d'outils Unix de base.
system.img Le cœur de Firefox OS, avec des fragments de Gonk, la version de Gecko portée et l'exécutable b2g.
userdata.img Le profil Gecko de l'utilisateur ainsi que les applications web de Gaia pour l'appareil.
recovery.img Un noyau Linux accompagné d'une image d'un système de fichiers racine (root filesystem) et d'un outil permettant aux utilisateurs de réparer une installation défectueuse.

Une fois que ces quatre images auront été créées, elles pourront être transférées sur l'appareil.

Firefox OS est construit sur le projet Android Open Source Project (AOSP). Les outils AOSP adb et fastboot permettent d'accéder et de manipuler l'appareil de façon efficace. On notera la commande adb reboot-bootloader qui permet de redémarrer un appareil connecté à l'ordinateur et de l'arrêter à l'étape où le chargeur d'amorçage (bootloader) rentre en jeu. Ainsi, on pourra utiliser la commande fastboot flash $partition $image pour copier une image sur une des partitions de l'appareil.

L'image boot.img

L'image d'amorce (boot) boot.img combine un noyau Linux et une partition racine initiale afin de fournir un certain nombre d'outils logiciels de base et le nécessaire pour exécuter le script d'initialisation. Ce script sera copié depuis l'image vers la mémoire de l'appareil pour être utilisé efficacement par ce dernier. C'est ce qu'on appelle un ramdisk. L'image boot.img sera copiée sur la partition 'boot' de l'appareil et les contenus du ramdisk seront visibles à la racine lorsqu'on accédera au système de fichiers lors de l'exécution (par exemple lorsqu'on utilisera adb shell).

L'image de boot permet de définir les permissions de l'utilisateur administrateur (root) dans le fichier default.prop situé à la racine.

Il est aussi possible de modifier des images de boot existantes en inspectant le fichier puis en découpant ce fichier entre le noyau (kernel) et l'image du ramdisk, puis en extrayant les contenus de l'image du ramdisk, en les modifiant avant de ré-assembler l'image du ramdisk et de reconstruire un fichier boot.img fonctionnel. Voir la page Alcatel One Touch Fire Hacking (Mini) Guide (en anglais).

Les images d'amorce peuvent être testées avant d'être installées en les téléchargeant sur l'appareil depuis l'ordinateur (sideloading). L'appareil peut être démarré et on peut faire une pause au niveau du chargeur d'amorçage pour utiliser la commande fastboot boot /un/chemin/vers/boot.img sans avoir installé l'image.

L'image système

L'image système (system.img) fournit le noyau de Firefox OS :

  • Gonk : les composants de bas niveau du système d'exploitation
  • Gecko : une version portée du moteur de rendu HTML et du moteur JavaScript de Firefox
  • B2G : les outils et processus liés au système d'exploitation

Voir la page concernant la plate-forme Firefox OS, pour plus de détails sur l'architecture utilisée.

L'image système sera copiée sur la partition system et sera visible dans le répertoire /system/ lorsqu'on accédera au système de fichiers lors de l'exécution.

Note : L'image système fournit également les blobs binaires pouvant être utilisés par l'appareil, notamment le blob de la RIL (Radio Interface Layer) qui permet de contrôler les composants liés à la communication radio de l'appareil.

L'image des données utilisateur

L'image des données utilisateur (userdata.img) fournit les applications Gaia chargées lors de l'exécution.

Cette image sera copiée sur la partition userdata de l'appareil et son contenu pourra être visible depuis le répertoire /data/ lorsque le système de fichiers sera accessible. On retrouvera notamment le dossier /data/b2g/ qui contient le profil Mozilla Gecko de l'utilisateur de l'appareil et le répertoire /data/local/webapps/ qui contient les applications web à la disposition de l'appareil.

L'image de récupération

L'image de récupération/dépannage (recovery.img) contient le même noyau Linux ainsi qu'un ramdisk semblables à ceux présents sur l'image d'amorce (boot). Cependant, l'image de récupération utilise un autre script d'initialisation qui permet à l'utilisateur de pouvoir utiliser des commandes pour dépanner/récupérer l'appareil grâce aux boutons physiques de l'appareil.

Cette image sera copiée sur la partition recovery de l'appareil. Cette partition n'est pas montée dans le système de fichiers lors d'une exécution normale.

Le processus de compilation : préparation, configuration, compilation et installation

L'ensemble de la compilation et de l'installation de Firefox OS se déroule selon quatre étapes :

La préparation Récupérer les programmes utilisés lors de la compilation comme les compilateurs, les bibliothèques...
La configuration Télécharger le code source qui sera compilé et créer le fichier .configure qui définit les variables d'environnement nécessaires et d'autres valeurs utilisées lors de la compilation.
La compilation Compiler le profil Gecko de l'utilisateur ainsi que les applications Gaia pour l'appareil
L'installation Installer les fichiers sur l'appareil.

 

La préparation

La préparation initiale permet de s'assurer que l'ordinateur possède bien l'ensemble des outils logiciels nécessaires à la compilation (tels que les compilateurs et les outils de compilation).

Cette étape peut être réalisée manuellement ou grâce à un script. Vous pourrez trouver les informations nécessaires sur la page concernant les prérequis pour construire Firefox OS.

Note : Sur les systèmes UNIX (ou proches d'UNIX), il est possible de vérifier la présence d'un logiciel en utilisant la commande which qui prend en argument le nom du programme.

La configuration

Le processus de compilation commence au moment où on obtient un exemplaire du code logiciel de Firefox OS (alias B2G), généralement en créant un clone git du projet B2G. Cette étape permettra de récupérer l'ensemble du code source à compiler et de créer un fichier .config qui permet de définir les variables liées à la compilation.

Cette étape est réalisée grâce au script config.sh. Vous pourrez trouver les informations nécessaires sur la page de préparation à la première compilation de B2G.

Le script de configuration prendra en argument le type d'appareil pour lequel compiler. Les noms utilisés ici sont des noms de code liés à l'architecture du processeur (CPU) plutôt que des noms d'appareils spécifiques. Il n'y a, pour le moment, aucun moyen de déterminer quelle version fonctionne sur quel appareil physique. La liste de ces noms de code peut être trouvée ici.

Ce sera également lors de l'étape de configuration qu'on utilisera l'outil repo du projet Android Open Source Project pour télécharger (ou mettre à jour) une copie du code utilisé lors de la compilation. Cet exemplaire sera stocké dans le répertoire .repo/projects. Cette partie de la configuration nécessitera de télécharger beaucoup de données et pourra prendre beaucoup de temps. Cela explique en grande partie pourquoi la configuration, dans son ensemble, prend beaucoup de temps.

La compilation

L'étape de compilation consiste à compiler le code source mis à disposition pour produire les images nécessaires.

Pour exécuter cette étape, on lancera le script build.sh. Vous pourrez trouver toutes les informations nécessaires sur la page dédiée à la compilation de Firefox OS.

Par défaut, l'étape de compilation est effectuée en une fois, de la compilation du projet Android AOSP, en passant par celle du noyau Linux jusqu'aux applications de Gaia. Si jamais la compilation échoue, il peut être compliqué de déterminer laquelle de ces étapes est en cause.

Pour cette raison, il est possible de ne compiler que certaines parties de la pile logicielle concernant Firefox. Ainsi, on peut compiler uniquement Gecko en appelant le script avec le paramètre gecko. On peut faire de même avec le paramètre gaia. Ces composants pourront ensuite être installés séparément sur l'appareil (voir ci-après).

On peut également compiler les fichiers pour créer les images une à une. L'image système, par exemple, peut être construite grâce à la commande ./build.sh out/platform/$target/system.img, avec le paramètre $target étant celui utilisé lors de la configuration.

L'installation

L'installation consiste à envoyer le code compilé sur l'appareil. Cette étape est exécutée grâce au script flash.sh.

Il est possible d'installer (ou de réinstaller) uniquement certains fragments en utilisant un paramètre du script. On peut par exemple installer uniquement Gaia grâce à la commande ./flash.sh gaia.

Étiquettes et contributeurs liés au document

Étiquettes : 
 Contributeurs à cette page : jwhitlock, BiiO, Leonarf, SphinxKnight, Goofy
 Dernière mise à jour par : jwhitlock,