I picked up a ZTE Open Firefox OS device a little while ago. Given that developer hub says it’s a “powerful device aimed at developers and early adopters worldwide” I figured it would be good for some hackery. I read the specs, so I knew that “powerful” should be pretty suspect. I was surprised to find out that it’s not really for developers, and increasingly doesn’t seem to be all that open.
When I first grabbed it I figured maybe I could use it to just get a feel for FirefoxOS and the direction the teams were trying to push for. However, the phone ships with a 1.0.0 version of the operating system and some major basic features were missing to even use it for a day or two. For instance GMail contact syncing shows up in FFOS 1.1 (I’m not a Facebook user, so syncing using the one existing mechanism wasn’t an option). Since this was supposed to be a developer phone for early adopters, I figured that would be easy to remedy. Not so, there’s no official OS updates for the phone planned at all. Weird.
Okay, no problem, I’ll use it to just do a little poking around developing using the Gecko/Gaia stack and getting a feel for it on real hardware. However, trying to push an app from the simulator it never showed up on the phone. Rebooted and it popped up. Turns out there’s a race condition bug in FFOS 1.0 which really keeps it from being usable as a developer platform. Of course the pages talking about it say you should “make sure you have the latest version of Firefox OS on your devices”. Which we just established isn’t possible for this developer device, at least not according to ZTE. Well ain’t that just a kick in the crotch?
So of course I ended up doing what I said I wasn’t going to do, and dove straight down the rabbithole of compiling my own recent version of Firefox OS from source and getting it installed on my ZTE Open device. Turned out to be way more of an involved process than I expected given that the device is named the “ZTE Open”. I expected that to mean developer friendly. Together with the Firefox site saying the device was aimed at developers, I didn’t see any reason to second guess that assumption. Here’s the process I went through though, which should get you going from an unboxing to running FFOS 1.2 on your device. The process isn’t too horrible, but making sense of lots of the existing posts out there and figuring out the right order for a fresh device took some experimentation.
The first thing to do is apply the update from ZTE. This was one of the hardest parts to puzzle out for me. Turns out the firmware on the model I had was old enough that it was failing to flash the images once I had them built. There were folks posting that they had gotten certain parts working, and it was failing for me and others who had recently purchased devices. Turned out that the original firmware didn’t support fastboot, which is one of the mechanisms for getting the code actually onto the device. That V1.0.0B02 release from ZTE has instructions for how to load it using the stock recovery image, and once it’s installed you’ll be able to use the simple tools to get your code onto the device. Also nice, with the ZTE provided update.zip on your SD card you can use recovery mode to get back to a working system if you end up screwing up the system partition. Which I did dozens of times.
Once you have the ZTE update in make sure you have debugging turned on for your phone. Go into Settings / Device Information / More Information / Developer and flip on the Remote Debugging option if it isn’t on already.
Next, unfortunately, you’ll have to grab a binary image of the boot partition hacked up and ready to use. This is horrible, and it’s the other part that was really a sticking point trying to figure out. As you’ll see later on, for some reason the boot2gecko build for the inari device (which is the name you use for building for the ZTE Open) doesn’t generate a boot.img. From what I can tell it doesn’t even generate the parts necessary to pull together into a boot.img. And as I found out through multiple tries, putting the system and user partitions from a custom build together with the boot from a stock system you’ll generally end up with the OS booting and the UI layers crashing repeatedly. That’s what I got at least.
Once you’ve got that stuff the build is pretty much as described in the FirefoxOS build docs. I use an OS X system, but I did my build in a VMWare VM running Ubuntu 13.04. The tools used to interact with the Firefox OS devices are the same as used for Android development. And I’ve done that under a VM tons, so I was pretty comfortable with that part of the setup. Plus being in a VM meant I could muck with the stuff in the Linux install as much as I wanted. Below is the actual process I ran through, getting all the tools in place, configuring, and building. This assumes you’re starting from a completely fresh 13.04 install, you run through the installer and then let it pull down any updates, then do this:
NOTE: I moved the set of commands to run off to a gist cause Octopress was prettying up the quotes and making them cut/paste unfriendly.
And then you should have a FFOS 1.2 install runnable on your device. I tested mine out with my TMobile SIM in the US: phone works, SMS works, data connection works (though by default it was disabled on mine, just use the notification pulldown and toggle the cellular data option right next to the wifi toggle). Hopefully as the device and OS evolve this gets a lot easier and more developer friendly. Needing to pull a binary boot image from someone else just to get a fresh build onto a device, that’s not good. I was expecting FFOS development to show up Android development in terms of encouraging developers to work with the base system. Not the case so far.