Nexus One Adventures

My Nexus One was rooted the same day I got it. In fact, it was rooted even before I got around to doing much with the phone. It’s something I consider a necessary consequence of owning a phone like the Nexus One. It’s a phone that has become a computer. Like a computer, I want to be able to look under the hood, install a different operating system, build my own operating system, etc. These things have typically not been possible in previous smartphones running Symbian, Windows Mobile, or other proprietary operating systems. Android has made phones work like computers.

Rooting is a simple task on the Nexus One. It might take an hour or so to do some research and gather all the information you need to feel comfortable about the rooting exercise, but executing the actual rooting process takes only a matter of minutes, maybe a little more if you include the time taken to make backups.

Then once you get familiar with the process, it gets quite fun trying out various 3rd party ROMs. There are so many more features that you can get from 3rd part ROMs, things that somehow didn’t make it into the official Google/HTC ROM for the Nexus One. Rooting is also necessary to get some things working properly. For example, to properly configure 802.1x PEAP Wifi, you need to push a custom configuration into the phone because the GUI doesn’t provide you a way to configure the required settings correctly.

But the one thing that I’m particularly keen to do on the Nexus One is to be able to build my own ROM. I’ve been building my own Linux kernel on my PCs for over a decade. I’ve also been building complete Linux distributions for special-purpose applications for half a decade. So, building a ROM for the Nexus One seems like a natural extension of what I’ve been doing with Linux on PCs.

There’s a learning curve, though. Android, the Linux for the phone, isn’t quite the same thing as Linux on the PC. It’s not just about cross-compilation (which I’m somewhat also familiar with). There are also bits of Java (which I’m not familiar with), and a host build environment that is somewhat dated. You need a 32-bit build environment, and you need Java 1.5. The AOSP (Android Open Source Project) assumes a Ubuntu build host. I have Fedora. It’s not that Fedora won’t work. But as a first timer, having a Fedora 12, Java 1.6 and 64-bit-only host seems like giving myself extra hurdles.

I considered the idea of creating a Ubuntu VM just so that I could make my life easier. But in the end, I took the plunge and decided to have a go building the Nexus One ROM from Cyanogen. I’m proud to say I’ve finally got the phone to boot off my own build… even though it was just merely recompiling sources that someone else has hacked. There are some little problems though… but well, I hope to get them sorted out another time.

I’ve been building my own Linux kernel on my PCs for over a decade. I’ve also been building complete Linux appliances for half a decade. Eventually, I want to build a complete ROM for my phone too.

The phone is now a PC.