GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Wird der gesamte Kernel beim Booten in den Speicher geladen?

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.


Linux
  1. Linux – Was bedeutet das virtuelle Kernel-Speicherlayout in Dmesg?

  2. Linux-Kernel-Gerätetreiber zum DMA von einem Gerät in den User-Space-Speicher

  3. mmap:wird die zugeordnete Datei sofort in den Speicher geladen?

  4. Wie bereinige ich das /boot-Verzeichnis unter LINUX Mint?

  5. Wie deaktiviere ich die Kernel-Anmeldung im systemd-Journal?

Informationen zu geladenen Kernelmodulen mit dem Lsmod-Befehl auflisten

CentOS / RHEL 6:So booten Sie in den Einzelbenutzermodus

Kernelmodul beim Booten überspringen

Wie kann ich einen Speicherblock aus dem Linux-Kernel reservieren?

Wohin geht der verbleibende Speicher von vm.overcommit_ratio?

Was nützt es, einen Kernel-Teil im virtuellen Speicherbereich von Linux-Prozessen zu haben?