Dualboot Guide


This document has been reviewed for maemo 3.x.

Please note, that the dualboot is not officially supported in the Nokia N800 product but following these instructions you should be able to get it working for your development or testing purposes.

This document explains how to make dualboot work in the Nokia N800 device. In Internet Tablet product the dualboot is a method how you can boot your device with an alternative root filesystem. Only the rootfs - not the initfs - can be alternatively booted during the bootup sequence.

Dualboot makes developers life a bit easier because reflashing the device with different root filesystems is not needed anymore. You simply install the wanted root filesystems into MMC card(s) and simply reboot.


You need the following:

  • 256 Mb MMC card (minimum)
  • the Developer RootFS as a tar.gz file (provided with maemo 3.1 sdk)
  • Your Internet Tablet Device
  • MMC card reader. For convenience an additional MMC card reader is recommended. However, it is possible to operate and prepare the MMC card using the device itself but in this example we use a separate MMC card reader. The instructions given are basically the same even if you would prepare the MMC card in the actual device.

Preparing the MMC card

Usually MMC cards have a FAT filesystem in them. However, during the bootup sequence the device requires that the MMC holds an ext2 or ext3 filesystem and if it is found it tries to mount it during the bootup.

For this purpose you need to create an ext2 or ext3 filesystem in the MMC card. You can do this with utilities like FDISK or GPARTED. In this example we use the FDISK tool in the Linux PC side for partition creation.

In case if your MMC card has FAT filesystem already it is enough to just change the filesystem type to ext2. You can use the fdisk tool to do this. The command to change the type is t (=type). See the fdisk examples below in this document.

Note: If you don't have a separate MMC card reader you can simply place the MMC card in the device, then login into the actual device and create the partition with the fdisk. For this purpose you need to use fdisk program (or similar) that works in the Internet Tablet.

Whatever method you choose to prepare the MMC card the process itself is similar in both cases.

Follow these steps:

  • Insert the MMC card to your card reader
  • Figure out what is the /dev/ file for the card. In this example we use /dev/sdb device for the card
  • If your computer mounted the MMC card then first unmount it
  • Then start the fdisk tool with the correct /dev/ device file (yours may be different than sdb):
    root@linux-pc:~# fdisk /dev/sdb
  • Now fdisk is running. give the p (=print) command to see what it tells to you about the /dev/sdb device.
    Command (m for help): p
    Disk /dev/sdb: 256 MB, 256901120 bytes
    8 heads, 62 sectors/track, 1011 cylinders
    Units = cylinders of 496 * 512 = 253952 bytes
       Device Boot      Start         End      Blocks   Id  System
  • Then give the n (=new) command following with p (=primary partition) command as below:
    Command (m for help): n
    Command action
       e   extended
       p   primary partition (1-4)
  • Give the partition number as below.
    Partition number (1-4): 1
    First cylinder (1-1011, default 1): 
    Using default value 1
    Last cylinder or +size or +sizeM or +sizeK (1-1011, default 1011): 
    Using default value 1011
  • Then you need to set the type for the partition. The hexadecimal code for ext2 and ext3 types is hex 83:
    Command (m for help): t
    Selected partition 1
    Hex code (type L to list codes): 83
  • Next you need to write the changes back to MMC card. Use the w command for this. After w the fdisk quits.
    Command (m for help): w
    The partition table has been altered!
    Calling ioctl() to re-read partition table.
    Syncing disks.
  • Now create a filesystem inside the newly created partition with the mkfs.ext2 command:
    root@linux-pc:~# mkfs.ext2 /dev/sdb1 
    mke2fs 1.40-WIP (14-Nov-2006)
    Filesystem label=
    OS type: Linux
    Block size=1024 (log=0)
    Fragment size=1024 (log=0)
    62744 inodes, 250696 blocks
    12534 blocks (5.00%) reserved for the super user
    First data block=1
    Maximum filesystem blocks=67371008
    31 block groups
    8192 blocks per group, 8192 fragments per group
    2024 inodes per group
    Superblock backups stored on blocks: 
            8193, 24577, 40961, 57345, 73729, 204801, 221185
    Writing inode tables: done                            
    Writing superblocks and filesystem accounting information: done
    This filesystem will be automatically checked every 36 mounts or
    180 days, whichever comes first.  Use tune2fs -c or -i to override.

Now you should have a MMC card with newly created ext2 filesystem.

Install the developer RootFS into the MMC card

Now that we have the MMC card ready we need to populate it with real files. In this example we will install the maemo Developer RootFS (armel ofcourse) content into the MMC card.

Follow the following steps.

First, download the developer rootfs from maemo.org site. In this example we use maemo-sdk-rootfs_armel.tgz as a name for this file. This name may differ between different maemo releases so check the correct name.

Here we assume that you have downloaded the maemo-sdk-rootfs_armel.tgz and copied it into the /tmp directory.

Mount the MMC card to /mnt/mmc directory and extract the content of the tar archive to the MMC card. Use the right partition in the MMC disk, in this example it is sdb1 but it may be different in your environment.

root@linux-pc:~/tmp# mount /dev/sdb1 /mnt/mmc
root@linux-pc:~/tmp# cd /mnt/mmc
root@linux-pc:~/tmp# tar zxf /tmp/maemo-sdk-rootfs_armel.tgz

Check that no errors were reported and you have now files under the /mnt/mmc directory by running the ls command:

root@linux-pc:/mnt/mmc# ls
bin   etc     lib     mnt   root  sys  var
boot  home    opt     sbin  tmp
dev   initrd  media   proc  srv   usr

If you have files like above then just move away from the mmc directory and unmount the MMC card.

root@linux-pc:/mnt/mmc# cd ..  ; umount /mnt/mmc

Now you have populated the MMC cards ext2 filesystem with the developer rootfs content.

Change the booting rootfs using Flasher tool

Next, take the flasher tool and connect the Internet Tablet with the provided USB cable to your Linux Pc. Run the flasher tool with the following command:

$ flasher --set-root-device mmc

Important: This will tell the device that the root filesystem is in the MMC card and in the next reboot it will use the rootfs from the MMC card.

Reboot from the MMC card

Now you should have both your MMC card and your device properly prepared for dual-boot.

Now reboot the device normally.

If everything is OK the device should boot to the developer rootfs in the MMC card. If this is the case there should be big SDK letters in the device screen during bootup sequence.

The original sales image rootfs is still in the devices flash memory, intact.

When you want to boot back to the normal Sales Image rootfs just remove the MMC card from the device and reboot.

Booting from Flash-memory

If you later want to make the device to always boot from the built-in flash memory run the following command from your Linux PC:

$ flasher --set-root-device flash

After this your device will always boot from the internal flash memory where the Sales Image is located (assuming -ofcourse- that you have not reflashed your device).

How to copy existing RootFS to the MMC card

There is a wikipage in maemo.org that explains how to copy devices rootfs to MMC card.

The link to the document is: http://maemo.org/maemowiki/HowTo_GetStartedWithSardine

FDISK command

For your convenience the FDISK tool commands are listed here.

Command (m for help): m
Command action
   a   toggle a bootable flag
   b   edit bsd disklabel
   c   toggle the dos compatibility flag
   d   delete a partition
   l   list known partition types
   m   print this menu
   n   add a new partition
   o   create a new empty DOS partition table
   p   print the partition table
   q   quit without saving changes
   s   create a new empty Sun disklabel
   t   change a partition's system id
   u   change display/entry units
   v   verify the partition table
   w   write table to disk and exit
   x   extra functionality (experts only)

Improve this page