Zaurus Files

My Zaurus no longer serves me on a daily basis. I now use a more modern smartphone. Web links may be out of date, although I will continue to host my scripts and software.
Any software on this page is provided as-is. I do not provide support, so please do not e-mail me with support questions.

I originally had an ARM-based Zaurus SL-5500, so most of my packages are built for that platform. (The shell scripts are platform independent, of course!) The SL-5000 is virtually identical and these packages should work just fine on that device. XScale-based Zaurii like the SL-5600 and C-series clamshell PDAs are able to run these packages as well, but the packages are not optimized for the best possible performance on these devices.

In 2005 I upgraded to a new clamshell model, the SL-C1000. There are not a lot of English reviews of this device, so I posted my own here.

Other than the shell scripts, which were authored by me, I have not included source code for the command line packages, because the source is not mine and is freely available from their respective home pages. All I have done is compile them for ARM and packaged them for the Zaurus. Each of these is something I am using now or have used at one time on my Zaurus, so they have been tested.

I've also written one Qtopia application, an RPN calculator called SlideRuleZ, and a SDL bechmark application. They have their own pages:


SDL Benchmark

Installation Notes

I recommend installing these packages from the command line. Personally, I prefer to install to my SD memory card, e.g.

$ ipkg -d /mnt/card install packagename

or even just

$ ipkg -d card install packagename

(The second example assumes that card has been defined in /etc/ipkg.conf.)

My older packages install to ./usr/local, and my newer ones install to ./usr. They can be installed to a memory card, provided that the files are either placed in your various paths or that symlinks are set up properly. For example, if I had installed one of my newer packages using one of the install command examples above, then I would need to make sure that these environment variables were also set:

/mnt/card/usr/bin is included in $PATH
/mnt/card/usr/lib is included in $LD_LIBRARY_PATH

I set these up by editing both /home/QtPalmtop/ and my ~/.bashrc.

This works great for command-line stuff, but for Qtopia applications I use a set of symlinks so when Qtopia is restarted it can find my installed applications automatically. I've put on my Zaurus a shell script called fixlinks which I run as root after installing a Qtopia application on my card. You can get a copy of this script below.

Some Useful Shell Scripts

These are some shell scripts I use to help maintain order on my Zaurus. I keep them installed in /mnt/card/usr/local/bin/, which is in my path.

fixlinks creates symlinks so that Qtopia applications installed on the SD card are detected by Qtopia and will run. There may be other solutions to this problem, but this one works well for me. My SD card is formatted as ext2, but I see no reason why this wouldn't work with a FAT formatted card, as well.

To use, install your application to the SD card and then invoke fixlinks as root:

# ipkg -d card install some_package.ipk 
# fixlinks
Then, restart Qtopia so it detects the new applications and loads the icons. It works for all Qtopia-based applications (installed in ./opt/QtPalmtop/ or ./home/QtPalmtop/), and for most Java applications, depending on where the .jar files get installed. On my Zaurus, I've manually created a symlink so that /home/QtPalmtop/java points to /mnt/card/home/QtPalmtop/java/, which has caught all cases so far.

breaklinks breaks symlinks created by fixlinks. It does this by detecting what's a symlink to the SD card and deletes each one, leaving other files alone. The icons will be removed from Qtopia the next time it is restarted.

Note that it will delete all the symlinks, not just the ones for the last package you installed. To remove a Qtopia package that was installed on the SD card, the correct procedure would look like this (do this as root):

# breaklinks
# ipkg remove some_package
# fixlinks
Then restart Qtopia to refresh the icons.

ipkgrep searches to find out what installed package owns a file whose name includes the specified pattern. For example, to determine what installed package provided libpng, I would type:

