[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

RE: Woody on a 486/50



I was working on putting Woody on a Toshiba Satellite T2100CS laptop for a while. It has a 486, but I don't know what speed. It has 8 MB of ram. I got interrupted but made some progress at it. I have some tips.

First, test your memory by booting of a memtest86 boot floppy:

http://www.memtest86.com/

Once you have Linux installed you can leave memtest86 as an alternative kernel that you can choose with LILO or Grub.

Surprisingly, my circa-1994 Toshiba passes memtest86's tests with no errors. They don't build them like they used to.

What you need to do is make a custom minimal kernel and ramdisk, and copy Woody's ramdisk image over to your drive and copy the files out onto a filesystem that won't be needed for installation (/home will work). Do all of your partitioning and filesystem formatting using your minimal install disk. Then boot of your minimal kernel again but use the partition where you copied the woody ramdisk image as your root partition.

I tried using a couple of the mini-distros as described in the 4mb laptops HOWTO but for various reasons it didn't work for me. So I decided I would roll my own distro for this purpose. But as I said I'm not done yet, when I am I will write up a howto and maybe provide a compact ramdisk image.

http://www.tldp.org/HOWTO/4mb-Laptops.html

also see:

http://www.tldp.org/HOWTO/mini/Small-Memory/index.html


What you will want to do is learn how to make your own ramdisk image, and if you haven't already learned how, you will want to build a custom kernel.

You can either make a LILO floppy or a SYSLINUX floppy that boots with the kernel parameters for loading a ramdisk image and prompting the user to insert the disk with the image on it. Sorry, I forget the parameters but look in /usr/src/linux/Documentation

Start by putting all of the files you will need for a minimal linux installation in a subdirectory that has the usual subdirectories that go in / - etc, bin, usr, dev and so on. This will later be copies to the ramdisk image.

Create device files in your ramdisk's dev directory just for the devices you will need to use, like the hard disk, console and so on.

Don't create device files you don't need as each one requires an inode in your ramdisk's filesystem which I think will take up 1k of ram or so. On the gnu parted ramdisk, I found something like 3 megabytes of device file inodes for all manner of raid controllers and network adapters. That makes the disk more flexible but also makes it so it can't boot on a low-mem system.

Probably a good source of information for building ramdisks like this would be

http://www.linuxfromscratch.org/

You will need some shared libraries, especially glibc. Sometimes people save space by using glibc 5 instead of 6. Alternatively you can use a tool that deletes all the subroutines from all your shared libraries that aren't used (even indirectly) by any of your programs. I know there are commercial tools for that from embedded linux vendors but I don't know if there is such a Free tool.

The main user programs you will want are mke2fs or the equivalent filesystem-makers for the filesystems you will want to lay down, a partitioning utility, tar and an ftp client, and mount and of course a shell. There may be other programs you need for your system operation, I think that ld is required to do dynamic linking. I haven't got that far yet. Oh yeah, you will need modutils unless you compile your kernel without module support and build everything in, which isn't that bad an idea for this kind of thing.

Consider using busybox:

http://www.busybox.net/

I'm not sure if busybox provides a shell but if it doesn't use one of the smaller shells like ash instead of bash. You might also want a compact text editor like nano but this shouldn't be necessary.

You will need support in your kernel for TCP/IP networking and for the ethernet adapter you will use, and you will need pcmcia-cs if you are using a PCMCIA ethernet adapter. Alternatively you can set up a PPP server on another linux box and use a null modem cable to get everything via PPP, in which case you will also need the PPP software.

So when you get your ramdisk filesystem's files in place, use "du" to see how big it is in kilobytes. Then create a file full of zeroes that is somewhat larger than that (but not by too much) and use mke2fs to make a filesystem on it. Mount the filesystem image with the loopback driver (you will need loopback support in the kernel you're preparing this on) and use tar to copy your prepared files into the filesystem image:

