The phone itself isn’t new, nor is the idea of installing Android on a Nokia N900. However, I took a slightly different path which I figure some of my geekier friends might find interesting.
Recently, there has been a discussion about PR 1.3 coming out and supporting dual booting between Maemo and MeeGo. This isn’t really anything all that new. I wrote about configuring an N900 to boot Mer, MeeGo and Fedora back in April. In August, I wrote about Bootmenu, Kernel Power and MeeGo on the N900. Eventually, I bricked my N900 and recovered it as I moved from Bootmenu to Multiboot.
However, it did get me thinking again about trying to load NitDroid on my N900. After bricking my phone, I’ve been a little more cautious about undertaking a project like this, and I wanted to do it in a manner different than how the installation describes.
The preferred method of installing NitDroid is to use the Autoinstaller. The downside is that the Autoinstaller repartitions your MicroSD card. This is fine if you’ve got a small MicroSD card with nothing special on it. However, I have a 16 Gig MicroSD card that is already partitioned the way I want. The first continues to be data storage that I use when I’m running Maemo. The second is swap space that was necessary for Fedora which is on partition 3. Partition 4 is set up to be partitioned into multiple extended partitions. Partition 5 has Mer, Partition 6 has MeeGo so I was thinking of putting NitDroid on Partition 7.
It turns out that using a modified version of the old NitDroid N900 Install procedure worked very nicely for me.
Some of the reason it worked nice and easily, I suspect, is because I already had MultiBoot and Power Kernel running. I really like both packages. I also already had the device partitioned the way I wanted. /dev/mmcblk1p1 was already a 2 GB FAT partition. /dev/mmcblk1p7 was already defined as a 2 GB partition. So, I skipped everything except the
mke2fs -L NITDroid -j -m0 /dev/mmcblk1p2
command. I changed mmcblk1p2 to mmcblk1p7 and had my partition formated.
Likewise, I already had bzip2 rootsh and kexec-tools installed on my phone, and I like vim better than nano, so I skipped that step. As noted, I also already had multiboot. So, my next step was to get the NitDroid root file system. Initially, I downloaded http://downloads.nitdroid.com/nitinstaller/Packages/NITDroid-N900-the-fl… But when I went to download the kernel, it wasn’t there. Looking in the http://downloads.nitdroid.com/nitinstaller/Packages/ directory, I found http://downloads.nitdroid.com/nitinstaller/Packages/nitdroid-kernel-2.6…. I also found http://downloads.nitdroid.com/nitinstaller/Packages/NitDroid-0.0.8-Popov… which appears to be a more recent version of the rootfs.
So, I downloaded both of them. I followed the instructions for downloading and installing NitDroid, except that I changed the partition to mmcblk1p7. I downloaded the kernel package as well. However, before I installed it, I checked the contents with
dpkg -L nitdroid-kernel-2.6.28-06_final1_armel.deb
to see what would get installed and if I had to worry about it clobbering something important.
It is worth noting that it installs files to the /and directory, so you need to have followed the instructions for installing NitDroid, at least in terms of the directory that you create. Initially, I wasn’t going to do it that way. I’ve been staying with the standard used for the media of having each partition mounted as /media/mmcn, where n is the partition number. If I had mounted the Android partition that way, part of my installation would have failed.
Then, to my pleasant surprise, the installation created the /etc/multiboot.d/11-NITDroid-mmcblk1p7-2.6.28.NIT.06.item NitDroid menu item. I took a quick look and it looked good, so I rebooted my phone with the slider open and the menu option came up for booting NitDroid.
After bricking my phone, it always seems like an eternity to boot a new operating system on it. Is my phone frozen? Bricked? Or just busy trying to boot up? A little patience and NitDroid came up.
I ran through the startup routines. It did not have the ability to search for my wifi, so I entered the SSID manually. It connected and we were off and running. The next step of the process asked me to put in my Google account. I put that in and was told it could take up to five minutes to complete. After much longer than that, I rebooted. Then, I remembered. With other OS installations, there are often problems with DNS lookup. I booted into Maemo, and went to the /and/etc directory and created a resolv.conf file:
That is a Google domain name server, so I figured it should be good for my purposes. It is also an easy to remember name server. I booted back to NitDroid, got back in, and started playing. I placed a call to and from my cellphone. Both times the calls connected, but I couldn’t get any voice, just a buzzing sound. I also sent a text message, but didn’t receive it. The telephony needs a little more testing.
Then, I ran into the next problem. Once I’ve started an Android App, how do I get out, short of rebooting? I went to the #nitdroid-help IRC channel and it was empty. So, I check old logs and found that the camera button gets you back.
Once I had that figured out and started playing with the user interface, it all seemed pretty straight forward. The background screen is a nice seascape. At the bottom are four icons for Messaging, Contacts, Market and Maps. At the top is a window where you can do a Google search, and on the right is a grid you can tap on to bring up the whole list of applications. You can scroll to the left or right, the same way you can in Maemo. To the left was an icon for the camera, which I couldn’t get to work. To the right were icons for Gmail and Talk. Both of them seemed to work nicely. However, I can’t find any way of leaving an application running in the background, the way I like to in Mameo by using the Ctrl Backspace key.
When I try to run Google Maps, I get ‘The application Maps (process com.google.android.apps.maps) has stopped unexpectedly. Please try again. Contacts pulled in information from my Google Account. I went to the menu of applications. Again, it is very similar to Maemo, with the exception that you scroll left to right instead of up and down.
The browser worked nicely. The calculator was simple, but functional. The calendar nicely pulled in events from Google Calendar. Chrome to Phone is an interesting app where you can send a URL from a Chrome browser to your cellphone. It would be interested to see if a version of this could be ported to Maemo or Meego.
The alarm is functional, but soft. It does have a few different sounds that can be set. The clock also has a photo slideshow and a music player. It appears to be getting music off of the FAT directory, which is nice. It also appears to get some images off of the /home/user/MyDocs directory. Music between Maemo and Android can easily be shared that way. It does not appear to work as a uPnP client, which is too bad. Perhaps there is a uPnP client app that I can find and download. The clock also has weather capabilities, but that is not working. I suspect this may be related to GPS issues which may also be some of the Google Maps issue. There is also a gallery app, which is supposed to be able to share to several different services, however, that did not work for me.
So, while there are still parts that aren’t working, the N900 does at least become an interesting test platform for Android apps. I’ll keep running Maemo for the time being as I continue to experiment with Android, and hopefully eventually get a little further with MeeGo. If you’ve done any interesting alternative OS testing on the N900 or have ideas about what can be done to get MeeGo or Android more functional, please let me know.