what's the processing sequence for initramfs during boot?
Andy Green
andy at warmcat.com
Sat Sep 8 12:29:45 UTC 2007
Somebody in the thread at some point said:
> i've asked about this on the kernel newbies list, but i want to ask
> it here in a slightly different, fedora-centric way.
>
> the short form: what is the precise sequence of kernel boot
> regarding the initramfs (both the internal and external
> possibilities)?
>
> the long form: i'm reading the docs and trying to understand the
> intricacies of the boot sequence regarding how the kernel deals with
> the initramfs. first, AIUI, every built kernel has an *internal*
> compressed cpio initramfs image although, by default, it's "empty."
>
> now, i opened up one of the internal cpio initramfs images that's
> generated when i do my own kernel build, and it contained;
>
> drwxr-xr-x 2 root root 0 Sep 7 16:14 /dev
> crw------- 1 root root 5, 1 Sep 7 16:14 /dev/console
> drwx------ 2 root root 0 Sep 7 16:14 /root
>
> so it's not truly "empty" but it's pretty close. anyway, onward.
New to me... but I do know that having an (external) initrd at all is
completely optional. You can (and I think Debian does it this way; I
certainly do it that way on embedded devices) get the kernel to mount
the filesystem on the /root= partition directly and jump straight into
the init program found on there. Maybe that is in fact done via this
mysterious internal cyst of an initrd, I don't know.
> based on my reading, it appears that, when the (2.6) kernel starts
> to run, it allocates a tmpfs-based "rootfs" (always, without
> exception) and copies into it the contents of the internal initramfs
> image (again, without excepton). is this correct so far?
New to me, I only ever used an external initrd. Sounds like it could be
pretty cool in a pinch though.
> once that's done, what happens if there's an executable "init" file
> in the rootfs? does the kernel simply pass control to that
> executable? if that's true, that means that there would be no way to
> process regular kernel command-line parameters so, despite what the
> documentation seems to suggest, i can't believe that's what's
> happening.
Not sure what you mean about "no way to process regular kernel
command-line parameters", you can always cat /proc/cmdline from userspace.
> on the other hand, let's say there's no "init" in that internal
> initramfs. then, AIUI, the kernel will check whether it's been passed
> a second initramfs image (that would be the one identified in
> /etc/grub.conf via the "initrd" directive). and in the case of
> fedora, that's the one created by running "mkinitrd" during the kernel
> installation process, which *does* have an "init" script which fires
> up "nash" and takes over, etc, etc.
>
> but, once again, even if that happens, at what point in all of that
> would a kernel boot-time parameter of, say, "root=" be processed?
> surely *something* has to deal with that but in all of the above,
> where is that being done? and do i have the order even remotely
> correct?
The "init" nash script in the fedora external initrd gets nash to sort
out the real root device and to pivot_root into it, near the end of the
init script.
-Andy
More information about the users
mailing list