Linux4Palm Development Workstation on Gentoo Linux

Note: This document is quite out of date as far as OpenEmbedded? goes. OE (thankfully) now uses git instead of mercurial. See the getting started guide on

I'll be assuming you've got an up to date Gentoo install on x86 hardware. Most of this will also work on x86_64 but you may need to tweak some things.

Revision Control Systems

You're going to be using a whole stack of these. The most common you'll encounter will probably be CVS, Subversion and git.

sudo emerge -av --noreplace cvs subversion cogito



Have a read of the official guide. I'll give a very brief overview of my setup.

Also have a look at raster's setup.

First, create a directory to store all your OE-related stuff:

mkdir -p ~/Projects/palm/oe
ln -s ~/Projects/palm/oe ~/oe
cd ~/oe

Next, start downloading the latest snapshot of the metadata tree. This is over 100mb so will take a while on most connections, so start it now and continue the guide.

wget; bunzip2

Grab the latest version of bitbake too:

svn co bitbake

Create a small script to setup PATH and other environment variables for doing OE work. I call this ~/oe/

export OE="$HOME/Projects/palm/oe"
export PATH="$OE/bitbake/bin:$PATH"
export BBPATH="$OE/build:$OE/"

Before doing any OE work, just source this into your shell. Do it now:


Now you'll have to wait for to download and uncompress. Go chat on IRC for a while or something. Once it's done we check out a working directory:

mtn checkout

Now create local.conf which specifies amongst other things what distro and machine you're building for:

mkdir -p build/conf
cp build/conf/local.conf
vi build/conf/local.conf

Make the following changes:

DL_DIR = "${OE}/downloads"
BBFILES := "${OE}/*/*.bb"
MACHINE = "palmld" # or whatever
DISTRO = "angstrom-2007.1"
IMAGE_FSTYPES = "tar ext2"
PARALLEL_MAKE = "-j3" # if you have multiple CPUs/cores
INHERIT = "package_ipk"

Choose one of

# TARGET_OS = "linux"
# TARGET_OS = "linux-uclibc"

Also take out the last line of the file that will cause it to abort.

[Optional] Install Psyco

Psyco is a JIT-compiler for Python that speeds up bitbake's parsing a bit. If you're on x86, it's probably a good idea to install it:

sudo emerge -av psyco

[Optional] Http-Replicator

As a Gentoo user you probably have source tarballs for loads of stuff sitting around in your distfiles directory. Instead of re-downloading everything for OE, install Http-Replicator. Then add to your environment:

export http_proxy="http://localhost:8080/"
export GNU_MIRROR=""

We change some of the common mirrors to http as ftp will bypass Http-Replicator.

Now get building

Now try building something:

bitbake angstrom-console-image

Bitbake may tell you that you're missing some tools (for instance diffstat and texi2html) just emerge them and try again:

sudo emerge -av diffstat texi2html
bitbake angstrom-console-image

You'll probably find that the qemu-native package fails to build, complaining about requiring gcc 3.x. Simply install a version of gcc 3:

sudo emerge =sys-devel/gcc-3.4.6-r2

Then switch to it temporarily and build qemu:

sudo gcc-config --list-profiles
sudo gcc-config i686-pc-linux-gnu-3.4.6
source /etc/profile
bitbake qemu-native

Switch back to your normal compiler and continue building your distro image:

sudo gcc-config i686-pc-linux-gnu-4.1.1
source /etc/profile
bitbake angstrom-console-image

For building userfriedly linux image add in build/conf/local.conf (more and fresh info at

require conf/distro/include/

and try

bitbake opie-image

Linux Kernel

While OE will automatically build a kernel for you, it's often useful to be able to compile the kernel manually while developing.

First then we need is a toolchain. You've got several options for this you could use OE's toolchain, build one with Gentoo's crossdev script or use someone else's pre-compiled one. I'll describe the first two options.

Use OpenEmbedded's toolchain

This is the easiest option. You should find the toolchain binaries under oe/tmp/cross/bin. All you have to do for the linux kernel to use them is set a couple environment variables.

export CROSS_COMPILE=$HOME/Projects/palm/oe/tmp/cross/bin/arm-angstrom-linux-gnueabi-
export ARCH=arm

Put them into a shell script if you like:

mkdir ~/Projects/palm/linux

Build a custom toolchain with crossdev

Portage contains a neat script which makes building custom toolchains really easy.

sudo emerge -av crossdev
sudo crossdev -t arm-softfloat-linux-gnueabi

To see what other options are available try:

sudo crossdev -t help

Once your toolchain is built, we'll of course need to tell the kernel to use it. Again just set these environment variables:

export ARCH=arm
export CROSS_COMPILE=arm-softfloat-linux-gnueabi-

Building the kernel

Start as usual by checking out the kernel from subversion.

mkdir -p ~/Projects/palm/linux
cd ~/Projects/palm/linux
git clone git://
cd linux-hnd

Make sure you have the toolchain environment variables set as explained in the previous sections then type:

make help

Look for your machine in the resulting list.

make palmld_defconfig

When the build process completes, the resulting zImage will be in arch/arm/boot/zImage.


Now that you've got an OpenEmbedded build environment and the kernel, the next thing you might like to be able to build is a bootloader. For this we will need the Palm OS SDK.

Palm OS SDK and PRC Tools

x86_64 users: You'll probably need to do this in a 32-bit chroot or virtual machine. prc-tools uses a really old version of gcc which gets confused by x86_64.

You should have installed a GCC 3.x compiler above. If not do it now:

sudo emerge =sys-devel/gcc-3.4.6-r2

You need to use gcc 3.x to build the ARM portion of prc-tools. So switch to it and then emerge prc-tools.

sudo gcc-config --list-profiles
sudo gcc-config i686-pc-linux-gnu-3.4.6
source /etc/profile
sudo emerge -av prc-tools

Don't forget to switch back to your normal compiler, afterwards.

sudo gcc-config i686-pc-linux-gnu-4.1.1
source /etc/profile

Unmask the SDK ebuild by appending to /etc/portage/package.keywords:

dev-lang/palmos-sdk ~x86

Hunt around on the ACCESS developers site until you find palmos-sdk-5.0r3-1.tar.gz and Drop them in /usr/portage/distfiles.

Then install the palmos-sdk and pilrc packages as per usual.

sudo emerge -av palmos-sdk pilrc

Great, now you should be able to compile the bootloaders.


Checkout Cocoboot from Hack&Dev git.

mkdir -p ~/Projects/palm/bootloaders
cd ~/Projects/palm/bootloaders
git clone git://

Then compile as per the README file's instructions.

cd cocoboot

Copy the resulting cocoboot.prc to your Palm's memory card or HDD, along with a kernel zImage and optionally an initrd.gz image.


Checkout BFUGarux from Hack&Dev subversion.

mkdir -p ~/Projects/palm/bootloaders
cd ~/Projects/palm/bootloaders
svn co

Edit the Makefile and remove the -palmos option from LDFLAGS.

Grab a kernel zImage and initrd.gz from somewhere. If you do not need an initrd, just make an empty file.

cd BFUGarux
cp ~/Projects/palm/linux/linux-hnd/arch/arm/boot/zImage .
touch initrd.gz

Then compile as per the README file's instructions.

make palmld BFU
Last modified 10 years ago Last modified on 10/26/08 02:15:31