I've gone through periods of using a Firefox OS phone as my main device but I've usually fallen back to Android due to needing to use some Android only programs and I don't like carrying two phones around. Today I decided to investigate how to get dual boot Android with custom Firefox OS builds. Thankfully it was actually pretty easy.
The boot manager I used to get this to work is MultiROM Manager, available from the Play store for rooted phones. The source is for MultiROM Manager is available on github. The phone I used was the Nexus 5. The instructions here assume you are familiar with
Be aware that all these changes may lose the data you have on the device if you haven't already unlocked the boot loader and rooted the device.
Make a backup of your Android settings and applications
With the device plugged in and visible from
$ adb backup -apk -shared -all
This can be restored later if needed with:
$ adb restore backup.ab
Unlock the bootloader
The Nexus 5, and other Google devices, make it easy to unlock the bootloader. With the device plugged in and visible from
$ adb reboot bootloader $ fastboot oem unlock
Follow the screen instructions. This will erase everything on the device!
Rooting the Nexus 5
$ unzip CF-Auto-Root-hammerhead-hammerhead-nexus5.zip $ fastboot boot image/CF-Auto-Root-hammerhead-hammerhead-nexus5.img
The device will reboot and perform the steps necessary to root it.
Install MultiROM Manager
Install MultiROM Manager from the Play store. Run the app and choose
Install after ticking the
Kernel check boxes. Follow the onscreen instructions.
Build Firefox OS
The Mozilla Developer Network has instructions for building Firefox OS. Assuming all the pre-requisites are installed the steps are:
$ git clone git://github.com/mozilla-b2g/B2G b2g $ cd b2g $ ./config.sh nexus-5 $ PRODUCTION=1 MOZILLA_OFFICIAL=1 ./build.sh
Don't flash the device from here. We'll create a MultiROM compatible ROM file to boot from.
Create Firefox OS ROM file
Create a directory to hold the ROM contents and copy the results of the build into it:
$ mkdir rom $ cd rom $ rsync -rL ../out/target/product/hammerhead/system . $ rsync -rL ../out/target/product/hammerhead/data . $ cp ../out/target/product/hammerhead/boot.img .
rsync copy I deliberately choose not to copy symbolic links and to instead re-copy the original file. I had difficulty getting symbolic links working and need to investigate.
An Android ROM requires a
META-INF directory containing a script that performs the update process. The following commands create this directory, copy the binary to run the script and the script itself:
$ mkdir -p META-INF/com/google/android/ $ cp ../tools/update-tools/bin/gonk/update-binary META-INF/com/google/android/ $ curl http://bluishcoder.co.nz/b2g/updater-script >META-INF/com/google/android/updater-script
The updater script is one I wrote based on existing ones. It's pretty easy to follow if you want to read and change it.
The final step is to ZIP the directories, sign them and push to a directory on the device:
$ zip -r9 b2g.zip * $ java -jar ../prebuilts/sdk/tools/lib/signapk.jar \ ../build/target/product/security/testkey.x509.pem \ ../build/target/product/security/testkey.pk8 \ b2g.zip signed_b2g.zip $ adb push signed_b2g.zip /sdcard/
Install Firefox OS ROM
Boot into recovery mode by pressing volume down and the power on button at the same time (or run
adb reboot recovery). From the recovery menu choose 'Advanced' followed by 'MultiROM', then
Android is selected and
Don't Share is chosen for "Share Kernel with Internal ROM". Click
Zip file and select the file we created in the signing step previously. Swipe to confirm as requested.
If this succeeds, Reboot and touch the screen during the 'Auto boot' display to get the list of ROMS to run. Choosing the one we just installed should boot Firefox OS.
With MultiROM you can install other ROMS and even Ubuntu Touch. I'd like to get Inferno OS running under MultiROM as well so I can boot between all the operating systems I like to tinker with on one device.
I've placed a complete Firefox OS ROM for use with MultiROM on the Nexus 5 in b2g_nexus5.zip. This was built from B2G
master branch so may be broken in various aspects (The camera doesn't work for example) but will allow you to try the multi boot process out if you can't do builds. This is not an official Mozilla build and was generated by me personally. Use at your own risk.