Differences between revisions 2 and 3
Revision 2 as of 2005-11-16 17:24:39
Size: 1461
Editor: PeMac
Comment:
Revision 3 as of 2005-11-16 17:28:50
Size: 1984
Editor: PeMac
Comment:
Deletions are marked like this. Additions are marked like this.
Line 10: Line 10:

It includes :

# A small C library ("klibc") will be merged to support initramfs applications.

# A small ["kinit"] application will be created with klibc. In the beginning, it will only do enough work to show that the mechanism is functioning properly.

# The ["initrd"] (initial ramdisk) subsystem will be moved into kinit, and out of the kernel itself.

# The mounting of the root filesystem will be moved to user space. A lot of code for dealing with things like NFS-mounted root filesystems will go away.

The basic idea behind initramfs is that a cpio archive can be attached to the kernel image itself. At boot time, the kernel unpacks that archive into a RAM-based disk, which is then mounted and used at the initial root filesystem. Much of the kernel initialization and bootstrap code can then be moved into this disk and run in user mode. Tasks like finding the real root disk, boot-time networking setup, handling of initrd-style ramdisks, ACPI setup, etc. will be shifted out of the kernel in this way.

An obvious advantage of this scheme is that the size of the kernel code itself can shrink. That does not free memory for a running system, since the Linux kernel already dumps initialization code when it is no longer needed. But a smaller code base for the kernel itself makes the whole thing a little easier to maintain, and that is always a good thing. But the real advantages of initramfs are:

  • Customizing the early boot process becomes much easier. Anybody who needs to change how the system boot can now do so with user-space code; patching the kernel itself will no longer be required.
  • Moving the initialization code into user space makes it easier to write that code - it has a full C library, memory protection, etc.
  • user-space code is required to deal with the kernel via system calls. This requirement will flush a lot of in-kernel "magic" currently used by the initialization code; the result will be cleaner, safer code.

It includes :

# A small C library ("klibc") will be merged to support initramfs applications.

# A small ["kinit"] application will be created with klibc. In the beginning, it will only do enough work to show that the mechanism is functioning properly.

# The ["initrd"] (initial ramdisk) subsystem will be moved into kinit, and out of the kernel itself.

# The mounting of the root filesystem will be moved to user space. A lot of code for dealing with things like NFS-mounted root filesystems will go away.