How to manually install Palm OS on a LifeDrive HDD

So your LifeDrive HDD has died or you've somehow managed to wipe it? These instructions explain (AT YOUR OWN RISK) how to reinstall Palm OS manually. This will definitely void your warranty, so you're best off getting Palm to do it instead if you can. You can also use this technique and customise the ROM zip. For example I just fully removed that annoying 'AddIt' program.

Stuff you need:

Automatic way

To automagically create a new ROM and even write it to disk, try these steps:

git clone
cd modrom

Updated to match Sourceforge's new subversion setup. If you tried it earlier and it failed while looking for, it will work now.

Manual, long way

Palm was nice enough to include basically everything we need in LifeDrive 2.0 update. Goto and grab the appropriate version for your language.

I tried both of these:

There doesn't seem to be any differences in the actual ROM partition, so it probably doesn't matter which you use.

First you need to unpack the PalmOS out of the installer:

$ unzip ~/downloads/ 
Archive:  /home/ato/downloads/

  inflating: LifeDrive 2.0 Updater.exe

$ cabextract 'LifeDrive 2.0 Updater.exe'
Extracting cabinet: LifeDrive 2.0 Updater.exe
  extracting Disk1/
  extracting Disk1/data1.hdr
  extracting Disk1/
  extracting Disk1/ikernel.ex_
  extracting Disk1/layout.bin
  extracting Disk1/Setup.exe
  extracting Disk1/Setup.ini
  extracting Disk1/setup.inx

All done, no errors.

$ mkdir data
$ cd data
$ unshield ../Disk1/ 
Cabinet: ../Disk1/
  extracting: ./corecomp.ini
  extracting: ./ctor.dll
  extracting: ./objectps.dll

Now you should find a whole bunch of pdb and prc files. The ones we're interested are a split up zip file ( that contains everything that's part of the devices' 'ROM area'. To put it back together grab the tool from Hack&Dev subversion:

$ svn cat >

We then unpack each of the pdb files, stick them together in order and skip the first 32 bytes, since it contains a 'HACKSPLIT' header.

$ ls | sort | xargs -ti python {} - | dd skip=1 bs=32 >
python - 
python - 
python - 
python - 
python - 
python - 
python - 
python - 
python - 
python - 

Check to make sure is valid:

$ du -b
$ md5sum
$ unzip -l
  Length     Date   Time    Name
 --------    ----   ----    ----
   110616  11-03-05 13:43   1.jpg
   165927  11-03-05 13:43   10.jpg
   524288  11-03-05 13:43   100.asf__512k_a

To make a valid ROM partition, we need to stick an 'acecafe0' header on the front of the zip that tells the PalmOS bootloader where on the disk (in sectors) and how long (in bytes) the zip is. I wrote to do just that:

$ svn cat >
$ python -c > rom-partition
$ md5sum rom-partition 
639952c7a50e8d12d1d9351f3cbe9aa6  rom-partition

Since PalmOS expects some strange C/H/S values that confused every partition manager I tried we need to manually partition the disk. The command below will write the stock partition table to the file table.sct.

$ echo 'AAAAAAAAAAAAAAAAAAAAAQEABlgPCD8AAACACwIAAFgQCAAoHAu/CwIAgLAAAAAoHQsLz13xP7wCAIBLdwAAAAAAAAAAAAAAAAAAAAAAVao=' | python -c 'import base64,sys;sys.stdout.write("\0"*432+base64.b64decode(' > table.sct

The next step WILL VOID YOUR WARRANTY. Remove the two rubber non-slip things from the screw holes near the top of the back of the LifeDrive. Unscrew the screws with a torx or appropriately sized flathead screwdriver. Insert something strong and flat into the slits on the sides of the handheld. Only insert it part of the way or you'll damage the plastic. Carefully prise the metal back off. Unscrew the two screws at the bottom holding the plastic frame in place. Disconnect the speaker plug (in the square hole next to the speaker) and remove the plastic frame. Disconnect the battery plug. Void you warranty by breaking the 'void if removed' sticker and remove the microdrive.

Plug the microdrive into your PC. If you're using an IDE->CF adapter, turn your PC off first and when you turn it back on, issue this command to turn off DMA:

hdparm -d0 /dev/hdX

If you're using a USB CF reader /dev/XdX will be something like /dev/sda. With a IDE->CF adapter it will be something like /dev/hdc.

Write the partition table to disk:

$ dd if=table.sct of=/dev/XdX conv=notrunc

1+0 records in
1+0 records out

And now the actual ROM partition:

$ dd if=rom-partition of=/dev/XdX seek=134079 bs=512

40001+1 records in
40001+1 records out

Put the microdrive back in your LifeDrive, reconnect the battery and with any luck, watch it boot PalmOS. The other two partitions will be automatically formatted by PalmOS, so you don't need to worry about them.

Thanks to rayban and Shadowmite for information about the structure of the updater and ROM partition, pronobozo for funding card reader and beer and fabio_kell for reminding me to try this out.


  • 23-05-2006 Updated links to new SVN layout
  • 24-05-2006 Python 2.4 is required, not 2.1. Thanks Sebastion.
  • 24-11-2006 Ported to wiki
  • 24-11-2006 Added
  • 05-12-2006 Added modrom.git steps.
  • 07-11-2008 Updated modrom.git to reflect new git setup.
  • 09-18-2009 Updated URL to git repository for modrom.git
Last modified 10 years ago Last modified on 09/18/09 20:40:10