Firefox OS Build Prozess: Übersicht

Firefox OS zu kompilieren und zu installieren erfordert eine erhebliche Menge Zeit, Netzwerkbandbreite und Rechenleistung. Leider können auch Dinge schiefgehen. Dieser Artikel beschreibt die Ziele und Schritte des Build-Prozesses, um Benutzern während der Firefox OS Installation zu helfen. Details der einzelnen Schritte werden in den verlinkten Seiten erläutert.

Anmerkung: Der Firefox OS Build Prozess ist voll von Bezügen zu 'B2G' oder 'Boot2Gecko'. 'Boot2Gecko' war der ursprüngliche Codename des Firefox OS Projekts.

Das Ziel: vier 'image'-Dateien

Der grundsätzliche Zweck des Build Prozesses ist es vier Dateien zu erzeugen, die auf das Firefox OS-Gerät kopiert werden können.

boot.img Der Linux-Kernel und ein Image des root-Dateisystems, wobei letzteres ein Set von grundlegenden UNIX-Tools zur Verfügung stellt.
system.img Der Kern von Firefox OS inklusive einiger Teile von Gonk, der Portierung von Gecko, und dem ausführbaren Programm b2g.
userdata.img Das Gecko-Profil des Benutzers und die Gaia Web-Anwendungen für das Gerät.
recovery.img Ein Linux-Kernel und ein Image des root-Dateisystems zusammen mit einem einfachen Werkzeug, um eine defekte Installation zu reparieren.

Wenn diese 4 Images erzeugt wurden, können sie auf das Gerät übertragen werden.

Firefox OS setzt auf dem Android Open Source Project (AOSP) auf. Die AOSP-Werkzeuge adb und fastboot bieten Möglichkeiten auf ein Gerät zuzugreifen und es zu verändern. Insbesondere kann das Kommando adb reboot-bootloader ein angeschlossenes Gerät dazu bringen, neu zu starten und in einem frühen Bootloaderstadium zu pausieren, während das Kommando fastboot flash $partition $image dazu benutzt werden kann, ein Image auf das Gerät zu kopieren.

Das Boot-Image

Das Boot-Image (boot.img) ist eine Kombination aus dem Linux-Kernel und einer initialen root Partition, die die grundlegenden Werkzeuge und Initialisierungs-Skripte bereit stellt. Letzteres wird für eine effektive Nutzung durch das Gerät in den Gerätespeicher kopiert und wird deshalb als "ramdisk" (RAM-Disk) bezeichnet. Das Boot-Image wird in die boot Partition des Gerätes kopiert und die Inhalte der RAM-Disk erscheinen unter dem root-Verzeichnis, wenn zur Laufzeit auf das Geräte-Dateisystem zugegriffen wird; zum Beispiel beim Ausführen von adb shell.

Das Boot-Image richtet auch die Berechtigungen des root-Benutzers in der Datei default.prop im root-Verzeichnis ein.

Es ist auch möglich vorhandene Boot-Images zu verändern, indem man die Datei untersucht, sie in Kernel und RAM-Disk trennt, die Inhalte der RAM-Disk extrahiert, diese ändert, das RAM-Disk-Image neu zusammenstetzt und daraus eine funktionierende boot.img-Datei erzeugt. Ein Beispiel findet man auf der Alcatel One Touch Fire Hacking (Mini) Guide-Seite.

Boot-Images können vor der Installation getestet werden, indem man sie dem Gerät "unterschiebt" (sideload). Der Geräte-Start kann im Bootloader angehalten werden. Im Bootloader-Modus kann man dann mit fastboot von einem eigenen Boot-Image booten, indem man das Kommando fastboot boot /some/path/to/boot.img verwendet.

Das System-Image

Das System-image (system.img) stellt die Grundfunktionen von Firefox OS bereit:

  • Gonk: systemnahe Komponenten des Betriebssystems
  • Gecko: Laufzeitumgebung für HTML, CSS und JavaScript
  • B2G: Laufzeitkomponenten des Betriebssystems
  • Gaia: User Interface (UI) für Apps

Siehe Firefox OS platform guide für nähere Informationen zur System-Architektur.

Das System-Image wird in die system Partition des Geräts kopiert und ist im laufenden Betrieb im Verzeichnis /system/ zu sehen wenn das Dateisystem gemountet wurde.

Hinweis: Das System-Image stellt zudem vom Gerät genutze Binär-Programme zur Verfügung, insbesondere den RIL (Radio Interface Layer) für die Funk-Verbindungen.

Das User Data Image

Das User Data Image (userdata.img) enthält die Gaia Apps des Anwenders.

Das User Data Image wird in die userdata Partition des Gerätes kopiert. Der Inhalt ist im laufenden Betrieb im Verzeichnis /data/ zu sehen wenn das Dateisystem gemountet wurde. Das Verzeichnis /data/b2g/ enthält das Mozilla Gecko Profil des Anwenders, das Verzeichnis /data/local/webapps/ enthält die verfügbaren Apps.

