MeeGo 1.1, Partitions, Bootmenu, Kernel Power, Flasher, and All That Stuff on the #N900
Quim Gil has a blog post up Running MeeGo 1.1 unstable in your N900. I’ve kicked around installing Meego and this is my report of how things have gone.
Back in April, I kicked around MeeGo 1.0 a little bit. Back then, I went out and got a 16 GB microSD card. I sliced it up into eight 2GB partitions. The first I set aside for traditional data. The second I saved as swap and I put Fedora on the third. The fourth partition was set up as an extended partition which I split into the four remaining partitions. I put Meego on the fifth and Mer on the sixth. This leaves me two more partitions for other experiments, like maybe trying to get Nitdroid running.
With this, I installed Bootmenu. I never did get it to work with Fedora or MeeGo, but I did get it working with Mer. I played around with Mer a bit. It was interesting, but I ended up going back to just working in Maemo. For Fedora and Meego, I ran then from the command line with chroot, but never got much further.
Around that time, I also started playing with Easy Deb which I had a good time playing with until I started running low on space during some upgrade. I tried uninstalling Easy Deb, and it has ended up in some no man’s land which I haven’t been able to fully remove, or restore and update. That said, I would love to see an Easy Meego. But, I’m getting ahead of myself.
I also added kernel power which I really like for its IPv6 capabilities, as well as extended battery information. If my N900 is connected to my home network, I have lighttpd running, and you have IPv6 available, you can check battery settings online.
Unfortunately, when I added Kernel Power, I stopped being able to boot Mer. It seems like Kernel Power may be incompatible with Bootmenu
Getting the image
So, to boot MeeGo, I could either write over the whole internal memory using the ubiimg, or I could write over my whole microSD card using the MMC image. I commented on Quim Gil’s blog that what I’d really like to be able to do is get an MMC image that I could load onto a partition, instead of onto the whole card, wiping out the existing partitions. qgil opened this as a MeeGo bug.
Stskeeps provided a little more detail about how flasher works. The –b option boots the kernel that is being flashed. The –R option overwrites the kernel. While this was helpful to know, it didn’t address the issue of being able to overwrite just a partition instead of the whole card. When I brought this up, stskeeps gave instructions about how to get around this issue. Unfortunately, it assumed a lot of background knowledge that the average “evening tester” might not have.
However, based on this, I made some progress. I went out and downloaded the meego-headset-armv5tel-n900-nokia-propietary-188.8.131.52.20100803.2-mmcblk0p.raw.bz2 file. Using bzip2 –d on the .bz2 file, I then had the raw image in an unzipped format. I then used kpartx with the raw image to create a new device based on the filr.
I’ve not used kpartx before and found it a little confusing. I tried the –l option and it told me there were two partitions in the file which would be loop0p1 an loop0p2. When I ran without the –l option, it seems as if it when out and created the devices as /dev/mapper/loop2p1 and /dev/mapper/loop2p2 Nonetheless, I now had a device that I could mount. I mounted it as /mnt/p1 I then mounted the fifth partition of the memory card on the N900 using sshfs.
Following this, I copied the files over to the N900 using
rsync -aHx --progress --delete . /mnt/p2 which was basically Stskeeps’ command, modified for the way I had done my mounts. I had mounted /mnt/p2 to be the fifth partition of the MMC card on my N900.
I then stopped for dinner and let it copying everything over. It did list out a bunch of nasty looking messages about rsync protocol incompatibility, so I’m not positive everything copied over properly.
My first test was to simply chroot to that partition. This worked quite nicely. However, I couldn’t access the network. It looks like the image that was provided did not have a resolv.conf file. I created one pointing to Google’s DNS servers:
At this point, the networking started working, including IPv6. For fun, I did a tracepath6 to ipv6.google.com and found it worked nicely. Unfortunately, I couldn’t get much further than this.
It does seem like with this much in place, it ought to be possible to hack Easy Deb to bring up a chroot Meego environment.
At this point, I figured I would give Bootmenu another try. I am still having problems with it boot Mer after I installed kernel power. I tried using Bootmenu to bring up Meego, and it also appeared to just hang. It might be that there are some undocumented options in Bootmenu that would make it work. I have yet to find the options available in the /etc/bootmenu.d/ directory.
Without getting very far with Bootmenu, I figured it was time to try flasher. I copied the vmlinuz-2.6.35~rc6-133.2-n900 file to my laptop running Windows Vista. I have flasher 3.5 installed there and I tried flashing it passing the parameter b"root=/dev/mmcblk1p5” based on the suggestions from stskeeps. Have I told you how much I hate trying to flash my N900? I always have problems getting it to flash. Power up the N900, press u. Enter the command on my laptop. Hope that I get this all done in the right order at the same time. Usually, I don’t and it starts booting and the message “Suitable USB device not found, waiting.” shows up.
That said, I have succeeded from time to time and I get a nice picture of a penguin and then various boot messages. If I try to boot with root=/dev/mmcblk1p5 or /dev/mmcblk0p5 I get an error message saying
“VFS: Cannot open root device “mmcblk1p5” It lists the available partitions as mtdblock0 through mtdblock5.
When I try using /dev/mtdblock5 (or for that matter any of the other devices, I get no file system could mount root. Tried ext3 ext2 cramfs.
I’m pretty sure that my partition is ext3.
Before I called it quits for the time being, I tried one other thing. I found a page about using kexec. Since I am using kernel power, I have kexec available. Since I’ve loaded the image on /dev/mmcblk1p5 and I mount it as /media/mmc5, it seemed like I should be able to load the kernel off the MMC card.
Taking the example from the webpage, and adjusting it for my configuration, I tried
kexec -l /media/mmc5/boot/vmlinuz-2.6.35~rc6-133.2-n900 --command-line="init=/sbin/init rootwait root=/dev/mmcblk1p5 rw console=ttyS2,115200n8"
Unfortunately, like so many other attempts, this also seems to leave the machine hanging, and I need to pop the battery out to restart things.
So, where does this leave me? Right now, I can run Meego at the command line using chroot, and not do much else. However, hopefully these notes will give other people clues about how they can test MeeGo, give the developers ideas about how people are trying to test it so that they might be able to come up with better test environments, or maybe simply provide me a few more hints that will help me get MeeGo up and running on my N900.
P.S. As I was exploring the files, I found a file that provided configuration information for various devices, including the N95 and N97. Might it be that MeeGo will end up running on some of these older devices? If so, that would be very cool.