Fennec on a Nokia N810

From CDOT Wiki
Revision as of 21:59, 25 February 2009 by Evmarbella (talk | contribs) (Building Fennec)
Jump to: navigation, search

Documentation on Building and Testing Fennec on the Nokia N810 device.

Setting up your environment.

There are instructions available on the Fennec Mobile page In order to develop for Fennec on an Nokia device one must install scratchbox.

In order to compile Fennec for the nokia devices. we need 3 different components in order to make this work

scratchbox: Scratchbox is the cross platform compilation tool that is needed.

scratchbox toolchain: A set of tools used for a certain versions of compiler libraries, special headers and other tools a cross-toolchain enables compiling binaries for different CPU architecture than the host CPU

maemo sdk: Maemo is an open source development platform that runs on Linux and the SDK provides a set of libraries and compilier and emulator that "emulates" the Nokia for developing and debugging.

note: theres an installer(choose to install everything)

instructions are available at [1]

note: sometimes you will require to install the libIDL and setup the PKG_CONFIG_PATH

to do that you must login into scratchbox. /scratchbox/login

   wget http://ftp.gnome.org/pub/gnome/sources/libIDL/0.8/libIDL-0.8.9.tar.gz
   tar -xzvf libIDL-0.8.9.tar.gz
   cd libIDL-0.8.9
   fakeroot make install
   cd ..

note: if the libIDL error appears on build run this.

   export PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/usr/local/lib/pgkconfig

Unistalling Scratchbox

If at any point in time you wish to uninstall Scratchbox you can follow these instructions.

note: these commands are done as root.

   # apt-get remove scratchbox-libs

removes all info int he users folder(save all your important files)

   # /scratchbox/sbin/sbox_ctl stop

/scratchbox directory should be empty

   # rm -rf /scratchbox/users

scratchbox mounts directories sbox_ctl stop then you can remove the rest of scratchbox

   # rm -r /scratchbox

Setting up your N810 for development

In order to access the N810 remotely on your wireless network you will need a wireless router.

In order to access the device from outside your wireless network over the internet you will need a service like DynDNS if your IP is not static. Then port forward the ssh communcation to the device.

You might also want to consider giving the device a dedicated IP address.

It is required for you to install SSH and fix the mounting options on the device.

Install SSH on the device: [2]

Fix the mounting options on the device in order to be able to run your builds on the built in memory card (/media/mmc2) There are instructions available here on how to do it. [3]

For more information on setting up your device visit: [4]

note: To find out the IP address of the device if you are on your local wireless network in Settings>Connection Manager>menu>Internet connection>IP address

Building Fennec

Mozilla currently uses Mercurial for version tracking ref: [5]

To get a copy of the Fennec Source Login to scratchbox and run these commands.

   hg clone http://hg.mozilla.org/mozilla-central
   cd mozilla-central
   hg clone http://hg.mozilla.org/mobile-browser mobile

Depending on your connection this might take a while. Once you have the source you will want to create a .mozconfig file you will want to place this inside the mozilla-central directory.

Here is a sample of a .mozconfig: .mozconfig

note: If you want to know what other build options are available to you check out: [6]

Once you have your .mozconfig saved in the mozilla-central directory To build Fennec just run

   # make -f client.mk build

note: this will take a while

Once that is done you will have 2 directories in your object directory mobile and xulrunner

Packaging Fennec

It is required for you to package Fennec and then copy it over to the device using scp command to do this follow these instructions

   cd $objdir/mobile
   make package
   cd dist

then you should have a file called fennec-1.0a3pre.en-US.linux-arm.tar.bz2 note: if its not linux-arm you didn't build in the right environment

you will want to bunzip the file

   bunzip2 fennec-1.0a3pre.en-US.linux-arm.tar.bz2

then copy it over to the device

   scp bunzip2 fennec-1.0a3pre.en-US.linux-arm.tar root@ip.address.to.device:/media/mmc2/

note: /media/mmc2 is the built in memory card on the device

Running Chrome Tests

To run Chrome tests on Fennec on the Nokia N810 currently it is required that you apply 3 patches from bugs 470971, 460515, and 421611 then build it again

Follow these steps in scratchbox.

from your $objdir/xulrunner/

   cd _tests/testing/mochitest
   ## create backup
   cp -R chrome chrome.bak
   ## NOTE: you need to do the following steps in a look for each directory
   ## dirs: [content, docshell, dom, toolkit, widget]
   rm -Rf chrome/*
   cp -R chrome.bak/content chrome/

Then you will want to package and port your tests over to the device.

   cd $objdir/xulrunner 
   make test-package 

you will end up with a file called


You will first want to uncompress the .bz2

   bunzip2 xulrunner-1.9.2a1pre.en-US.linux-arm.tests.tar.bz2

then you will end up with a file called


This file you will copy over to the device.

   scp xulrunner-1.9.2a1pre.en-US.linux-arm.tests.tar root@ip.address.to.device:/media/mmc2/

note: media/mmc2 is the built in memory card on the device that you can use to test things.

   python mochitest/runtests.py --appname=/path/to/fennec/fennec --chrome --utility-path=/path/to/bin --certificate-path=/path/to/bin --xre-path=/path/to/fennec/xulrunner --log-file=chrome_content.log --autorun --close-when-done

For more information visit: [7]

Running Mochitests

Mochitest is a automated testing framework. [8]

note: Due to Fennec's constant development these instructions will probably change. Please refer to these instructions [9] It is also highly encouraged that you go on IRC in to stay up-to-date with the information.

On IRC: irc.mozilla.org #mobile

Debugging on Fennec on a Nokia N810

Currently gdb is not working on Fennec on the device. The symbols get stripped during the packaging process.

So you must rely on dump() in javascript and printf() in C++ and your console/terminal in order to debug.

note: Usually I put "DEBUG" in front of all the dump() and printf() so that you can grep for them on the console/terminal.

There are instructions on how to get gdb installed here: [10]