Link1 and link 2 from Shu Hui Chen's original pages. Much of what follows simply expands on his notes.

Starting from scratch

Go to familiar and follow the instructions (especially the download/installation instructions). Generally, you want to download the latest version and take it from there. The following is a brief summary.

From familiar you will mainly need two files: a bootldr (the latest at this time is bootldr-sa-2.21.12.bin) and a .jffs2 root file system (the latest at this time is bootstrap-v0.7.2-h3600.jffs2). If your IPAQ is still running WinCE (which these instructions assume -- otherwise, start with the bootloader installation section), you will also need bootblaster.

Connect the IPAQ to a serial cable connected to your machine.

As Shu says, use ActiveSync from a windows machine, or synce from a linux machine. Synce is available from sourceforge. Use one of these to install bootblaster on the ipaq. Instructions for the current version are available at the familiar bootloader page. In general, for a pod IPAQ, it is neither necessary nor useful to save the pre-existing system. It is, of course, quite necessary to verify the success of the operation.

By this time, you no longer have WinCE (though it might be possible to resurrect it) and you need to install Linux.

After the Bootldr is installed

Once this is done, start minicom (Linux) or Hyperterminal (Win) on your host and reset the IPAQ while holding down the center of the joypad. If everything goes well (115200 8N1 serial configuration, no flow control, no hardware handshaking), you should get a boot prompt. See also here for more instructions. Note that minicom does not necessarily come bundled with xmodem, ymodem, zmodem, or whatever your system needs -- you need to figure out how to get the necessary plugins. On debian, this needs the package lrzsz, on other systems you may need the corresponding rpm.

By this time, your bootloader should be installed and running, and you need to install Linux. The commandline of the bootloader is relatively powerful (for a bootloader) -- type 'help' for a (long) menu. The main command you want to issue at this time is partition reset followed by load root. Once that is done (and you start your send of the .jffs2 file -- ^As in minicom, and be sure you use whatever x/y/zmodem your bootloader expects), the file downloads slowly. After that, "boot" should bring up linux (password rootme -- immediately change it with passwd).

Note the first time you boot, the process will be a little slow because the system is computing a host key. Be patient...

Packages

At this point you will need to install some packages, most notably ssh (which requires libcrypto). To find these packages (extension .ipk) use ipkgfind. Once you have downloaded them to your machine, you can run rz on the ipaq, then start the zmodem function in your terminal program to bring the package to the ipaq. After that simply run (for example, for ssh):

ipkg install libcrypto_....
ipkg install ssh_....
ipkg will complain if some crucial element is missing, as in this example:
~ # ipkg install ipaq-sleep_0.7-7_arm.ipk                                      
ERROR: Cannot satisfy the following dependencies for ipaq-sleep:               
         xlibs                                                                 
To fix this, bring in xlibs_..., and on until all dependencies are satisfied.

You probably also want to copy rsync to /usr/bin/. You can get it using either zmodem or ssh.

I've found another useful page to be the Handhelds Wiki, especially the Handhelds Software page.

Network Access

You most likely also need to configure the wireless card. Important settings in /etc/pcmcia/wireless.opts are

    ESSID="PODS"
    MODE="Ad-Hoc"
    CHANNEL="10"
    RATE="2M"
Important settings in /etc/pcmcia/network.opts are
    BOOTP="n"
    DHCP="n"
    PUMP='n'
    # replace the following xxx with the pod number
    IPADDR="192.168.10.xxx"
    NETMASK="255.255.255.0" 
    NETWORK="192.168.10.0"
    BROADCAST="192.168.10.255"
    GATEWAY=""
Everything else in this file can be empty.

To verify that the configs are correct, simply reboot, login, and check your configuration with iwconfig, ifconfig, ping, and ssh.

Getting up to date

See these instructions on uploading a basic system. Note that you will need rsync and ssh. Also note that the first time you do this you will need to use 192.168.10.21 as the source address rather than 192.168.11.21, since you are not yet running podr.

Creating a new kernel

You need to create a new kernel (a) to create a TUN interface, needed by podr, and (b) to install iwevents, also needed by podr.

To create a new kernel, you will need to download the skiff cross-compiler. This can be done from the main main familiar downloads page, by selecting the toolchains link and then the actual toolchain (note, this downloads 2.2.13, you may want a newer one). Note it expects to be installed in /skiff, on post-base I installed it in /usr/local/skiff and symlinked /skiff to it. I also had to find and install ipkg and ipkg-build.

The easiest way I've found is to go to handhels.org and find out how to build a kernel from CVS sources. The latest version used for the pods (as of March 2004) is 2.4.19-rmk6-pxa1-hh30. Note the instructions say:

TAG=K`echo 2.4.19-rmk4-pxa2-hh10 | sed s/./-/g`
whereas I find that the following works better:
TAG=K`echo 2.4.19-rmk4-pxa2-hh10 | sed 's/\./-/g'`

Once you have checked out the source, read README.handhelds. You must copy the config file, then modify it to say CONFIG_TUN=y and CONFIG_ETHERTAP=y (not sure about the last one, but I did it since it seemed safer). I also had to get rid of mwvlan, since it would not compile. Then,

make oldconfig
make dep
make zImage
make modules
../scripts/ipkg-make-kernel-packages $PWD/.. 2-4-19-rmk6-pxa1 hh30
For the last line, I am not sure that the arguments are used correctly, and I am not completely sure what to do if you don't have a hard disk on your ipaq (the example given assumes that you do).

If you are on the pods project, all this has been done on the post base station -- find / -name ipkg-make-kernel-packages -print should give you the current location.

To install the new kernel, it is sufficient to copy it to the /boot/ partition of the ipaq and name it zImage (most conveniently done by repointing the symlink called zImage). The easiest way I have found so far to install the modules is to "make modules_installed", then go look in your /lib/modules for the correct 2.4.19-rmk6... directory (which hopefully doesn't match the number of the kernel you are running on your host machine -- if it is the same kernel, DO NOT RUN "make modules_install" or you will clobber your host kernel's modules), tar the directory, copy it to the ipaq, and untar it there. "scp -r" might also do the same trick, but note that you are replacing the modules directory of the running kernel on the ipaq, so it may be a good idea to rename your IPAQ's old /lib/modules/2.4.19-rmk6... directory before you copy the new one.