Target Hardware

This procedure is known to work on the 96/128 T20 (ie. 96Meg flash). The scripts work by patching an existing firmware image, so you need to have the correct file for your machine (download it from the hp website). The patched image is then flashed into the T20, so when it boots it loads our kernel and initrd (then they take control and load DSL from an external USB flash drive).

Different models of T20 have different operating system (OS) options - this procedure is dependent on there being an image for your machine which we know how to work with - this is why the original OS is important, even though it is going to be completely replaced by the new OS.

I'm confident that the scripts will work on any WinNT based image file - if there is a problem, you can contact me and we can try to figure it out.

It's not yet working for WinXP images. Fortunately, PXE booting is a standard capability in the WinXP machines, so you can boot linux that way if you need to.

For WinCE (.NET or otherwise), you need a different howto - see

These are the models of T20/T30 I am aware of, with emphasis marking the ones that this process should work with:


OS Flash size
CE (2.12) 16
CE (.NET) 16, 32
NTe 48, 64, 96, 128
XPe 192, 256


OS Flash size
CE (.NET) 16, 32
NTe 64, 128
XPe 192, 256

Assuming no problems occur, the process of flashing is reversible - only the disk image within the T20 image file has been modified, and the flashing system is left intact. As far as I am aware, there is nothing to stop you reflashing a T20 with its original image file and thereby returning it to its virgin microsoft glory.

This howto is primarily about running DSL on the T20, but in theory you could install an appropriate kernel/initrd and boot any linux from an external USB drive - I have used this method to boot Debian Etch, as well as the DSL setup described here.

Things you need

  • Install DSL (DamnSmallLinux) on a USB flash drive (takes up a minimum space of about 50M).

  • Test the DSL install on an ordinary PC to make sure that it works (you might need a boot floppy to do this, since a lot of computers won't boot off USB). Note that you might need to install DSL as USB-ZIP - some computers like that better than the 'normal' USB-HDD setup. I don't think that the USB-ZIP setup will affect DEvoSL, but I haven't tested.

  • You need a grasp of basic linux command-line (although I guess you could probably do it all using gui tools and the patch/script I have provided).

  • This HowTo has been written for someone familiar with computers in general, but not necessarily much linux.

  • A working WinNT firmware image file for your T20. You should really test this by downloading it (unmodified) to the T20 - if you can't get this to work then you're not going to succeed with installing linux in it.

  • You should subscribe to the Open Evo T20 mailing list at - it's a good place to ask questions, and to tell everyone of your success :-)

Imperfections & Oddities

  • The T20 is a legacy-free machine, so it has only USB (USB1.1) ports and no PS/2 keyboard port. This means that the keyboard won't work in grub (it doesn't understand USB keyboards), and you can't do interactive fiddling with boot options that you can normally do in grub. We have to use a hard-coded presetmenu.

  • Also due to the way the T20 was meant to be used (client for a server), it doesn't have a normal internal clock (RTC), hence DSL has no idea of the time at bootup and assumes it is midnight of 13 Jan 1977. If you need it to know the time then you should probably get it to connect to a timeserver after booting. This isn't terribly difficult, and can be done with a short lua script (within approx 1s accuracy - more effort is required to get better accuracy)(example script in the articles section). UPDATE: it turns out that there is an RTC, but it has no battery. See the mailing list archives around 2007-08-08 and t20 clock battery

  • Since it doesn't know the time, DSL will complain about timestamps being in the future when it is reloading user home from the flash drive. This doesn't seem to bother it, though - it still works.

  • Standard DSL boot includes probing for a AHA1542 SCSI interface. On the T20, when it tries to probe this module (looking for something to boot from), it freezes for just over a minute, before continuing normally (this freeze doesn't seem to happen anymore, with DSL v4). This can be fixed by modifying the DSL boot script (linuxrc). Note: on the face of it, it seems that you might fix this by using the 'noscsi' boot option, but since USB is seen by linux as a SCSI device, this won't work.

  • Being a slow old machine, the T20 is quite slow to boot. Total time to boot to DSL gui is just over 4 minutes. This consists of about 30s of internal stuff (verifying internal flash, displaying a boot screen) before grub gets control, and then about 3min 40s more to get to an X11 desktop (including a minute of pointless waiting for the AHA1542 if you're using an older version of DSL).

  • During boot, DSL bleats about "can't locate module block-major-2" - this is due to the lack of a floppy drive (floppy drives are block devices of major type 2). It doesn't seem to cause any problems with DSL.

  • I don't know how to access the internal flash after boot. There's something weird about it. This is not a problem though - grub can find the files and load them, and from then on we are relying on the external flashdrive. There is a version of DSL with the knoppix image built into the initrd - using this it is possible to have the T20 boot entirely from internal flash. There are some inconveniences: DSL still can't access the flash after boot, the whole knoppix image gets loaded into memory (consuming quite a lot), and you still need external flash if you want to store any non-volatile data. I'm led to believe that MTD drivers may be able to access the internal flash, but I've not investigated it myself.

  • The boot device is set as /dev/sda1. If you have two USB drives plugged in (eg. one for boot and one for data) and the wrong one gets enumerated as sda, then the boot will fail. Enumeration is consistent from boot to boot with the same set of devices plugged in, so it should be possible to find a way around the problem. This should be fixable by setting the root device with a UUID - look at: or or or

  • If you set a non-zero timeout on the grub presetmenu, grub will sit and wait a very long time - it seems the "time" clock at that stage does not run at a normal speed (if at all - I don't know if it will ever time out). If you set a timeout of 0, then it never times out (and you can't use the keyboard because grub doesn't understand USB keyboards) - you need to have no timeout line at all in the presetmenu. (OK, I'm working from memory here, but I think that is right)


Obligatory pointless photo of DSL running on T20:


Resource usage shown onscreen by DSL:

Resource usage

(this was not a completely clean boot - there was some superfluity)