Hacking N810 After Firmware Update

The folks at AdMob got me an N810 as a going away present:

N810 from AdMob

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.

This entry was posted in AdMob, Maemo, ThisIsMobility. Bookmark the permalink.

11 Responses to Hacking N810 After Firmware Update

  1. Texrat says:

    Did you file a bug at maemo’s bugzilla?

  2. miker says:

    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.

  3. timsamoff says:

    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?

  4. Tom says:

    Or, you could just have used the “Format memory card” option in the File Manager (in the Tools submenu).

  5. Craig says:

    @Tom: See “read-only” and try again

  6. nb says:

    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.

  7. nb says:

    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.

  8. nb says:

    Finally fixed the problem with these instructions found on internettablettalk:
    First install “becomeroot” – becomeroot_0.1-2_armel.deb from:
    - Just use application manager’s “install from file” option to install, selecting the .deb file.

    Then from xterm:

    sudo gainroot
    umount /media/mmc2
    sfdisk /dev/mmcblk0

    (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).

  9. Nick says:

    Thanks guys. You really helped me out with this information.

  10. PLeBlanc says:

    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!

  11. robo12 says:

    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

    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.
    / #

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">