2009-06-19 5 views
6

Gibt es irgendetwas, das der Kernel vom Bootloader bekommen muss? Normalerweise ist der Kernel in der Lage, ein System von Grund auf neu zu entwickeln, warum benötigt es also irgendwas von Bootloader? Ich habe Boot-Meldungen vom Kernel wie folgt gesehen.Argumente zum Kernel

"Fetching vars from bootloader... OK" 

Was genau werden die Variablen übergeben werden? Wie werden die Variablen vom Boot-Loader übergeben? Ist es durch Stapel?

+0

Sollte dies nicht auf Serverfault sein? –

Antwort

2

Der Kernel akzeptiert so genannte Befehlszeilenoptionen, die textbasiert sind. Dies ist sehr nützlich, da Sie viel tun können, ohne Ihren Kernel neu kompilieren zu müssen. Was das übergebene Argument betrifft, ist es architekturabhängig. Bei ARM erfolgt dies über einen Zeiger auf einen Speicherort im Speicher oder einen festen Speicherort im Speicher.

Hier ist, wie es auf ARM getan wird. Normalerweise kann ein Kernel den Rechner nicht von Grund auf neu starten. Kann aus dem BIOS sein, aber dann ist es nicht von Grund auf neu. Es muss initialisiert werden, das ist die Aufgabe des Bootloaders.

2

Es gibt einige Parameter, die der Linux-Kernel vom Bootloader akzeptiert, woran ich mich jetzt erinnern kann, ist der vga Parameter. Zum Beispiel:

kernel /vmlinuz-2.6.30 root=/dev/disk/by-uuid/3999cb7d-8e1e-4daf-9cce-3f49a02b00f2 ro vga=0x318 

Werfen Sie einen Blick auf 10 boot time parameters you should know about the Linux kernel, die einige der gemeinsamen Parameter erklärt.

0

Linux akzeptiert Variablen vom Bootloader, damit bestimmte Optionen verwendet werden können. Ich weiß, dass Sie eines der Dinge tun können, damit Sie sich nicht einloggen müssen (Wiederherstellungsmodus) und es gibt mehrere andere Optionen. Es erlaubt hauptsächlich nur Korrekturen, wenn es ein Problem mit etwas gibt oder wenn sich das Passwort ändert. So startet die Ubuntu Live-CD Linux, wenn Sie eine andere Option wählen.

2

Für den Linux-Kernel gibt es mehrere Dinge, die der Bootloader dem Kernel mitteilen muss. Es enthält Dinge wie die Kernel-Befehlszeile (wie einige andere Leute bereits erwähnt haben), wo im Speicher der initrd geladen wurde und seine Größe, wenn ein initrd verwendet wird (der Kernel kann es nicht selbst laden; oft bei Verwendung eines initrd Die Module, die benötigt werden, um auf Speichergeräte zuzugreifen, befinden sich innerhalb der initrd, und sie müssen auch einige recht komplexe Einstellungen vornehmen, bevor sie auf den Speicher zugreifen können, und mehrere verschiedene Kleinigkeiten.

Weitere Informationen zur traditionellen x86-Architektur (32-Bit und 64-Bit) finden Sie unter Documentation/x86/boot.txt (Link zur Version 2.6.30), einschließlich der Weitergabe dieser Variablen an den Kernel-Setup-Code.

1

Der Bootloader verwendet keinen Stack, um Argumente an den Kernel zu übergeben. Zumindest im Fall von Linux gibt es eine ziemlich komplexe Speicherstruktur, die der Bootloader ausfüllt, damit der Kernel parsen kann. So zeigt der Bootloader den Kernel auf seine Kommandozeile. Weitere Informationen finden Sie unter Documentaion/x86/boot.txt.

0

Normalerweise werden die Parameter Befehlszeilenparameter genannt, die vom Bootloader an das Kernelmodul übergeben werden. Bootloader verwenden viele der BIOS-Interrupts zu erkennen,

memory 
HDD 
Processor 
Keyboard 
Screen 
Mouse 
ETC... 

und alle harwares Details beim Booten erkannt werden werden, dh im Real-Modus, dann ist dieser Parameter auf Kernel übergeben.