I wrote a set of patches out of concern that even if you compile a 386 kernel a lot of code irrelevent to legacy machines still remains. Things like the Pentium TSC register, DMI information, ESCD parsing, and the use of CPUID do not apply to these machines, but looking at System.map you can see they're still there. Already with these patches I can compile a zImage kernel that is 450kb large (890kb decompressed) with a small initramfs payload, floppy and kernel module support, FPU emulation, that can successfully boot on an ancient 386 laptop with only 1MB of extended memory. Eventually what I'd like to have is the ability to compile a pure 386 kernel with all non-386 functions removed (and perhaps the same for 486 machines). These patches were written against the vanilla 2.6.21.1 kernel. They will have no effect UNLESS you make menuconfig and explicitly enable them there.