mozilla
Your Search Results

    Firefox OS build prerequisites

    Before obtaining the code to build Firefox OS, even if you are simply trying to build Gaia, you need a properly configured build system — this page shows you how. You can currently build on 64-bit Linux distributions and OS X.

    Note: To build Firefox OS onto a phone, begin with your phone NOT connected to your computer. We'll tell you when to plug it in.

    Have a compatible device/emulator

    You need to have a compatible device to build onto, or to use an emulator. Though we support several phones, some have multiple variations. We currently support specific variations and some devices have better support than others.

    Note: Mozilla's B2G source code effectively is the reference implementation of B2G, but phone vendors are free to add patches or make changes. When you buy an Alcatel One Touch for example, it contains the vendor's version. This doesn't make a difference for the installed apps, but it can at the platform level. The Nexus 4 port is maintained directly by Mozilla; so it's a lot more likely to work with our version of Gecko out of the box than other tier 3 devices.

    Tier 1

    Tier 1 devices represent a primary target for development and will typically be the first to receive bug fixes and feature updates.

    Keon
    Keon is the Geeksphone Keon device, which was one of the initial developer phones. Note that builds for this device are provided by Geeksphone.
    Inari
    Inari is another testing device. Use this configuration to build for the ZTE Open devices. Warning: newer builds of Firefox OS may have trouble booting on the ZTE Open's default boot partition.
    Flame
    The Flame is Mozilla's new standard Firefox OS reference phone; you should also use the Flame configuration if you are building for the ZTE Open C, as the Flame and Open C are both based on the Android Jellybean basesystem.
    Emulator (ARM and x86)
    There are two emulators available: one emulates ARM code and the other runs everything in x86 code. Learn more about installing and using the emulators.
    Note that you shouldn't use the x86 emulator — it is hard to install and not well supported.
    Desktop
    You can also build a desktop version of Firefox OS; this runs Gecko in a XULRunner application, and you then use the Gaia user experience inside it.
    Flatfish
    Flatfish is the first tablet program of Firefox OS. Even though some of functionalities about telephony won't work on flatfish. You'll need do some extra settings to be able to build code.

    You can, of course, build the desktop client or one of the emulators without a phone.

    Tier 2

    Tier 2 devices are generally functional and many developers (especially app developers) are using them, so they tend to pick up changes secondarily.

    Samsung Nexus S
    The known working model numbers of Nexus S devices are GT-I9020A and GT-I9023. Others may work.
    Samsung Nexus S 4G
    The SPH-D720 is supported as a tier 2 device.

    Tier 3

    Firefox OS can be built for these devices, but they are not being actively worked on a regular basis by core developers. Their reliability and feature set may lag noticeably behind tier 1 and even tier 2 devices.

    Samsung Galaxy S2
    The only model that works is the i9100; no other variants are officially compatible. (i9100P might work, since the only change is a NFC chip added).
    Samsung Galaxy Nexus
    We are not currently aware of any variations that are not compatible.
    Nexus 4
    Some users on IRC have tested this successfully. May or may not require reflashing to Android 4.3 first if was running 4.4 (Android images available from Google)
    Nexus 5
    Some users on IRC have tested this successfully.
    Tara
    Tara is another testing device. Manifest of Tara is in master branch only. The script of getting Tara code is "BRANCH=master ./config.sh tara".
    Unagi
    Unagi is a phone being used as a test and development platform as a low-to-midrange smartphone. Many core Firefox OS developers are working on Unagi.
    Pandaboard
    The Pandaboard is a development board based on the OMAP 4 architecture, used to do development work on mobile platforms.
    Important: Only devices running at least Android 4 (aka Ice Cream Sandwich, Jelly-bean or Kitkat) are supported. If your device is listed above but running an older version of Android, please update it before doing anything.

    Flame and Nexus 5 libxml2-utils requirement

    If you are building for the Flame reference device or Nexus 5, you should first run the following command in Terminal:

    sudo apt-get install libxml2-utils

    Software versus hardware home buttons versus home gesture

    All Tier 1 devices have a hardware Home button which returns the user to the home screen. Most current ICS based Android devices use onscreen touch buttons for navigation. We have a virtual home button for the devices without hardware home button now. If it's not automatically enabled, open the Settings app, go to the Developer settings, and then toggle on the Enable software home button preference.

    Tier 2 and Tier 3 devices have a software home button instead of a hardware home button

    In Firefox OS version 1.4 there is also a developer option for "Home gesture enabled"; enabling that will remove the on-screen home button in favor of swiping up from the bottom of the screen.

    Requirements for GNU/Linux

    Important: even if you are trying to only use Gaia's make system, without compiling your own Boot 2 Gecko,  you still need the correct versions of Python and Node.js.

    To build on Linux, you'll need:

    • A 64 bit GNU/Linux distribution (Ubuntu 12.04 recommended).
    • At least 4 GB of RAM.
    • At least 30 GB of available hard disk space.

    This is more than the bare minimum, but sometimes building fails just because it's missing resources. A typical error in this case is "arm-linux-androideabi-g++: Internal error: Killed (program cc1plus)".

    You will also need the following tools installed:

    • autoconf 2.13
    • bison
    • bzip2
    • ccache
    • curl
    • flex
    • gawk
    • git
    • gcc / g++ / g++-multilib
    • java sdk (jdk)
    • make
    • OpenGL shared libraries
    • patch
    • X11 headers
    • 32-bit ncurses
    • 32-bit zlib

    64 bit requirement installation

    This section lists the commands you need to run in different Linux distributions to install all the requirements for building Firefox OS.

    Ubuntu 12.04 / Linux Mint 13 / Debian 6

    Run the following command in Terminal:

    sudo apt-get update
    sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libasound-dev libgl1-mesa-dev libx11-dev make zip

    If you'll build for the "Flame" reference device or Nexus 5, run the following command in Terminal:

    sudo apt-get install libxml2-utils 

    you can install the jdk via this ppa.

    And see the above comments about emulator build issues!

    Ubuntu 12.10 / Debian 7

    Run the following command in Terminal:

    sudo apt-get install autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev libgl1-mesa-dev libx11-dev make zip unzip libdbus-glib-1-2 libxt6

    Replace the gcc etc. versions with an updated version (e.g. 4.8 or 4.9) — these should work fine, unless you are building a really old version of Firefox OS, in which case you should stick with 4.6.

    When building an old version of Firefox OS

    Specify GCC 4.6 as the default host compiler after having retrieved the B2G sources: Read Changing the default host compiler to find out how to do it.

    In a fresh Ubuntu 12.10 install, you'll get an error about unmet dependencies for ia32-libs. The following commands fix it:

    sudo dpkg --add-architecture i386
    sudo apt-get update
    sudo apt-get install ia32-libs

    you can install the jdk via this ppa.

    Ubuntu 13.04

    Run the following command in Terminal:

    sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib git ia32-libs lib32ncurses5-dev lib32z1-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip

    Replace the gcc etc. versions with an updated version (e.g. 4.8 or 4.9) — these should work fine, unless you are building a really old version of Firefox OS, in which case you should stick with 4.6.

    When building an old version of Firefox OS

    Specify GCC 4.6 as the default host compiler after having retrieved the B2G sources: Read Changing the default host compiler to find out how to do it.

     

    Ubuntu 13.10

    With Ubuntu 13.10, multi-arch packages are now the main way to support multiple architectures (e.g. 32-bit on a 64-bit install).  You must tell your Ubuntu system that you want to support 32-bit packages as well:
     

    sudo dpkg --add-architecture i386
    sudo apt-get update

    Once you've completed that, then you can install the necessary packages:

    sudo apt-get install --no-install-recommends autoconf2.13 bison bzip2 ccache curl flex gawk gcc g++ g++-multilib gcc-4.6 g++-4.6 g++-4.6-multilib git lib32ncurses5-dev lib32z1-dev zlib1g:amd64 zlib1g-dev:amd64 zlib1g:i386 zlib1g-dev:i386 libgl1-mesa-dev libx11-dev make zip libxml2-utils 
    
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.6 1 
    
    sudo update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-4.8 2 
    
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.6 1 
    
    sudo update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-4.8 2 
    
    sudo update-alternatives --set gcc "/usr/bin/gcc-4.6" 
    
    sudo update-alternatives --set g++ "/usr/bin/g++-4.6" 

    Replace the gcc etc. versions with an updated version (e.g. 4.8 or 4.9) — these should work fine, unless you are building a really old version of Firefox OS, in which case you should stick with 4.6.

    you can install the jdk via this ppa.

    Ubuntu 14.04

    Follow the instructions given for Ubuntu 13.10.

    Ubuntu 14.10

    Follow the instructions given for Ubuntu 13.10. But you will have to setup make as the build process requires an older version of make. The 4.0 branch is shipped with Ubuntu 14.10, so you'll need to fetch the previous version first :
    You can download Make 3.81 here. First, remove the previous version (if installed) and install the package you just downloaded. You can do that with the command :

    cd <directory of the downloaded debian package>
    sudo apt-get purge make -y
    sudo dpkg -i make*.deb

    IMPORTANT: This process may remove other packages that depend on make. Note them carefully and reinstall them after running these commands.

    Fedora 19/20

    Run the following command in Terminal:

    sudo yum install autoconf213 bison bzip2 ccache curl flex gawk gcc-c++ git glibc-devel glibc-static libstdc++-static libX11-devel make mesa-libGL-devel ncurses-devel patch zlib-devel ncurses-devel.i686 readline-devel.i686 zlib-devel.i686 libX11-devel.i686 mesa-libGL-devel.i686 glibc-devel.i686 libstdc++.i686 libXrandr.i686 zip perl-Digest-SHA wget

    The project should build correctly using the default compiler shipped with Fedora but if you encounter compilation errors you might need to install GCC 4.6.x:

    Download the tarball then install it to /opt, with the following command on Fedora 19/20:

    curl -O http://people.mozilla.org/~gsvelto/gcc-4.6.4-fc19.tar.xz
    sudo tar -x -a -C /opt -f gcc-4.6.4-fc19.tar.xz
    

    To use GCC 4.6.x as the default host compiler you will have to set it explicitly after having retrieved the B2G sources: read Changing the default host compiler to find out how to do it.

    Fedora 21

    See Fedora 19/20 above. But in addition, there are more specific issues.

    As of today Fedora 21 (pre-beta) comes with only GNU Make 4.0. Unfortunately for us, the Android codebase is stuck in the past and force use to use something else. Until https://bugzilla.redhat.com/show_bug.cgi?id=1158544 gets resolved in Fedora 21 you need to install make 3.82 manually.

    Download the tarball then install it to /opt, with the following command:

    curl -O http://people.mozilla.org/~gsvelto/make-3.82-fc21.tar.xz
    sudo tar -x -a -C /opt -f make-3.82-fc21.tar.xz
    

    Then edit the .userconfig file to change the path, by adding this

    PATH=/opt/make-3.82/bin:$PATH

    The build process should now pick this version of make by default.

    Arch Linux

    Run the following command in Terminal:

    sudo pacman -S --needed alsa-lib autoconf2.13 bison ccache curl firefox flex gcc-multilib git gperf libnotify libxt libx11 mesa multilib-devel wget wireless_tools yasm zip lib32-mesa lib32-mesa-libgl lib32-ncurses lib32-readline lib32-zlib

    To install the lib32-* packages you need to have the multilib repository enabled.

    Note: Compiling with gcc-multilib in official repo should work fine, unless you are building a really old version of Firefox OS, in which case you should stick with 4.6. You can install gcc46-multilib from AUR. Also note that, in this case, you will have to edit the PKGBUILD and add staticlibs to the options array, or gcc will be unable to compile B2G and give you a cannot find -lgcc error when compiling. You will also need to add the following to your .userconfig file at the root of your B2G folder:

    export CC=gcc-4.6.4
    export CXX=g++-4.6.4

    By default, Arch Linux uses Python3. You'll have to force it to use the old python2. You can do that by linking the python2 executable to python but this is discouraged and considered error-prone. This will also break python 3 if it is installed on your system. A better way is to use virtualenv/virtualenvwrapper:

    sudo pacman -S python-virtualenvwrapper
    source /usr/bin/virtualenvwrapper.sh
    mkvirtualenv -p `which python2` firefoxos
    workon firefoxos
    

    Android will complain that you need make 3.81 or make 3.82 instead of 4.0. You can download make 3.81 from AUR.  This will install the make-3.81 binary on your path, you need to create a symlink named make to a location earlier in the PATH variable for the build to use the correct version.

    mkdir -p ~/bin
    ln -s `which make-3.81` ~/bin/make
    export PATH=~/bin:$PATH
    

    Android also needs the Java6 SDK. You can install jdk6 from AUR and set the java environnement variable thanks to the archlinux-java command.

    # archlinux-java set java-6-jdk
    

    Note: You can first try to compile with OpenJDK 7 from official repo if your target device is based on Android 4.3+ (JellyBean).

     

    Gentoo Linux

     

    Installing ccache

    You will need to install ccache, a tool for caching partial builds.

    # emerge -av ccache
    

    Because ccache is known to frequently cause support issues, Gentoo encourages you to use it explicitly and sparingly.

    To enable the required use of ccache, on the subsequent step of this guide where the ./build.sh script is called, Gentoo users should instead run the command with an explicitly extended path, ie.

    PATH=/usr/lib64/ccache/bin:$PATH ./build.sh
    
    Generating Partition Images

    If you are building B2G for actual physical hardware, then you may at some point also wish to generate some partition images for upload to your device. (For example, to restore backed up files to the device via the fastboot utility)

    The filesystem image format used in this case is YAFFS2 (Yet Another Filesystem 2). Gentoo has support for the very latest (ie. git HEAD) yaffs2-utils userland package in portage. (Note: You will also need kernel patches if you want to mount YAFFS2 images, but this is not really required since you can deconstruct and rebuild them instead.)

    # emerge --autounmask-write yaffs2-utils; etc-update; emerge -av yaffs2-utils

    In order to generate such an image, simply change to the parent directory of the partition filesystem tree you wish to package, and issue a command like this:

    mkyaffs2image system/ system.img

    Requirements for OS X

    To build Firefox OS on OS X, there are a number of prequisite steps you need to follow, which are detailed below. We also discuss common errors you might come across in particular situations, and solutions to those.

    Note: Configuring and Building B2G for Keon WON'T WORK on a Mac. You'll need to use Linux to build B2G for this device.

    Version Compatibility

    XCode 4.2 or older are not compatible with OS X 10.9 (a.k.a. "Mavericks"), so you may be surprised to find build failures of Firefox OS. Basically you can no longer build ICS emulator on OS X 10.9 or above, and flatfish fails to build with XCode 5.x series.

    Version compatibility of OS X 10.9.x
      emulator (ICS) flatfish/vixen (JB-4.2) emulator-jb (JB-4.3) emulator-kk (KitKat-4.4)
    XCode 4.3.3 X X X X
    XCode 4.4.1 X O[1] O O
    XCode 4.5.2 X O[1] O O
    XCode 4.6.3 X O[1] O O
    XCode 5.0.2 X X O O
    XCode 5.1.1 X X O O
    XCode 6.0.1 X X X X
    XCode 6.1beta2 X X X X
    1. You must have environment variable BUILD_MAC_SDK_EXPERIMENTAL=1 exported to build flatfish/vixen.

    Install XCode Command Line Utilities

    You need to install Xcode's Command Line Utilities. You can download just the Command Line Utilities from Apple's developer downloads page for your particular version of OS X, however if you would like the entire Xcode suite of applications, you can install Xcode through the Mac App Store. 

    Xcode 4.3.1 (OS X 10.7 "Lion") and other newer versions such as 4.4.1+ (that is, Mac OS X 10.8 "Mountain Lion"), won't necessarily include the required Command Line Utilities. When you install Xcode, make sure to go into Preferences, then the Downloads panel, and install the Command Line Utilities. In addition, make sure you have at least 20 GB of free disk space.

    Screenshot of Xcode Downloads Command Line Tools

    Note: The Firefox OS emulator requires a Core 2 Duo processor or later; that is, a system that is compatible with Mac OS X 10.7 "Lion". You do not actually have to be running Lion, you just have to be compatible with it. You can, however, build any Firefox OS build on many older Macs.

    Note: XCode 4.2.x or older is not compatible with OS X 10.9 or above, and XCode 4.3.x has no platform SDK for 10.8. Please install a newer version. If you're also working on flatfish, please make sure any of XCode 4.4, 4.5, and 4.6 is available.

    Run Firefox OS Mac Bootstrap

    Next, open a terminal and run the following command:

    curl -fsSL https://raw.github.com/mozilla-b2g/B2G/master/scripts/bootstrap-mac.sh | bash

    This will pull and run a bootstrap script that makes sure you have all the prerequisites met to build the emulator. It will also prompt you for permission to install anything you're missing, and provide warnings and suggested fixes to problems. The script will check for and install the following items:

    • git
    • gpg
    • ccache
    • yasm
    • autoconf-213
    • gcc-4.6
    • gnu-tar
    • homebrew

    Xcode wrangling

    If you have already upgraded to Xcode 4.4+ and get the message that Xcode is outdated, check the Xcode path with:

    xcode-select -print-path

    If it still points to /Developer you can update the path with:

    sudo xcode-select -switch /Applications/Xcode.app

    Making the Mac OS X 10.6 SDK available

    You also need to have the Mac OS X 10.6 SDK available. The SDK needs to be available at

    /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

    If it cannot be found there you will need to extract and copy it from Xcode 4.3. To do this:

    1. Download the XCode 4.3 .dmg file from the Apple Developer portal (you'll need an Apple Developer account).
    2. Download the utility Pacifist and use it to extract the 10.6 SDK from the XCode 4.3 .dmg file. Click on the "Open Package" button, find the SDK by searching for 10.6 in the search box, select the "MacOSX10.6.sdk" directory and extract it to a suitable location with the "Extract To..." button.
    3. Add a symlink from the 10.6 SDK location to the /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/ directory. For example, if you put the 10.6 SDK on your desktop, the comment would be
    ln -s /Users/<yourusername>/Desktop/MacOSX10.6.sdk /Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/

    Note: This is not necessary for OS X 10.9 or above, because 10.6 SDK is for ICS and ICS doesn't supports OS X 10.9.

    Be aware of Mac file system case sensitivity

    By default, OS X ships with a case-insensitive file system.  This is problematic because the Linux kernel has a number of files with the same name, but different case.  For example, see the header files xt_CONNMARK.h and xt_connmark.h.  This results in a number of files appearing to be modified in /kernel after a fresh ./config.sh.

    In many cases you can run the build just fine; for some platforms, however, you may encounter the following error:

    ERROR: You have uncommited changes in kernel
    You may force overwriting these changes
    with |source build/envsetup.sh force|
    
    ERROR: Patching of kernel/ failed.

    Please see bug 867259 for more discussion and possible fixes for this problem.

    Alternatively, it will always be safest to build on a case sensitive file system.  The easiest way to do this is to create a separate, mountable disk image with case-sensitivity enabled.  You can do this using Apple's Disk Utility application or from the command line:

    hdiutil create -volname 'firefoxos' -type SPARSE -fs 'Case-sensitive Journaled HFS+' -size 40g ~/firefoxos.sparseimage

    Mount the drive with:

    open ~/firefoxos.sparseimage

    Change into the mounted drive with:

    cd /Volumes/firefoxos/

    You can then check out the code and compile from this location without worrying about case-sensitivity problems.

    Mountain Lion homebrew gotcha

    If you are on Mountain Lion and you receive an error during the installation of the dependencies via homebrew, such as:
    clang: error: unable to execute command: Segmentation fault: 11
    ... try reinstalling the dependency manually adding the --use-gcc flag, for example:
    brew install mpfr --use-gcc

    Follow Samsung Galaxy S2 extra steps

    If you plan to build for the Samsung Galaxy S2, you will also need to install heimdall. See Installing heimdall for details. This is not done for you by the bootstrap script!

    In addition, you should also keep the following points in mind:

    1. When you eventually come to install your build on an S2 device, before running the flash.sh script you need to change all instances of factoryfs to FACTORYFS, as well as kernel to KERNEL (check your pit output to confirm), otherwise it won't work.
    2. The Siyah-s2 Recovery ROM works best. CWM works ok as well, but there are a few issues.
    3. Flashing your S2 using flash.sh will get the base OS working ok, but Gaia may have problems out of the box. Refreshing it with make reset-gaia PRODUCTION=1 should clear up such issues.
    Note: If you have installed the Samsung Kies tool, which is used to manage the contents of many Samsung phones, you will have to remove it before you can flash Firefox OS onto your device. You can use the standard application removal process on Windows; on Mac, the Kies install disk image has a utility to fully remove Kies from your system. Flashing will not work if you have Kies installed. If you forget to remove Kies, the build system will detect it and remind you to uninstall it. Note also that the uninstall tool does not correctly remove the folder ~/Library/Application Support/.FUS, and leaves a reference to a utility there in your user startup items list. You will want to remove these manually.

    Fix libmpc dependency if broken

    If you are building an old version of Firefox OS, take note that gcc 4.6 was built with libmpc 0.9; if you then use homebrew to update packages, libmpc gets updated to version 1.0, but homebrew doesn't rebuild gcc 4.6 after the library version changes. So you need to create a symlink to make things work again, like this:

    cd /usr/local/lib/
    ln -s libmpc.3.dylib libmpc.2.dylib

    Optional: Install HAX

    Intel provides a special driver that lets the B2G emulator run its code natively on your Mac instead of being emulated, when you're using the x86 emulator. If you wish to use this, you can download and install it. It's not required, but it can improve emulation performance and stability.  

    Before you install HAX you will need to install the Android SDK.

    Install adb

    The build process needs to pull binary blobs from the Android installation on the phone before building B2G (unless you're building the emulator, of course).  For this, you will need adb, the Android Debug Bridge. Our Installing ADB article explains how to get adb installed.

    Note for future when you start to use adb: adb needs the phone's lock screen to be unlocked in order to see your phone (at least in later versions of Firefox OS). You'll probably want to disable the lock screen (we'll get to how later in the build instructions).

    Install heimdall

    Heimdall is a utility for flashing the Samsung Galaxy S2. It's used by the Boot to Gecko flash utility to replace the contents of the phone with Firefox OS, as well as to flash updated versions of B2G and Gaia onto the device. You'll need it if you want to install Firefox OS on a Galaxy S2; it is not needed for any other device. For other devices, we build and use the fastboot utility instead.

    Note: Again, it's important to note that this is only required for installing Firefox OS on the Samsung Galaxy S2.

    There are two ways to install heimdall:

    Note: Building the latest Heimdall from source currently produces errors. It is better to instead use the 64bit packaged version from the Ubuntu 14.04 repos. i.e. don't use heimdall-flash:i386 if you can avoid it.

    Configure ccache

    The B2G build process uses ccache. The default cache size for ccache is 1GB, but the B2G build easily saturates this; around 10GB is recommended. You can configure your cache by running the following command inside terminal:

    ccache --max-size 10GB

    For Linux: configure the udev rule for your phone

    Note: This section is specific to Linux; OS X has the necessary device permissions set up already.

    Next, you need to configure the udev rule for your phone.

    You can get the USB vendor ID by running lsusb with your phone plugged in, but typically it's Google 18d1, Samsung 04e8, ZTE 19d2, Geeksphone/Qualcomm 05c6.

    Add this line in your /etc/udev/rules.d/android.rules file (replacing XXXX with the ID for your device):

    SUBSYSTEM=="usb", ATTR{idVendor}=="XXXX", MODE="0666", GROUP="plugdev"

    Take ZTE for example, the content in android.rules will be

    SUBSYSTEM=="usb", ATTR{idVendor}=="19d2", MODE="0666", GROUP="plugdev"

    On the Firefox Flame, that would be

    SUBSYSTEM=="usb", ATTR{idVendor}=="05c6", MODE="0666", GROUP="plugdev"

    Please note that the fastboot device (that is used when you flash) might have a different vendor ID, and that you'll need a rule for it. For example the Firefox Flame also needs the Google vendor ID

    SUBSYSTEM=="usb", ATTR{idVendor}=="18d1", MODE="0666", GROUP="plugdev"

    If the file doesn't exist, create it. The rules.d directory is usually read only by default, so you may have to use chmod to make the directory writeable, or the file, or both.

    Once you've saved the file, and closed it,  make the file readable:

    sudo chmod a+r /etc/udev/rules.d/android.rules
    

    Now that the udev rules have been updated, restart the udev daemon.

    Ubuntu

    sudo service udev restart

    Fedora 20

    sudo systemctl restart systemd-udevd.service

    ARCH

    sudo udevadm control --reload-rules

    Note: This might require a slightly longer process, depending on your distro, along the lines of:

    sudo vi /etc/udev/rules.d/android.rules
    sudo service udev restart
    sudo /etc/init.d/udev restart
    sudo reload udev
    sudo udevadm trigger

    Finally, unplug and the USB cable but don't replug it in because we need to enable remote debugging on the phone first.

    Enable remote debugging

    Before you plug your phone back into your USB port, put it USB developer mode. This allows you to debug and flash the phone. To enable developer mode, on your phone enable Remote Debugging in Developer settings (this was called Developer mode on older versions.) Once the option is checked, remote debugging is enabled, and you are ready to go.

    At this point, connect your phone to your computer via a USB cable (if you created the udev rule before, this will trigger udev to detect the phone and create the device node with the right permissions). Now you can check if you can list your device via the adb devices command (remember that adb can only see your phone when the lock screen is unlocked). If everything has worked ok, you should see an output similar to this (the following is for a Geeksphone Keon):

    $ adb devices
    List of devices attached
    full_keon       device

    If the device did not list as expect, check the file name and the script are all correct (see previous section), then restart the computer and retype the command again. Note also that if your device uses fastboot, the bootloader may identify itself with a different vendor ID than the one you see when the device boots normally.

    Back up the phone system partition

    Note: You have to do this before you build your device if you do not have an existing system backup, because some libraries will be referenced in build time. These libraries might be proprietary so we can't provide them in our code base.

    It is recommended that you back up the entire Android system partition on your phone.

    You can use this copy of the binary blobs for Android in case you later delete your B2G tree. To do this, run:

    adb pull /system <backup target dir>/system
    

     Depending on the phone, you may also need to pull the /data and/or /vendor directories:

    adb pull /data <backup target dir>/data
    adb pull /vendor <backup target dir>/vendor
    

    If the pull commands fail with an "insufficient permission" message, try the following:

    • stop and restart the adb server, or if that fails,
    • double-check that you have granted root permissions to the adb tool within your custom ROM (e.g. under CyanogenMod, change Settings > System > Developer Options > Root Access to Apps and ADB or ADB only).
    • Verify that you have set up the udev rule correctly (see For Linux: configure the udev rule for your phone).

    On to the next step

    At this point, you should be ready to fetch the Firefox OS code!

    Hide Sidebar