ZipIt Adam HOWTO
This package provides an alternative to the OpenZipIt firmware for the ZipIt Wireless Messenger. Like OpenZipIt this firmware includes the BusyBox utilities as well as the Dropbear ssh client and server. Unlike OpenZipIt this firmware includes a web browser (ELinks), however, the OpenZipIt audio applications have been removed to conserve space. Some battery monitoring tools and various other useful utilities are also included. An additional feature of this firmware is that it is modular allowing modifications without the danger of a full re-flash.
Installation of this firmware requires a ZipIt that has been re-flashed with the BURN3 firmware and a NFS server accessible over a wireless network. Re-flashing with the BURN3 firmware makes it possible to boot the ZipIt to a command line, mount a NFS volume, copy files to the ZipIt, and re-flash the ZipIt. It is beyond the scope of this document to describe setting up an NFS server. If you are a Linux user consult the Linux NFS-HOWTO or the documentation provided by your distribution.
Once your NFS server is functioning properly download Adam's Alternate ROM Load from http://www.mib.org/zip/TEST-ROOT/. Extract the files from the archive and copy them to a directory on the NFS server that will be accessible to the ZipIt. Depending on your network configuration you may need to change how the NFS volume is being shared. On Linux this is achieved by editing the
All of the commands in this section are executed on the ZipIt. Although it is certainly possible to type them using the ZipIt's keyboard it may be preferable to connect to the ZipIt from a machine with a full-size keyboard, after network connectivity has been established. BURN3 includes a telnet server so executing
zipit_ip_address is the ZipIt's IP address from a terminal will allow you to login to the ZipIt and execute commands as if you were typing them on its keyboard.
Establish network connectivity
The first step in the installation process is to connect the ZipIt to the network. If your access point does not use encryption, broadcasts its SSID, and uses DHCP connecting is as simple as issuing the command
For more complicated configurations involving an access point that uses WEP or does not broadcast its SSID it will be necessary to configure the ZipIt's wireless interface using
iwconfig before running
udhcpc. If your router does not use DHCP use
ifconfig to specify the ZipIt's IP address manually.
Mount NFS volume
After successfully connecting the ZipIt to the network mount the NFS volume to a directory on the ZipIt. First create a mount point
Then mount the NFS volume
mount -t nfs -o nolock,tcp,intr server_ip_address:/server_folder /mnt/net1
server_folder with appropriate values for your configuration. Next copy all of the files included with Adam's Alternate ROM Load from the NFS volume to the ZipIt's
Create block devices
After copying files from the NFS volume create the two additional block devices that are utilized by Adam's Alternate ROM Load.
mknod /dev/mtdblock4 b 31 4 mknod /dev/mtdblock5 b 31 5
If all went well
ls -l /dev/mtdblock*
should produce something like:
brw-r----- 1 root root 31, 0 May 19 16:11 /dev/mtdblock0 brw-r----- 1 root root 31, 1 May 19 16:11 /dev/mtdblock1 brw-r----- 1 root root 31, 2 May 19 16:11 /dev/mtdblock2 brw-r----- 1 root root 31, 3 May 19 16:11 /dev/mtdblock3 brw-r----- 1 root root 31, 4 May 19 16:11 /dev/mtdblock4 brw-r----- 1 root root 31, 5 May 19 16:11 /dev/mtdblock5
Before re-flashing it is necessary to load several modules that are used by the firmware. These modules are loaded with the commands:
cp -R /mnt/net1/* /tmp insmod /tmp/modules/mtdcore.o insmod /tmp/modules/mtdblock.o insmod /tmp/modules/mtdpart.o insmod /tmp/modules/chips/chipreg.o insmod /tmp/modules/chips/gen_probe.o insmod /tmp/modules/chips/cfi_probe.o insmod /tmp/modules/chips/cfi_cmdset_0002.o insmod /tmp/modules/maps/readwrite_rescue/danger_physmap.o
You are supposed to have the modules folder in the /tmp directory.
Finally it is time to copy the new filesystems to the block devices and re-flash. First copy the new filesystems to the appropriate block devices.
dd if=/tmp/rootfs.gz of=/dev/mtdblock3 dd if=/tmp/opt.cramfs of=/dev/mtdblock4 dd if=/tmp/userprefs.cramfs of=/dev/mtdblock5
to write all of the buffered filesystems to disk. Reboot the ZipIt and if everything went well you should be able to connect to the network using the steps described in the section "Establish network connectivity". In order to automatically connect to a network on boot refer to the section below on customization.
The multiple partitions used by this firmware make it relatively simple to make your own modifications. At a minimum you will probably want to modify the init scripts in
userprefs.cramfs to automatically establish WiFi connectivity at boot. In order to make changes mount
userprefs.cramfs to a temporary directory on your development machine. For example:
mkdir /tmp/userprefs mount -t cramfs -o loop userprefs.cramfs /tmp/userprefs
Then copy the contents of the filesystem to a writable location.
mkdir /tmp/userprefs_modified cp -a /tmp/userprefs/* /tmp/userprefs_modified/
After making changes to the files in
/tmp/userprefs_modified/ make a new filesystem by executing.
mkcramfs /tmp/userprefs_modified /tmp/userprefs_modified.cramfs
Next make the new filesystem available on the NFS volume. Finally download the modified filesystem to the ZipIt, use dd to copy it to the appropriate block device, and sync as describe above. If you wish you can mount the block device that was modified to a temporary directory before syncing and rebooting in order to verify that everything is as it should be.
If the ZipIt fails to boot hold down the lid closed button during boot. This will prevent
userprefs.cramfs from being mounted and will drop you into a shell where you can repair things. The file
rootfs.gz contains the minimal rescue filesystem that makes this possible even if you screw up the filesystems on the other partitions so you probably don't want to mess with it unless you know what you are doing.