$ ipkgrep libpng
Package libpng-devel:  /mnt/card/usr/include/libpng12/
Package libpng-devel:  /mnt/card/usr/include/libpng12/png.h
Package libpng-devel:  /mnt/card/usr/include/libpng12/pngconf.h
Package libpng-devel:  /mnt/card/usr/include/libpng
Package libpng-devel:  /mnt/card/usr/lib/libpng12.a
Package libpng-devel:  /mnt/card/usr/lib/libpng.a
Package libpng-devel:  /mnt/card/usr/lib/
Package libpng-devel:  /mnt/card/usr/lib/
Package libpng-devel:  /mnt/card/usr/lib/
Package libpng-devel:  /mnt/card/usr/lib/
Package libpng-devel:  /mnt/card/usr/lib/
Package libpng-devel:  /mnt/card/usr/lib/
Package libpng-devel:  /mnt/card/usr/lib/pkgconfig/libpng12.pc
Package libpng-devel:  /mnt/card/usr/lib/pkgconfig/libpng.pc
Package libpng-devel:  /mnt/card/usr/bin/libpng12-config
Package libpng-devel:  /mnt/card/usr/bin/libpng-config
ipkgrep accepts regular expressions, which lets you do things like find all packages that installed header files:
$ ipkgrep "\.h"$
Package verilog:  /mnt/card/usr/local/include/ivl_target.h
Package verilog:  /mnt/card/usr/local/include/vpi_user.h
Package verilog:  /mnt/card/usr/local/include/acc_user.h
Package verilog:  /mnt/card/usr/local/include/veriuser.h
Package zlib-devel:  /mnt/card/usr/include/zlib.h
Package zlib-devel:  /mnt/card/usr/include/zconf.h
Package libpng-devel:  /mnt/card/usr/include/libpng12/png.h
Package libpng-devel:  /mnt/card/usr/include/libpng12/pngconf.h
Package libpng-devel:  /mnt/card/usr/include/png.h
Package libpng-devel:  /mnt/card/usr/include/pngconf.h
ipkgrep requires ipkg, bash, grep, and cut. Note that mini-versions of the last two are included on the Zaurus as part of busybox, and these mini-versions work just fine. ipkg and bash are standard on the Zaurus, too.


This is the libpng library compiled and packaged for the Zaurus. It includes both static and dynamic libraries, and the header files necessary for building directly on the Zaurus with zgcc.

Dependencies: Requires zlib-devel.

libpng v1.2: libpng-devel_1.2_arm.ipk 299kB download (849kB installed) installs to ./usr


This is the zlib library compiled and packaged for the Zaurus. It includes both static and dynamic libraries, and the header files necessary for building directly on the Zaurus with zgcc.

zlib v1.2.1: zlib-devel_1.2.1_arm.ipk 101kB download (238kB installed) installs to ./usr

Icarus Verilog

Icarus Verilog built and packaged for the Zaurus SL-5500 and other ARM-based Linux handhelds. I assembled this package because I wanted to use my Zaurus to work on my designs while on the run. The Zaurus has plenty of processor power to run Icarus Verilog, but if you output VCDs you can create large output files in a hurry. A large memory card (or microdrive) is definitely recommended.

Icarus Verilog v0.7: verilog_0.7_arm.ipk 1.06MB download (3.97MB installed) installs to ./usr/local

Unfortunately, there is no waveform viewer currently available for the Zaurus. I would like to develop one for the Qtopia environment, but perhaps someone else will beat me to it... Something similar to GTKWave but with the handheld form factor in mind would be terrific!

GNU Development Utilities

I cross-compiled Icarus Verilog with distcc. (Zaurus IPK package available at this site.) In the course of cross-compiling the Icarus Verilog package, I needed several GNU development utilities. Apparently, no one had produced Zaurus packages of any these tools (with the exception of less), or at least I couldn't find them. These are the stock GNU tools, in the versions listed. They are particularly useful for compiling other GNU packages using distcc, where most of the build steps other than gcc -c or g++ -c are run locally on the Zaurus.

Some of these utilities may also be useful for developing directly on the Zaurus in conjunction with zgcc or as general-purpose utilities. I keep less_381_arm.ipk and diffutils_2.7_arm.ipk installed on my Zaurus all the time. The others I install temporarily only when I need them.

These IPKs install the same files as the make install command. The installation prefix is ./usr/local.

UtilityDownload linkDownload SizeInstalled Size
GNU bison v1.35 bison_1.35_arm.ipk240KB948KB
GNU diffutils v2.7diffutils_2.7_arm.ipk105KB348KB
GNU flex v2.5.4flex_2.5.4_arm.ipk135KB428KB
GNU gperf v2.7.2gperf_2.7.2_arm.ipk128KB472KB
GNU less v381less_381_arm.ipk161KB504KB

Berkeley YACC

Another utility I needed when cross-compiling Icarus Verilog. The home for Berkeley YACC is here (I think).

Berkeley YACC v1.9: byacc_1.9_arm.ipk 38KB download (116KB installed) installs to ./usr/local

Last modified: March 5, 2014