Emulating a Nokia N800 with QEMU r32 (See the current copy)

Safe Testing Platform for the Nokia N800

OpenedHand's [1] "Poky Linux" [2] Project has created patches against QEMU to emulate a Nokia N800 on your desktop PC. Their instructions are geared towards using their platform ("Poky") on the emulated system, but with some work it should be possible to use the Nokia N800 software on the emulated system. Here's how to do it:

  1. Create a scratch area to work in
    1. $ mkdir ~/tmp/qemu-n800
  2. Download the QEMU Subversion repository from 2009-01-29 (revision 6477) into the scratch area
    1. $ cd ~/tmp/qemu-n800/
    2. $ svn co -r 6477 http://svn.savannah.gnu.org/svn/qemu/trunk qemu-svnr6477
  3. Download the "Poky Linux" Project's patches against QEMU Subversion revision 6477
    1. $ cd ~/tmp/qemu-n800/
    2. $ svn checkout 'http://svn.o-hand.com/repos/poky/trunk/meta/packages/qemu/qemu-0.9.1+svnr6477/' qemu-svnr6477-patches-poky
  4. Apply the patches to the QEMU source tree
    1. $ cd ~/tmp/qemu-n800/qemu-svnr6477-patches-poky/
    2. $ cat series | while read patchfile patchstrip; do ( cd ../qemu-svnr6477/ && patch ${patchstrip} ) < "${patchfile}"; done # (NOTE: Several of these patches don't seem to apply cleanly -- why not ?)
  5. Compile QEMU
    1. $ cd ~/tmp/qemu-n800/qemu-svnr6477/
    2. $ ./configure --prefix=${HOME}/tmp/qemu-n800/instroot --disable-linux-user --enable-system --disable-darwin-user --disable-kqemu --target-list=arm-softmmu
    3. $ make
    4. $ make install
  6. Download the Nokia N800 Maemo Firmware
    1. Go to http://maemo.org/community/wiki/HOWTO_FlashLatestNokiaImageWithLinux/
    2. Download the OS for the Nokia N800 by clicking on the appropriate link, probably something like "IT OS Software Edition 2008 (version 2.2007.51-3)"
      1. Note that you may need a Nokia N800 serial number for this -- if you don't have a Nokia N800, now might be a good time to get one.
    3. Save the file to ~/tmp/qemu-n800/
    4. I will assume that the file is called "RX-34_2008SE_2.2007.51-3_PR_COMBINED_MR0_ARM.bin"
  7. Download the Nokia Nseries Firmware Flashing Tool version 3
    1. Download the appropriate version for your operating system from: http://tablets-dev.nokia.com/d3.php
    2. Save the file to ~/tmp/qemu-n800/
    3. I will assume that the file is called "flasher-3.0-static"
  8. Make the Firmware Flashing Tool executable
    1. $ chmod +x ~/tmp/qemu-n800/flasher-3.0-static
  9. Unpack the Nokia N800 OS2008 Firmware
    1. $ cd ~/tmp/qemu-n800/
    2. $ mkdir os2008
    3. $ cd os2008/
    4. $ ../flasher-3.0-static -u -F ../RX-34_2008SE_2.2007.51-3_PR_COMBINED_MR0_ARM.bin
  10. Download the "Poky Linux" Project's Flash Filesystem Tool
    1. $ cd ~/tmp/qemu-n800/
    2. $ svn cat http://svn.o-hand.com/repos/poky/trunk/scripts/poky-nokia800-flashutil > poky-nokia800-flashutil
    3. $ chmod +x poky-nokia800-flashutil
  11. Extract the "config" partition from your Nokia N800
    1. $ cd ~/tmp/qemu-n800/
    2. $ ssh root@nokia-n800 cat /dev/mtd1ro > config.mtd
  12. Use the "Poky Linux" Project's Flash Filesystem Tool to create a filesytem for the emulated system (these directions adapted from Marcin Juszkiewicz's instructions [3])
    1. $ cd ~/tmp/qemu-n800/
    2. $ ./poky-nokia800-flashutil os2008/initfs.jffs2 qemu-n800.img initfs
    3. $ ./poky-nokia800-flashutil config.mtd qemu-n800.img config
    4. $ ./poky-nokia800-flashutil os2008/rootfs.jffs2 qemu-n800.img rootfs
  13. Start QEMU with the appropriate options
    1. $ cd ~/tmp/qemu-n800/
    2. $ ./instroot/bin/qemu-system-arm -kernel os2008/zImage -M n800 -mtdblock qemu-n800.img -m 130 -append "root=/dev/mtdblock3 rootfstype=jffs2"
  14. Victory ! Well, not quite -- these directions don't actually seem to yield a working system, yet.

Bigger: http://www.rkeene.org/projects/info/resources/projects/nokian800/qemu/qemu-nokian800.png


Where Can I Learn More About the "Poky Linux" Project ?

The Poky Linux Project's various pages:

They are apparently operated by the OpenedHand Company, whose webpage is:


What about Windows Users ?

QEMU compiles under MinGW32


No, Really, What about Windows Users ?

Here is a patched QEMU with Nokia N800 support for Win32 [4]. Here's how I compiled it (cross-compiled under Linux using MinGW32):

  1. $ CFLAGS='-I/home/rkeene/root/windows-i386/include' LDFLAGS='-L/home/rkeene/root/windows-i386/lib' ./configure --prefix=${HOME}/tmp/qemu-n800/qemu-20080307-win32-nokian800 --disable-linux-user --enable-system --disable-darwin-user --disable-kqemu --disable-vnc-tls --cpu=i386 --enable-mingw32 --cross-prefix=i586-mingw32msvc-
  2. $ make
  3. $ make install

You will still need to figure out to extract the Nokia N800 firmware, and create the MTD block device contents. Good luck!

Here it is working under Windows XP Service Pack 2 running in QEMU on Linux:

Bigger: http://www.rkeene.org/projects/info/resources/projects/nokian800/qemu/qemu-win32-qemu-nokian800-2.png