Your Zipit looks like this when booting U-boot. No lights, blank screen, no sign of life!
A few words of warning first: The following instructions have been tested by me once and only once. You stand a chance of bricking your Zipit. I can’t be held responsible if you brick your Zipit either following these instructions or failing to follow the instructions. If you brick it, you will either need to build or obtain a JTAG interface to fix it. You probably should consider doing the serial mod first before you reflash with U-boot anyways just so you can see any error messages on the console if you get stuck. MY instructions are NOT for reflashing from a stock kernel but there are instructions in the README. If you haven’t already reflashed to the Open Zipit boot loaders then you will need to follow a different procedure to upgrade to U-boot. Lastly, you will not be able to use SDHC cards after you upgrade so 2gb will be the limit although I understand there is already a new version of U-boot which adds the SDHC drivers. Make sure your Zipit is plugged in and fully charged. This is cutting edge stuff for the Zipit. You probably don’t need to go to the trouble and the risk of this procedure to enjoy using your Zipit as a pocket-sized Linux device. Read this whole post and the README before you attempt flashing U-boot.
With that out of the way, let’s get started. I’m using Mozzwald’s z2buntu to do the actual flashing of U-boot. This distribution works well because it doesn’t have X11 on it by default to muck things up. You’ll need to log in as root or use sudo. Don’t get too attached to this install because you will be throwing it out the window soon enough.
First you’ll need to wget z2-uboot-06262010.tar.gz on your Zipit. The md5 hash is c917bfd057e5bfd7e0a50e44e4192d25. Untar the file, changed to the uboot-rel directory and run:
sudo ./z2debian.sh
You’ll see a few weird messages that freaked me out. They say stuff like /dev/mtdblock0 no space left on device. Don’t worry about these. The script writes 0xFF to the flash memory before it done flashes until it runs out of room. After all this is done, pull out the battery, and remove the AC to clear the ram entirely. Then plug it all back in.
Here is more weirdness, if you boot up your system right now, there is NO way to tell anything is happening. It will look dead dead dead. No lights, no nothing. The only sign of life you can get is if you push the reset button. That will cause the keyboard light to briefly flash. If you have done the serial mod, this would be a good time to fire up a terminal and see if everything went well. If you hit the reset pin while plugged into the Zipit, you should see this in your terminal:
From here, you can see that U-boot is not finding the kernel partition that it needs to on the flash card. Also, Mozzwald’s script was supposed to load a static linked kernel into flash that would be bootable by U-boot but something is a little screwy with the flasher script at the moment. No worries since we can fix that later. I don’t know much about U-boot but I do know it’s far more powerful than the blob loader I was using. The difference is that U-boot allows you to boot any properly build kernel that you stick in the primary fat32 partition. One command I know that you can do is “printenv”. This will show you current loaded environment variables:
After you’ve tried that out, I’m sure you are ready to make your Zipit actually boot up again. If you’ve gotten as far as the U-boot shell, at least you aren’t bricked. If you haven’t done the serial mod, you are probably pissing yourself at this point thinking you probably bricked your Zipit. Relax, take a deep breath and hit the reset button. If the keyboard light flashes quickly, you are probably not bricked. No guarantees though.
You will now need to download Mozzwald’s U-boot ready tarball. While you are waiting for that, you need to partition a SD card as follows:
- partition 1: vfat(fat32) 32-64MB (this partition holds the uImage and uboot.script files)
- partition 2: ext3 for the remainder of the space (this is where your root fs goes)
I used gparted under Ubuntu to complete the partitioning operation since it’s free and easy to use. Make sure your SD card is plugged in and recognized but unmount it if it’s not already.
After the new partition scheme on the SD card is created, mount the card and change directories to the mountpoint (/media/z2buntu on my system), untar the filesystem into place with:
sudo tar -pxvf /path/to/z2buntu-uboot-rootfs.tar.bz2
There is another tar file inside of the main z2-uboot tarfile that you downloaded first(z2-uboot-06262010.tar.gz). The file is called z2-2.6.35-rc3.tar.gz. Untar that file and then:
cd lib/modules/2.6.35-rc3+/kernel/
You need to copy the uImage file from that directory to the vfat partition on your SD card. You’ll also need the uboot.script file that lives in the root directory of the z2-uboot-06262010.tar.gz tarfile. You should now be ready to put your SD card back in the Zipit and boot it up. If you did everything correctly, it should look like this after a few seconds of being completely blank with no lights on:
More caveats. To quote Mozzwald, “things won’t work the same anymore”. You will want to disable your power management scripts for now. Closing the lid could cause you to get stuck in a blank screen loop. In most root file systems it just involves commenting out some lines in your rc.local and perhaps making a few other changes. I would suggest jumping in the /etc/rc.local file as soon as you get booted so that you can tweak the Zipit-specific settings. The files that I’m linking to above are NOT the newest and latest versions and there are things in them that I know are broken but none of it is unfixable. I’m providing this set of instructions so people can see that U-boot is still in a very experimental stage. I wouldn’t not suggest U-boot for 99.9% of the Zipit hackers out there but if you are dying to build your own custom kernel for the Zipit, U-boot is really your only option.
Why would I go to all this trouble to seemingly downgrade my Zipit you might ask? This brings me one step closer to Zipit nirvana with the Zipit USB mod. A custom kernel is required to have the USB host drivers in it so this is a necessary evil. Many thanks to Marex for U-boot, gpsfan for pioneering the USB mod and being one of the early testers/tweakers of U-boot, rkdavis for bricking one of his Zipits trying to upgrade to U-boot, and especially to Mozzwald for putting up with at least 5 pages of questions that I asked him regarding this mod and for providing all of the files I’ve linked to above. None of this is my work and the credit belongs to them and a few others for pioneering this hack.
If you are interested in buying your own Zipit to hack and you like the information on my site, please buy your Zipit using this link and support my site. You won’t find them anywhere cheaper than that anyways.