DietLinux is a distribution based on dietlibc.
The boot process is optimized for small size, the upcoming 0.2-release should be able to boot from cdrom, floppy or usb-stick on all systems with at least 8mb of RAM.
With the upcoming 0.2-release the boot-process is the same for all media. I got rid of ramdisk images for the root filesystem completely, and shrinked the initrd-images to about 60k (uncompressed). A kernel can be used with the boot system if it has support for initrd, tmpfs and devfs.
You need to configure the bootloader to give the kernel some bootparameters:
We use linuxrc to set up some stuff. It will execle() init later
The initrd is the final root. Though our linuxrc will change it.
Only needed if you didn't tell the kernel at compile time to automatically mount devfs
To come, hints for linuxrc from which device we booted
Bootup, the initrd phase
linuxrc, stage 1
The first part is handled in linuxrc. I'ts described here short for better understanding what's going on.
* linuxrc gets started by the kernel. Besides linuxrc we have two directories in our ramdisk -- /dev with mounted devfs and /rootfs
* linuxrc mounts a tmpfs at /rootfs
* linuxrc creates basic directories in the rootfs (namely dev and initrd)
* linuxrc chdirs to /rootfs, calls pivot_root and chdirs / chroots in the new root. After this we have the old contents of the initrd under /initrd
* linuxrc remounts initrd/dev under /dev, and mounts /proc. With the dev remount we've put the open /dev/console file into the right filesystem.
* linuxrc umounts /initrd with MNT_DETACH set. Most likely initrd will not unmounted immediately but when calling execle() to exec init
For more details please consult the apkg sources.
linuxrc, stage 2
We're now getting to the second stage, still powered by initrd. That's the first stage you can influence without modifying the linuxrc-sources.
* linuxrc creates all directories in the rootfs
* linuxrc mounts procfs and sysfs
* linuxrc inits the built-in packagesystem. This includes trying to find a (a dietlinux media must have a file called `dietlinux-media' in its root) es well es the name of the initial package to load (from dietlinux-media)
* linuxrc loads the initial package (the apkg package system) and execl()s apkg with param -t (starts bootstrap). Most likely /initrd gets freed here, so we have about 60k additional space from now on.
Now it's apkgs turn to bootstrap a package set to the rootfs.