Portrait of Edd Dumbill, taken by Giles Turnbull

Subscribe to updates

Feed icon Atom or RSS

or get email updates

What I make

expectnation
a conference management web application


XTech Conference
a European web technology conference

Where to meet me

View my travel plans on Dopplr.

Twitter updates

follow me on Twitter

Developing for the Sony Ericsson P800 on Linux

I love my P800, but haven't been able to make much headway in developing for it because the SDK requires Windows. The GnuPoc project have done some neat work in getting the Symbian P800 SDK to run under Linux, but it still requires a bit of fiddling around.

Fellow P800 owner Dan Brickley piqued my interest in this SDK (we're currently musing over neat FOAF apps that could run on phones), and so this afternoon I got it all up and running. This is how I did it.

First, read the GnuPoc HOWTO, the instructions there are still pretty accurate. When downloading the SDK don't bother with the April 8 2003 update zip, this won't work with the patches.

After installing Wine and extracting the zip files, you need to run the fixsrc.pl script referenced in the HOWTO. The point of this script is to unmangle some of the problems caused by the transition from a case insensitive to case sensitive filesystem. The following should work OK:

  fixsrc.pl EPOC32 /my/target/epoc32
  fixsrc.pl Epoc32 /my/target/epoc32
  fixsrc.pl epoc32 /my/target/epoc32
  fixsrc.pl UIQExamples /my/target/uiqexamples

When this is done, you need to patch the epoc32 directory. Unfortunately the patch available from GnuPoc is somewhat incomplete and out of date. The fruit of my labours today (I have never in my life seen such a tangled web of Perl before!) resulted in a new patch, which I will send along to the GnuPoc folk. Change to your epoc32 directory and apply it with:

  gzip -dc /path/to/gnupoc-edmundd.patch.gz | patch -p1

Then do a chmod +x * in the epoc32/tools directory. You also need to install the ARM gcc cross compiler available from GnuPoc, and ensure its bin directory is in your path. Referring to the GnuPoc HOWTO, set up your EPOCROOT and PATH variables accordingly.

One little quirk remains: the uidcrc.exe program should be copied from epoc32/tools into your $HOME/.wine/fake_windows/Windows directory.

Now that's done you should be ready to rock. Change into the uiqexamples/shapes directory, and issue the following commands to build the example:

  bldmake bldfiles
  abld build armi urel

This results in a .app file in epoc32/releases/armi/urel and a .rsc file in epoc32/data/z/system/apps/shapes/. Take note of these locations and adjust the .pkg file accordingly. Then run makesis shapes.pkg and you will get a shapes.sis file. This can then be beamed or otherwise transferred onto your P800 and installed.

After all that, you get to play with a small app which draws circles and squares. Whew!

Though the P800 supports development in both C++ and Java, it needs C++ if you want to use hardware resources such as Bluetooth. Unfortunately I doubt the P800 emulator can be made to run on Linux, so it looks like there's going to be a fairly heavy make/install development cycle.

As I said at the beginning, I love my P800, but it sure is hard to hack for. I suspect that when phones running .NET become popularly available they'll get a real boost from general ease of development. However, whether Linux users will gain much from that, I don't know. If the SDKs are 100% managed code then I guess there's a chance it'll run under Mono.

Please don't mail me asking for more information, as this is as far as I've got. You should also read Dan Brickley's documentation of this adventure, as it is more precise in recording the detail than I have been. There's a lot more of this SDK left to get working, but at least some of the examples now build and install.

You are reading the weblog of Edd Dumbill, writer, programmer, entrepreneur and free software advocate.
Copyright © 2000-2008 Edd Dumbill