Hacking N810 After Firmware Update
The folks at AdMob got me an N810 as a going away present:
Omar took the time to poke around and ask Russ what I was lusting after but didn’t already have, and the N810 was at the top of the list. As if I didn’t already have enough good stuff to say about the folks there, they went and piled even more icing on the cake. Thanks everyone!
I’ve already screwed it up, but then fixed it. So it’s all good. Just want to lay down the order of operations in case anyone else runs across it. My problem was pretty much the same as the one described here, after updating the firmware the internal memory card was getting mounted read-only. I discovered this because I was trying to install apps using the package manager and it was failing. The app manager log viewer showed the errors as /media/mmc2 being read-only. I think this was related to me setting up swap on the internal storage card and it being on when I did the firmware upgrade.
The kicker was that I had yet to install becomeroot or SSH, and I hadn’t reset the passwords. So how do you unmount and reformat the internal card on the N810 pre-hackery? Here it is:
- Enable RD mode using the flasher. Despite the indication to the contrary on the HowDoIBecomeRoot page, you can enable RD mode on the N810 to enable access to gainroot. Just run ‘flasher-3.0-static –enable-rd-mode’ using the same process described for firmware updates (plug in the N810 with the power off, run command, power on while holding home key).
- Now you should be able to use ’sudo gainroot’ from xterm (which is distributed with the base OS, interesting) to get root access to the device.
- Unmount the internal card using ‘umount /media/mmc2′.
- Reformat the internal card, which will destroy all the data on there. For me this wasn’t an issue cause I had yet to put anything at all on the device. The command I used was ‘fsck.vfat -a /dev/mmcblk0p1′, which is a slightly different device name than given in the Internet Tablet Talk forums, I think there’s just a typo in that version.
- Reboot the device and run ‘mount’ from the command line, you should see /media/mmc2 as read-write mounted now.
- Do a little victory dance.
- I installed openssh and reset the passwords for both the standard user account and root account.
- Disable RD mode using the flasher using ‘flasher-3.0-static –disable-rd-mode’. Power consumption and response times seem to really suffer with RD mode left on, so I always turn it back off now.
Seems like a really nasty firmware update bug too, if I weren’t prone to hackery of the sort or attentive with respect to what’s causing errors I could have easily assumed an incorrect root cause for these issues. I was already on my way down the path of cursing the package repositories for including screwed up dependencies before I realized the app installer log indicated a completely unexpected error from the underlying tools. The package manager should really throw a better error for something like that.


