Debian on Zaurus 
This is a description of my ongoing efforts to get debian running from scratch on the Sharp Zaurus.

The project is mainly targeted to the clamshell model SL-C3100, since this is my main development device. After my attempts will finally be successful, I will try to make it available on the SL-C1000 also. Since these two devices are the models I currently own, I won't be able to test it for other devices. It may work, and then again it may not. Just try it out for yourself.

I did several attempts already to build a debian distribution from scratch on the Zaurus. One "solution" was to perform a network installation using the debian Installer. This was running on top of a 2.6.23 (EABI) kernel. This was partly successful. After much tweaking and hacking a few people where able to get the system running.

My goal was to create a simple installation that could be performed not only by the advanced but also the average user. The debian Installer "solution" I build wasn't anything near simple, so I left this alone for the time being.

The solution I describe here doesn't work with u-boot. Although I used it on my SL-C750 (RIP) with success, the attempts I made to get it up and running on my SL-Cxx00 were never successful. And getting your device back to work after an unsuccessful u-boot attempt takes a lot of time. Simply put, u-boot is not for the faintly hearted. That's why I don't use it here.

1. Bootstrap debian on host


First, create an archive with all packages needed to boostrap debian on the Zaurus. I used following commands on my i686 Ubuntu 7.10 "Gutsy Gibbon" host:
# mkdir ~/debian
# cd ~/debian
# sudo debootstrap \
--include=wireless-tools,mc,wpasupplicant,console-tools,alsa-base,alsa-utils \
--verbose \
--arch armel \
--foreign sid armel-stage1 \
http://ftp.debian-ports.org/debian-armel/
# cd armel-stage1
# tar -czpf ../debian-stage1.tar.gz

TODO: Add download link for debian-stage1.tar.gz

2. Preparing your Zaurus


We need a kernel capable of running debian. I use a 2.6.23 (EABI) kernel here. It's a fairly standard build of the Poky linux kernel, build using the OpenEmbedded build system. Building the kernel is beyond the scope of this article. You can either build one yourself, or download mine here. If you use your own, you can continue with step 3 now.

The kernel provided here includes a minimal root filesystem, just to get things done.

Flash the system using the usual method.

TODO: Add download link for minimal Poky system and provide flash info

3. chroot and bootstrap debian on Zaurus


Having a working kernel ready on your Zaurus, it's now time to install and configure the root filesystem. Therefore, copy the debian-stage1.tar.gz (in ~/ on the host system) to a SD or CF memory card, insert the card in the Zaurus and copy the file to the ~/debian directory (create directory first).
# mkdir ~/debian
# cd ~/debian
# tar -xzpf /media/card/debian-stage1.tar.gz
(use /media/cf to extract from cf instead of sd)

Now that we've copied all the base package files from step 1 it's time to start the (native) installation and configuration. Therefore we have to chroot into the ~/debian directory.

I had a dependency problem during the execution of second-stage debootstrapping. The aptitude package needed libapt-pkg-libc6.6-6-4.6 which wasn't installed somehow. Since both the tasksel and tasksel-data packages depend on aptitude, they gave errors also. I didn't bother and removed the three packages from the debootstrap/base file. I don't know how permanent this problem is, maybe it's solved already when you try it out yourself.

# chroot ~/debian
# debootstrap/debootstrap --second-stage

The process of installation and configuration takes about half an hour. On success, the process should end with a message saying "Base system installed successfully".

I: Validating Packages
I: Resolving dependencies of required packages...
I: Resolving dependencies of base packages...
I: Installing core packages...
I: Unpacking required packages...
I: Unpacking base-files...
I: Unpacking base-passwd...
:
I: Configuring required packages...
I: Configuring sysv-rc...
I: Configuring tzdata...
:
I: Base system installed successfully.

Most of the work is done now. We just need to install some Zaurus specific packages. First exit from the (chroot) debian system and get back to the minimal 2.6.23 (Poky) system.
exit

TODO: Add download link to resulting debian-stage2.tar.gz root filesystem

4. Installation of Zaurus specific stuff


We need to install some Zaurus specific packages to finish this up. A couple of things can just be copied from the minimal 2.6.23 (Poky) system, other packages, like the xserver need to be installed from ipk's.
# cd ~/debian
# tar -czpf ../tmp-copy.tgz /dev /mnt
# tar -xzpf ../tmp-copy.tgz
# cp /etc/fstab etc/fstab
# echo "cortez" > etc/hostname
# tar -xzpf /media/card/modules-2.6.23-spitz.tgz
# tar -xzpf /media/card/poky-packages.tgz
# cd media
# mkdir card cf hdd mmc1 net ram realroot union
# cd ..