Das Recovery Image

Das Recovery Image (recovery.img) enthält denselben Kernel und eine vergleichbare RAM-Disk wie die Boot Image Partition. Das Recovery Image verwendet allerdings ein anderes Initialisierungs-Skript, welches dem Anwender verschiedene Recovery-Funktionen zur Verfügung stellt die mit den Tasten des Gerätes bedient werden können.

Das Recovery Image wird in die recovery Partition des Gerätes kopiert, welche im Normalbetrieb nicht ins Dateisystem gemountet wird.

Der Build Prozess: setup, configure, build, install

Build Prozess und Installation von Firefox OS  bestehen aus 4 Schritten:

Setup Bereitstellen aller für den Build Prozess benötigten Programme wie z.B. Compiler und Bibliotheken.
Configure Download des Quellcodes und Erzeugen einer configure Datei welche Umgebungsvariablen definiert in denen die benötigten Pfade und Parameter gespeichert werden.
Build Erzeugen des Gecko Anwender-Profils und der Gaia Anwendungen des Gerätes.
Install Installieren der Dateien auf dem Gerät.

 

Setup

Die Setup-Phase ist notwendig um sicher zu stellen dass sämtliche für den Build Prozess benötigte Software zur Verfügung steht, z.B. Compiler und Build Tools.

Dieser Schritt kann manuell oder per Skript durchgeführt werden. Details hierzu findest Du auf Firefox OS build prerequisites.

Hinweis: Auf UNIX und UNIX-artigen Computern kann man mit dem Kommando which prüfen, ob ein für den Build Prozess benötigtes Programm vorhanden ist. Als Parameter erwartet which den Namen des benötigten Programms.

Configuration

Der eigentliche Build Prozess startet mit dem Erstellen einer Kopie der Firefox OS (bzw. B2G) Software, gewöhnlich wird ein Git Clone des B2G Projekts erstellt. Der Schritt Configuration kopiert den gesamten benötigten Quellcode und erzeugt eine config Datei, welche die benötigten Installations-Parameter enthält.

Ausgeführt wird dieser Schritt mit dem config.sh Skript. Details findest Du auf der Preparing for your first B2G build Seite.

Das Configure Skript benötigt einen Parameter mit dem der Gerätetyp spezifiziert wird. Diese sogenannten Code Names fliessen in den Build Namen ein und stehen für eine bestimmte CPU Architektur und nicht für ein spezielles Gerät. Momentan kann man also nicht anhand des Build Names bestimmen ob ein Build auf einem bestimmten Gerät lauffähig ist.  Eine Liste der verfügbaren Code Names findest Du hier.

Der Schritt Configure nutzt repo, ein Tool des Android Open Source Projekts, für den Download der für den Build benötigten Software. Die Software wird gespeichert im Verzeichnis repo/projects. Aufgrund der herunter zu ladenden Datenmenge und der durchzuführenden Schritte kann der Schritt Configure länger dauern.

Build

Im Schritt Build wird der Quellcode kompiliert und die Image-Dateien werden erzeugt.

Hierzu wurd das build.sh Skript ausgeführt. Details hierzu findest Du in Building Firefox OS.

Das Skript versucht alle Quellcodes in einem Schritt zu kompilieren: Die Android Open Source Project Tools, den Linux Kernel und die Gaia Web Anwendungen. Wenn dieser Schritt fehl schlägt ist nicht immer klar, an welcher Stelle der Build ein Problem hatte.

Es ist möglich, nur einzelne Komponenten des Gesamtpakets zu kompilieren. Z.B. kann Gecko einzeln kompiliert werden, indem das Build Skript mit dem gecko Parameter aufgerufen wird. Das gleiche gilt für Gaia, wo das Build Skript mit dem  gaia Parameter gestartet wird. Diese Pakete können einzeln installiert werden,wie im folgenden beschrieben Abschnitt wird.

Ebenso ist es möglich die oben beschriebenen Image-Dateien zu erzeugen. Z.B. kann man das System-Image mit ./build.sh out/platform/$target/system.img erzeugen, wobei der Parameter $target derselbe ist wie im Schritt Configuration.

Install

Im Schritt Install wird der neu kompilierte Code auf das Gerät kopiert. Hierzu wird das Skript flash.sh ausgeführt.

Es können auch gezielt einzelne Komponenten des neu erstellten Build-Pakets installiert werden, indem das Flash Skript mit den entsprechenden Parametern gestartet wird . Zum Beispiel können die Gaia Web Anwendungen durch ./flash.sh gaia installiert werden.

Schlagwörter des Dokuments und Mitwirkende

Schlagwörter: 
 Mitwirkende an dieser Seite: chrisdavidmills, 1000eyes, Marc0, niclas.lichte
 Zuletzt aktualisiert von: chrisdavidmills,