Subject: Firmware and kernel image compression
To: None <tech-kern@netbsd.org>
From: Charles Hannum <abuse@spamalicious.com>
List: tech-kern
Date: 09/17/2002 00:11:00
So, I've looked around a bit, and there are several compression
techniques that have very small and fast decompression engines.  My
current favorite is called UCL.  There's a web site about it at:

http://www.oberhumer.com/opensource/ucl/

The decompression engine for the `best' mode is around 640 bytes when
compiled from C code on a PC.  Hand-tuned assembler is significantly
smaller.

More interestingly, it actually compresses the firmware images I
tested (cz, isp and ti) *better* than gzip.

So, my plan is to add support for decompressing UCL images to libkern,
and compress the firmware images in the kernel.  In addition, it might
make a lot of sense to use this as a default method for compressing
kernels, as it would make the boot block ~25K smaller (on PCs; even
more on other platforms) if we built them without gzip support.

I realize that this package is GPLed, and I do not intend to put GPLed
code in the kernel.  I will clone the decompression engine and provide
a non-GPLed version.

Does anyone have (useful, constructive) comments on this before I do
it?