December 10th, 2007 at 7:42 am
Did you file a bug at maemo’s bugzilla?
December 10th, 2007 at 12:29 pm
There’s already a bug in there about MMC cards getting set read-only, sounds like the cause hasn’t really been isolated yet though.
December 10th, 2007 at 1:12 pm
The maemo folks think that they have solved the read-only MMC bug (with the latest OS2007 update)… But, it appears that it still exists for many people… Could you add the steps in this post to the bugzilla report?
December 11th, 2007 at 4:38 am
Or, you could just have used the “Format memory card” option in the File Manager (in the Tools submenu).
January 1st, 2008 at 4:30 pm
@Tom: See “read-only” and try again
January 4th, 2008 at 10:42 am
I’m having the same problem with my N810 after an upgrade - MMC2 is read only. Because its mounted and read-only you cannot reformat it from the file manager as the format command is as a result not available.
So I tried the suggestions above. However, on my windows XP I tried executing “flasherGui.exe -enable-rd-mode” as I don’t have “flasher-3.0-static” there. It just wanted to reflash my system. Apparently this version doesn’t recognize the “-enable…” command line option.
I did however simply install “becomeroot” on my N810. I can execute “sudo gainroot” successfully. However, each time I attempt to execute “umount /media/mmc2″, it fails with a “device busy” message.
I’ve disabled all applets, I uninstalled the “map” application (that puts its maps on mmc2) and the tutorial applet. I only have becomeroot and osso-xterm apps installed. Still the “device busy” persists.
January 4th, 2008 at 1:46 pm
Update: I needed to execute: “umount -l /media/mmc2″ to unmount my internal media card.
Unfortunately, the fsck.vfat command returned:
“dosfsck 2.11, 12 Mar 2005, FAT 32, LFN
Seek to 2055200256:Invalid Argument”.
I rebooted and sought to use the control panel/memory to disable virtual memory (that resides on the IMC). It showed a 64mb VM setup. Unclicking the check box to disable/remove the VM and oddly it said it couldn’t undo the VM. I tried changing it to 128mb VM and that doesn’t work. I’m going to assume it was trying to delete the VM file and couldn’t. I had hoped that after removing the VM I could use file manager to reformat the IMC. Oh well.
January 4th, 2008 at 3:54 pm
Finally fixed the problem with these instructions found on internettablettalk:
First install “becomeroot” - becomeroot_0.1-2_armel.deb from:
http://eko.one.pl/maemo/index.php?path=dists%2Fbora%2Fuser%2Fbinary-armel/
- Just use application manager’s “install from file” option to install, selecting the .deb file.
Then from xterm:
sudo gainroot
umount /media/mmc2
then
sfdisk /dev/mmcblk0
0,,b
(hit enter until get back to main # prompt)
mkdosfs /dev/mmcblk0p1
— and then reboot the device. Problem solved. Really gotta thank the guy who provided this info for some of us novices (with 30+ years of non-linux o/s and development experience).
January 24th, 2008 at 7:44 pm
Thanks guys. You really helped me out with this information.
February 22nd, 2008 at 4:37 pm
Thanks all,
I just ran into this same pernicious problem today after updating to the firmware they just released (from 42-19 to 51-3 on the n8100).
The only thing that NB didn’t cover above was for folks who have extended their memory, you need to turn it off first. From the thread at ITT, before running ‘umount’ -
1. Open the Control Panel and click the Memory Icon.
2. UN-check the “extended memory box” (this is what is using the internal card)
(Plus I’d add a brief caveat that sfdisk will wipe everything off your internal card, so if there is anything you want to keep on there better copy it someplace else.)
Considering that I updated my n800 at the same time (well, first actually), it was very confusing when the internal memory on the n810 started saying everything was read only, and the n800 didn’t have a problem. I was despairing I had a flash failure before googling and finding your site here! Thanks all!
April 21st, 2008 at 2:41 am
I have tried everything with no luck
not able to umount :( I have a checkbox checked to extend internal memory and I cant unchek it :(
so I have “BUSY” message everytime
/home/user # umount /dev/mmcblk0p1
umount: cannot umount /media/mmc2: Device or resource busy
/home/user # lsof /dev/mmcblk0p1
gets nothing :(
please take a look at this, I think there is something wrong as I am not too deep into linux yet, I just made using your and other forums instructions - but no luck againe
/ # sfdisk -f /dev/mmcblk0p1
Checking that no-one is using this disk right now …
BLKRRPART: Invalid argument
OK
Disk /dev/mmcblk0p1: 61439 cylinders, 4 heads, 16 sectors/track
Old situation:
Units = cylinders of 32768 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/mmcblk0p1p1 0 - 0 0 0 Empty
/dev/mmcblk0p1p2 0 - 0 0 0 Empty
/dev/mmcblk0p1p3 0 - 0 0 0 Empty
/dev/mmcblk0p1p4 0 - 0 0 0 Empty
Input in the following format; absent fields get a default value.
Usually you only need to specify and (and perhaps ).
/dev/mmcblk0p1p1 :0,,b
/dev/mmcblk0p1p1 0+ 61438 61439- 1966047+ b W95 FAT32
/dev/mmcblk0p1p2 :
/dev/mmcblk0p1p2 0 - 0 0 0 Empty
/dev/mmcblk0p1p3 :
/dev/mmcblk0p1p3 0 - 0 0 0 Empty
/dev/mmcblk0p1p4 :
/dev/mmcblk0p1p4 0 - 0 0 0 Empty
New situation:
Units = cylinders of 32768 bytes, blocks of 1024 bytes, counting from 0
Device Boot Start End #cyls #blocks Id System
/dev/mmcblk0p1p1 0+ 61438 61439- 1966047+ b W95 FAT32
/dev/mmcblk0p1p2 0 - 0 0 0 Empty
/dev/mmcblk0p1p3 0 - 0 0 0 Empty
/dev/mmcblk0p1p4 0 - 0 0 0 Empty
Warning: no primary partition is marked bootable (active)
This does not matter for LILO, but the DOS MBR will not boot this disk.
Do you want to write this to disk? [ynq] y
Successfully wrote the new partition table
Re-reading the partition table …
BLKRRPART: Invalid argument
If you created or changed a DOS partition, /dev/foo7, say, then use dd(1)
to zero the first 512 bytes: dd if=/dev/zero of=/dev/foo7 bs=512 count=1
(See fdisk(8).)
/ # mkdosfs /dev/mmcblk0p1
mkdosfs 2.11 (12 Mar 2005)
mkdosfs: /dev/mmcblk0p1 contains a mounted file system.
/ #