RELEASE NOTES FOR linux-lite v1.00 ================================== What is it? =========== This is a linux-1.0.9 kernel that I have modified so that it can be compiled and used on most `current' linux systems. It is based upon a linux-1.0.9 kernel that I modified several years ago to allow booting and installation of linux on a system with less than 1 MB of available memory. A lot has changed since linux-1.0.9 was released. If you try to build a untouched v1.0.9 kernel on a current linux system, it will fail immediately. Back then, the now-standard ELF binary format was rare. ELF shared libraries were unheard of. Compiling the kernel as an ELF (vs. a.out) object was not supported until kernel version 2.0 was released. This update makes the v1.0.9 kernel ELF aware, allows building of the kernel with current compiler and binary utilities, and allows for the creation of a smaller kernel than was possible with the original v1.0.9. What good is it? ================ It is great for low memory systems where adding memory is difficult or impossible (proprietary notebook systems, old 386's with DIP or SIPP DRAM, etc. etc.) Many configuration options have been added to allow the user to further reduce the final kernel size. Booting/running linux in less than 1MB of memory should still be possible with this kernel when you use an uncompressed kernel image. On an 8MB 486-100, linux-lite compiles the 2.0.33 kernel 2 minutes faster than when running the 2.0.33 kernel itself! (Your results may vary, depending on hardware and kernel configuration.) It now can run libc-5 ELF binaries, such as those used in the `stable' release of Debian and so on. It has been `taught' how to deal with the `gpm' way of mouse activity as compared to the old `selection' support. It is compatible with linux (ext2) filesystems (partitions) that have been created with recent linux installs. The complete source for the kernel will fit on a single 1.44MB floppy. Compared to the current 11MB or so taken up by linux-2.1, this is a manageable size for someone who wants to get a feel for linux internals without getting overwhelmed by the size of the current source tree. (It may also be useful for introductory OS courses that want to use linux as a teaching aid?) Known Issues: ============== The recent /proc `ps' utilities do not like the /proc file output from this kernel. (Older v1.2 /proc utils will work with both v1.0 and v2.0 kernels). This includes ps, w, uptime, top, and so on. mprotect() is not really supported. This should only affect things like Electric-Fence and so on, which are primarily used by developers for debugging. Use with glibc (aka libc-6) is currently untested. Let me know if you try it out with glibc. Similarly compliling with gcc-2.8.x is expected to break things, as it even breaks linux-2.0/2.1, so use gcc-2.7.2 Not all the drivers that exist in linux-2.0/2.1 are available in this older kernel. Things like HDD, FDD, EXT2, NFS and so on should be fine though. But I am not able to test *all* the drivers that are in v1.0, and nor will I be backporting current drivers into linux-lite either. Options and Compilation Notes: ============================== Note that the kernel can now be built in any dir, being at /usr/src/linux is no longer required. Uncompressed kernel images are back (yay!) - to get one, just simply do a "make Image" instead of "make zImage". If the uncompressed image is bigger than about 524kB then you will have to use compressed kernel images. (Uncompressed ones boot a *lot* faster on old 386's). Both LILO and loadlin will happily boot an uncompressed image still. Builds with gcc-2.7.2 are recommended. At the time of writing, gcc-2.8.x still won't build a 2.0 or 2.1 linux kernel correctly, so I'm assuming it will munge this one too. Builds with an old a.out compiler+binutils (gcc-2.5.8 + libc4) are untested. If you want to try it, edit the top Makefile and change the USE_ELF define. Or just use stock linux-1.0.9 instead. The alignment options to gcc are all set to zero to get the absolute smallest kernel. This doesn't seem to seriously kill performance, as 1.0.9-lite compiles a 2.0.33 kernel faster than 2.0.33 itself (in 8MB). New options that can be turned off at "make config" time to save space: CONFIG_BLK_DEV_FD (floppy support) CONFIG_BLK_DEV_RAM (RAM-disk support) CONFIG_MODULES (modular driver support) CONFIG_BINFMT_AOUT (old a.out executable support) CONFIG_SERIAL (generic serial port support) Note that CAN_LOAD_EGA_FONTS (i.e. setfont) is turned off in console.c to save a bit more space - turn it back on again if you really need it. Some of the translation tables that are rarely used are turned off there too. Similarly, some rare kbd ioctl() support has been #ifdef'd out of vt.c Core dump support has been #ifdef'd out in fs/exec.c to save space. If you need it then change the #undef CORE_DUMPS to a #define CORE_DUMPS. I will make this a CONFIG option next time. The build no longer enters drivers/net if CONFIG_INET is disabled. This saves some build time and final kernel size. Similarly auto_irq support is no longer included if CONFIG_ETHERCARDS isn't set. The serial port table is trimmed down to the standard COM1 -> COM4 ports to save spave. (In hindsight, I should have just #if 0'ed them out instead of deleting them... will do for the next patch) Bad clone support (i.e. invalid signature) for NE1000/2000 cards has been deleted. Similarly for PureDate support in the wd80x3 driver. Again, I should have just #ifdef'ed it out. Next time. The max number of net sockets has been reduced as to reduce the memory footprint. If you run out of sockets, then starting subsequent network apps will fail and you will have to change NSOCKETS back in the file include/linux/net.h The number of virtual consoles has been reduced to four. If you launch more than four getty from /etc/inittab then you will get messages from init like "init: ID nn respawing too fast - disabled for 5 minutes". Either add more VC's (in include/linux/tty.h) or edit inittab and remove the gettys on tty4 -> ttyN. Similarly, if you run X11, you need to leave one free VC for it, so either only run 3 getty or add more VC's. The max number of superblocks has been reduced as to reduce the memory footprint. If you run out you will get a helpful kernel message telling you what to do. Kernel panic messages have been reduced to printing only the instruction pointer at which the panic happened via some macro trickery. If your kernel panics you will have to look up the EIP in the [z]System.map and then look up the appropriate function in the source to see why. (The panic text is still intact in the source, but just not included in the final kernel.) The mem= bootprompt now understands the suffix "k" for kB and "M" for MB. Case doesn't matter. (Before it required the full number of bytes - ugh.) There is a new boot argument "swapdev=" which should only be needed for machines with less than 1.5MB of RAM. It allows enabling of swap just after the root filesystem is mounted and before init is launched. Use it just like you would the "root=" boot argument. The kernel printk buffer has been reduced to 1kB from 4kB (see "dmesg") so it wraps around sooner, but 1kB is typically enough to store all the messages that are printed at boot. --- end of release notes for linux-lite v1.00 ---