cd floppy-tree
du
(tells you how big)
cd ..
dd if=/dev/zero of=image.dat bs=1024 count=a-little-bigger-than-du-said-you-need
mke2fs image.dat
(but read mke2fs' man page - use 1k blocks)
mount -o loop image.dat /mnt
cd floppy-tree
tar cvf - . | ( cd /mnt ; tar xf - )
sync
umount /mnt

now you compress the ramdisk image and dd it to a floppy:

gzip image.dat
ls -l image.dat.gz
(if it's not less than 1440k you have a problem)
dd if=image.dat.gz of=/dev/hd0 bs=10240
sync

Now make a boot floppy with your custom kernel configured with only the support for hardware and kernel software you will need for formatting your drive and ftp'ing over a couple files.

Boot off the boot floppy, put in your custom ramdisk. The amount of ram your ramdisk will take up will be the size of the image.dat file you created earlier, this plus the memory for the kernel should be less than the physical ram in your machine. You will also need some physical ram for your user programs, more than you might otherwise because you won't have a swap device.

If it doesn't work, try to make your ramdisk image smaller. What counts is the size of the image.dat file above, rather than the size of the files in it. Keep in mind that each file and directory occupies an inode, and that a symbolic link takes up an inode and a filesystem block for the text of the filename it is linked to. I think hard links (ln without the -s option) will take up less space in your ramdisk as they only require the space for the filename in their directory's inode.

Also try making your kernel smaller. It doesn't matter whether you gzip or bzip2 the kernel, what counts is the size of the running kernel's code and data. But likely you can make the most difference with the least effort by customizing your ramdisk.

Now format your hard drive. Be sure to provide enough swap space, probably several times the size of your RAM. There will be the least wasted space if there is only a root filesystem, but to install this way you need at least one filesystem that won't be used in the installation, so make a filesystem also that will later be used for /home. Alternatively you can have several partitions if you are very careful about planning for your space, perhaps by trying a test installation on a faster desktop machine to see how much space everything needs.

I like to have /, swap, /tmp, /var, /usr and /home partitions on larger machines, mainly to avoid having much filesystem activity in /. That reduces the danger of filesystem corruption, and at some point I'll figure out how to work with a read-only root filesystem.

GNU parted is quite versatile in what it will do with disks but it may be larger than you want, but give it a try:

http://www.gnu.org/software/parted/

Now mount the partition you will use for /home in /mnt. FTP the ramdisk image from woody's floppy set and put it in /mnt. If you gunzipped it before you ftp it you won't need gunzip on your ramdisk. Note that you will need to rename the ramdisk image before you can gunzip it.

mount the ramdisk image:

mv /mnt/root.bin /mnt/root.gz
gunzip /mnt/root.gz
mkdir /woody-ramdisk
mount -o loop /mnt/root /woody-ramdisk

cd /woody-ramdisk
tar cvf - . | ( cd /mnt ; tar xf - )
sync
cd /
umount /woody-ramdisk
umount /mnt
sync
reboot

(So you'll also want umount, sync and reboot on your ramdisk!)

Boot off your minimal kernel again, but this time use the partition you copied woody's ramdisk files to as your root.

Do your install. But don't use the stock kernel woody provides, either use the same kernel as you used for your minimal bootdisk, or make another custom kernel for production use that only has what you need.

However, it is important that you build the same version of the kernel as woody's installer uses. That's because the installer will put in a bunch of modules that won't load into your kernel if they're not the same version. You can upgrade your kernel and modules together after the install if you want.

I suggest using SYSLINUX to make your boot disk because you can edit the kernel parameters with any text editor on Linux, DOS or Windows without having to rewrite the whole floppy like you would with a LILO floppy.

http://syslinux.zytor.com/

Also not you can use ISOLINUX to make a boot CD. If you don't quite know what you're doing, you can use SYSLINUX to make a boot CD too, but it's better to use ISOLINUX.

I learned much of this making a boot CD for my other laptop, a Compaq Presario 1800T. I wanted to resize the partitions using GNU parted, but the parted bootdisk wouldn't load my ramdisk floppy because I have an IDE floppy. I haven't found a way to load ramdisk floppies using my floppy drive (which is an LS-120 Superdisk, it also takes 100 MB floppies) so I muddled my way through creating a boot CD with GNU parted on it.

Mike
--
Michael D. Crawford
GoingWare Inc. - Expert Software Development and Consulting
http://www.goingware.com/
crawford@goingware.com

     Tilting at Windmills for a Better Tomorrow.



Reply to: