Der gesamte Kernel wird beim Booten in den Speicher geladen, normalerweise zusammen mit einem initramfs
heutzutage. (Es ist immer noch möglich, ein System so einzurichten, dass es ohne initramfs
bootet aber das ist auf Desktops und Servern ungewöhnlich.)
Die initramfs
Die Rolle von ist es, die Funktionalität bereitzustellen, die zum Mounten der "echten" Dateisysteme und zum Fortfahren des Bootens des Systems erforderlich ist. Dazu gehören Kernel-Module und auch verschiedene Binärdateien:Sie benötigen mindestens udev
, vielleicht etwas Networking und kmod
die Module lädt.
Module können später in den Kernel geladen werden als nur zu booten, also gibt es keine spezielle Vorbereitung des Kernels durch den initramfs
. Sie können überall gespeichert werden:die initramfs
, /lib/modules
auf dem realen Dateisystem, in einem Entwicklungsbaum, wenn Sie ein Modul entwickeln ... Der initramfs
muss nur die Module enthalten, die notwendig sind, um das Root-Dateisystem (das den Rest enthält) einzuhängen.
Der gesamte Kernel (aber nicht seine Module) wird in den Speicher geladen. Wenn es Module gibt, die der Kernel benötigt, bevor Dateisysteme verfügbar sind (dies bedeutet normalerweise die Treiber für die Dateisysteme und ihre Geräte), dann befinden sich diese Module im initramfs (im Speicher), und der Kernel lädt sie von dort. Andere Module können später aus dem Dateisystem geladen werden.
Der Kernel in modernen Linux-Setups ist stark modulbasiert, d. h. der eigentliche Kernel (der beim Booten in den Arbeitsspeicher geladen wird) enthält nur das Nötigste an Funktionalität, der Rest wird als Module kompiliert (zur Laufzeit ladbar). Damit dies auch dann funktioniert, wenn z.B. die zum Booten erforderlichen Geräte oder Dateisysteme sind Module, ein initramfs
wird mit dem Kernel geladen (wie der Name schon sagt, ist dies ein RAM-Bereich mit einem einfachen Dateisystem, das beim Booten gemountet wird). Dieses temporäre Dateisystem wird auf /
gemountet , und enthält Startprogramme und die erforderlichen Module. Einmal den Start auf initramfs
fertig ist, führt Linux einen pivot_root(8)
aus , mit dem echten /
und das Werfen der initramfs
Inhalt.
Der Sinn dieser Komplexität liegt darin, dass z.B. eine Distribution kann eine kompilieren Kernel (minimaler Kernel und vollständiger Modulsatz) und bei der Installation des Kernels einen initramfs
erstellen abgestimmt auf Hardware und Setup der Zielmaschine. All dies ist aufgrund der großen Vielfalt an Geräten und Konfigurationen von "Personal Computern" erforderlich.