* chroot ~/debian
* install packages using dpkg -i package.ipk
[skip] dpkg -i --force-all /poky/all/update-rc.d_0.7-r1_all.ipk
dpkg -i --force-all /poky/spitz/keymaps_1.0-r15_spitz.ipk

[skip] dpkg -i --force-all /poky/spitz/base-files_3.0.14-r58_spitz.ipk
dpkg -i --force-architecture /poky/spitz/formfactor_0.0-r7_spitz
dpkg -i --force-architecture /poky/armv5te/makedevs_1.0.0-r5_armv5te.ipk
dpkg -i --force-all /poky/spitz/initscripts_1.0-r102_spitz.ipk

dpkg -i --force-all /poky/armv5te/sysvinit_2.86-r28_armv5te.ipk

dpkg -i --force-architecture /poky/spitz/libvolume-id0_115-r1_spitz.ipk
dpkg -i --force-architecture /poky/spitz/udev_115-r1_spitz.ipk
dpkg -i --force-architecture /poky/spitz/udev-utils_115-r1_spitz.ipk

dpkg -i --force-architecture poky/armv5te/libxau6_1.0.3-r0_armv5te.ipk
dpkg -i --force-architecture poky/armv5te/libxdmcp6_1.0.2-r1_armv5te.ipk
dpkg -i --force-architecture poky/armv5te/libx11-6_1.1.2-r2_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libxext6_1.0.3-r1_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libxrender1_0.9.2-r1_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libx11-6_1.1.2-r2_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libxrandr2_1.2.1-r1_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/xrandr_1.2.2-r0_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/tslib-conf_1.0-r10_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libts-1.0-0_1.0-r10_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/tslib-calibrate_1.0-r10_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/xserver-kdrive_1.3.0.0-r15_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libfreetype6_2.3.5-r2_armv5te.ipk
dpkg -i --force-all /poky/armv5te/libz1_1.2.3-r2_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libfontenc1_1.0.4-r1_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libxfont1_1.3.0-r2_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/xserver-kdrive-fbdev_1.3.0.0-r15_armv5te.ipk

dpkg -i --force-all /poky/spitz/zaurusd_0.0+svnr296-r0_spitz.ipk

dpkg -i --force-architecture /poky/angstrom/matchbox-common_0.9.1-r5_all.ipk
dpkg -i --force-architecture /poky/armv5te/libxsettings-client0_0.10-r1_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libexpat1_2.0.0-r2_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libfontconfig1_2.4.2-r0_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libxft2_2.1.12-r1_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libjpeg62_6b-r5_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libpng12-0_1.2.16-r5_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libmb1_1.9-r5_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libice6_1.0.3-r1_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libsm6_1.0.3-r1_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libstartup-notification-1-0_0.9-r0_armv5te.ipk
dpkg -i --force-all /poky/armv5te/libapm1_3.2.2-r8_armv5te.ipk

dpkg -i --force-architecture /poky/angstrom/matchbox-panel_0.9.3-r3_spitz.ipk
dpkg -i --force-architecture /poky/angstrom/matchbox-panel-hacks_0.3-1-r7_all.ipk

[skip] dpkg -i --force-architecture /poky/armv5te/libglib-2.0-0_2.14.4-r1_armv5te.ipk

dpkg -i --force-architecture /poky/armv5te/libxfixes3_4.0.3-r0_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libxcursor1_1.1.8-r2_armv5te.ipk

[skip] dpkg -i --force-architecture /poky/armv5te/dbus-1_1.0.2-r3_armv5te.ipk
dpkg -i --force-architecture /poky/armv5te/libdbus-glib-1-2_0.74-r0_armv5te.ipk

libxml2

dpkg -i --force-architecture /poky/armv5te/gconf-dbus_2.16.0+svnr604-r4_armv5te.ipk

dpkg -i --force-architecture /poky/angstrom/matchbox-wm_1.2-r3_spitz.ipk

Problems: keymap, sysvinit, zaurusd

* run depmon -a
* exit (back to poky)

* rm -R ~/debian/poky
* rm -f ~/debian/var/cache/apt/archive
* remove ~/debian/var/log/bootstrap.log & dpkg.log

* cd ~/debian
* tar -czpf ../debian-root.tar.gz .

* copy ~/debian-root.tar.gz, updater.sh, gnu-tar, zImage.bin to SD and flash debian to see how it works

* Post-install actions:
# export TSLIB_TSDEVICE=/dev/input/touchscreen0
# ts_calibrate
# /usr/bin/Xfbdev

TODO: Add download link for all additional packages, and resulting root-fs