WebOS Internals PDK

From WebOS Internals
Jump to navigation Jump to search

Palm's binary sdk the "Plugin Developer Kit" became available to all developers in March 2010.

In addition to the PDK, webOS Internals has released a full "WIDK" (webOS Internals Development Kit) for you using Scratchbox2.

Less than 10% of developers in the webOS developer community use Linux variants. Among those 10% there are dozens of different linux distributions that people use. Palm, therefore has chosen to support only Mac and Windows platforms for their PDK. Palm reccomends that Linux based developers use the webOS-internals WIDK instead.

We strongly urge the open-source homebrew community to standardize on this WIDK. It uses the same underlying technologies, and is entirely open.

Scratchbox 2 is a cross-compilation engine, it can be used to create a highly flexible SDK.

As installed below, the install process uses a script which extracts the required Palm provided files from a copy of webOS doctor, and downloads from other sources, and builds a complete compilation environment automatically which can compile SDL and openGLES apps for webOS.

SB2 itself is totally distribution neutral but the webOS cross-compile environment is designed and tested on Ubuntu 9.10 32 bit. (At least one user in #webos-internals reports complete success running the cross compile environment in Ubuntu 9.10 64 bit after installing curl via apt-get.) See WebOS_Internals_PDK_on_Mandriva if you want to run it on Mandriva. If you want to run the WIDK on other distributions and are willing to support that yourself and not ask webOS Internals any questions about it then please enjoy and if you succeed come back here and make a new article on how you did it. Otherwise, use the recommended OS.

The webOS Internals team strongly suggest apt-get install into the Ubuntu environment only for this purpose. The same installation of Sun Virtualbox which hosts the Palm SDK emulator can host an Ubuntu 9.10 server with very little effort on any operating system.

Developers wanting to work in an open environment 'without' SB2 can consider using the PuffTheMagic NDK.

SB2 Homepage



Scratchbox 2 is distributed under LGPL version 2.1, portions are under GPL version 2. Some minor stuff is under MIT style license.

Installation on Ubuntu for webOS PDK cross compiling

If setting up in a Virtual Box instance, it is recommended that you first complete the openSSH config as described in the VirtualBox tips for Windows users to the right. This is helpful even with a Linux host, as SSH into the PDK Virtual Machine will allow copy and paste of the commands listed below and reduce errors.


There is an automated installer avaliable here

VirtualBox tips for Windows users

If you are running your Ubuntu server in a VirtualBox client on a Windows desktop host, there are a few tricks you should know.

If you run the various commands below from the ubuntu console in VirtualBox, you can not cut and paste into and out of the console. It is to your benefit then, to use PUTTY to control the VirtualBox console instead of running in it directly.

To reach your VirtualBox Ubuntu with Putty, you will need to do some set up steps.

  • From the ubuntu server console apt-get install openSSH-server
  • shut down the ubuntu server
  • In the VirtualBox manager, choose your ubuntu server and pick setup.
  • In setup choose the network adaptor 1, and change it's type from NAT to bridged.

Now, restart your ubuntu server and log into it from the regular console. At prompt after logging in, type ifconfig eth0 . The server will reply with the ip address of the virtualbox server.

Now, go to putty, and create a new login to your ubuntu server with that IP address, type ssh port 22.

Now, you can log into your server, and cut and paste commands and output, you can scroll back and see things that have scrolled off the screen etc. etc.

This is strongly advised.



Your Ubuntu installation will need the following installed. If you do not have them, run the command after the package name. You can test if they are found by just typing the command name. If it says command not found, you need to install it.

git sudo apt-get install git-core
gcc sudo apt-get install build-essential
curl sudo apt-get install curl
unzip sudo apt-get install unzip
autoconf sudo apt-get install autoconf
subversion sudo apt-get install subversion
libtool sudo apt-get install libtool
wget sudo apt-get install wget
pkg-config sudo apt-get install pkg-config
gettext sudo apt-get install gettext
fakeroot sudo apt-get install fakeroot
javac sudo apt-get install sun-java6-jdk
ant sudo apt-get install ant
xsltproc sudo apt-get install xsltproc
intltool sudo apt-get install intltool
mkimage sudo apt-get install uboot-mkimage
lsdiff sudo apt-get install patchutils
flex sudo apt-get install flex
bison sudo apt-get install bison
libssl-dev sudo apt-get install libssl-dev
libz-dev sudo apt-get install libz-dev
libbz2-dev sudo apt-get install libbz2-dev
xar sudo apt-get install xar
help2man sudo apt-get install help2man
texinfo sudo apt-get install texinfo
xar sudo apt-get install xar
  • it has been reported that sun-java6-jdk isn't necessary

If you're uncertain at all, just cut and paste the following. If they are already installed, they'll be skipped.

 sudo apt-get install git-core build-essential curl unzip autoconf subversion libtool wget pkg-config gettext fakeroot ant xsltproc intltool uboot-mkimage patchutils flex bison libssl-dev libz-dev libbz2-dev xar help2man texinfo xar

Note: If you are a beginner with Ubuntu Linux Distribution, you should update all the packages on your system to avoid problems when you will compile.
Use these 2 command line :
Update repositories :

sudo aptitude update

And next, update the packages :

sudo aptitude safe-upgrade

If you're on a 64-bit system, you will also need to install the ia32-libs package.

Note: The make toolchain command and later steps will download approximately a half-gig of tools and sources from various locations. Do not start this if you do not have time for a large download. Additionally, if you already have downloaded a copy of the correct version of the WebOS doctor, you can reduce the download time by copying the doctor file into cross-compile/doctors/ with the correct name. This will cause the appropriate command to skip that download. Note that codesourcery rate limts downloads and at a minimum this process will take 10 to 15 minutes irrespective of your connection speed.

Start setup

Create a preware folder, copy the cross-compile tools into it (if you have not installed git, apt-get install git-core), and use a make script to begin the set up of the compilation toolchain.

sudo mkdir -p /srv/preware
cd /srv/preware
sudo chmod 777 .
git clone git://git.webos-internals.org/preware/cross-compile.git
cd cross-compile
make toolchain

Fix mmap errors

The following commands appear redundant. They are not. The install this fixes your mmap config to fix an mmap: permission denied error, but we don't need the package itself. (Do each command separately with cut and paste).

sudo apt-get install qemu-arm-static
sudo apt-get remove qemu-arm-static
OR As a workaround, if this package is not available,
the following commands can be executed in a root shell (sudo -s) to fix the mmap configuration to enable qemu-arm to work.
echo "vm.mmap_min_addr = 4096" > /etc/sysctl.d/mmap_min_addr.conf
/etc/init.d/procps restart

(note that the value should not be "0". 4096 is chosen to avoid null pointer attacks.)

Verify sh shell

On Ubuntu /bin/sh is a symbolic link to dash. This will cause errors with the make stage command below, as some of the scripts assume bash. Run the following command to see what shell sh is linked to.

 ls -l /bin/sh

If the result is a link to dash:

 lrwxrwxrwx 1 root root 4 2010-07-06 23:55 /bin/sh -> dash

You will want to correct it with the following:

 sudo dpkg-reconfigure dash

You will be asked if you want to "Install dash as /bin/sh?". Select "<No>" and bash will be used. Rerun the command to verify:

 ls -l /bin/sh

You should now see:

 lrwxrwxrwx 1 root root 4 2010-07-09 21:12 /bin/sh -> bash

Setup Scratchbox

Now, use apt-get to setup scratchbox...

sudo apt-get install scratchbox2 qemu-kvm-extras

...and set it up for compiling for webOS.

cd /srv/preware/cross-compile/toolchain/arm-2007q3/arm-none-linux-gnueabi/libc
PATH=/srv/preware/cross-compile/toolchain/arm-2007q3/bin:${PATH} sb2-init -c /usr/bin/qemu-arm armv7 arm-none-linux-gnueabi-gcc
cd /srv/preware/cross-compile


make stage

Once this setup is complete, compiling sdl apps for webOS is very simple.

Verified installed clean list

If you have successfully built the WIDK from scratch, with NO problems, feel free to add your information to this list. This will help us assess what distributions and versions it is fully compatible with.

IRC name


Linux Distribution







Works Great!

It just doesn't work tried for over a week, with fresh Ubuntu 10.4 inside and outside of virtual box, fails on libtool for common/fuse/. Tried -j4 option with make stage, tried make staging-armv7. Also installed automake-1.9 after seeing complaints about that.

Errors during make stage (22:46, 10 October 2010)

make[5]: Entering directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'
/bin/sh ../libtool  --tag=CC   --mode=compile gcc -DHAVE_CONFIG_H -I. -I..    -Wall -g -O2 -MT libdotconf_la-dotconf.lo -MD -MP -MF .deps/libdotconf_la-dotconf.Tpo -c -o libdotconf_la-dotconf.lo `test -f 'dotconf.c' || echo './'`dotconf.c
libtool: Version mismatch error.  This is libtool 2.2.6b, but the
libtool: definition of this LT_INIT comes from libtool 2.2.6.
libtool: You should recreate aclocal.m4 with macros from libtool 2.2.6b
libtool: and run autoconf again.
make[5]: *** [libdotconf_la-dotconf.lo] Error 63
make[5]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6/src'
make[4]: *** [install-recursive] Error 1
make[4]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf/build/armv6'
make[3]: *** [build/armv6.built] Error 2
make[3]: Leaving directory `/srv/preware/cross-compile/packages/common/libdotconf'
make[2]: *** [build_common/libdotconf] Error 2
make[2]: Leaving directory `/srv/preware/cross-compile'
make[1]: *** [staging-armv6] Error 2
make[1]: Leaving directory `/srv/preware/cross-compile'
make: *** [stage] Error 2

Confirmed by 3 people. Fix this by either (your choice)


  • TRUE and FALSE are not defined

Manually add the definition:

#ifndef TRUE
# define TRUE 1
#ifndef FALSE
# define FALSE 0

/bin/sh errors

If you are getting a "bad fd number" or other /bin/sh error, make sure your /bin/sh points to bash, not another shell (such as dash.)

Go back through the Verify sh shell section above to correct.

Sample build of Application:Doom

Now, go to Building DOOM with scratchbox2 and follow the simple directions.

In Process Enhancements

Extracting the PDK on Linux