Linux on Palm Tungsten E

The bootloader

What for ?

In order to be able to boot Linux on the Palm, we need a loadlin-alike program that will wipe out the Palm OS from the RAM and then give the hand to the Linux kernel image we provide it with.

Why is it so specific ?

As explained, the bootloader has to be a Palm OS program. Unlike Linux which is a cross-platform software, our bootloader is platform-specific, since it has to be written for the Tungsten E platform, and for the Palm OS (version 5).

Coding for the Palm OS

In order to be able to compile software that will run on the Palm OS, we need a SDK. There is a free Palm OS SDK called prc-tools which uses the Gnu Compiler Collection. However, while newer Palm OS devices sport different kinds of processors (X-Scale, OMAP, etc...), former one used to run a 68000 processor. In order to keep a binary compatibility, newer devices (among of which the Tungsten E) runs a 68k emulator. And even though, they are still faster than their predecessor because their CPUs are way faster (and also because the Palm OS itself doesn't use emulation but is coded natively for the host CPU). However, Palm OS applications can be compiled natively for ARM : you'll gain speed, but you'll lose backward compatibility as a tradeoff.

What had already been done ?

A bootloader for the Palm OS had already been written, but for older Motorola 68k-powered Palm devices. This loader is distributed with the uClinux embedded linux distribution, but it's also available here as a tarball. A few parts of this bootloader helped us, but most of it wasn't useable, since 68ks are too different from ARMs.

What have we done ?

Here are the problems we ran into, and here is how we tried to solve them :

A few words about Garux

The bootloader we made is named Garux. This stands for... err... nothing :-) To get the latest version of Garux, just use our CVS repository. Here is a list of key facts about Garux :