Inhalt

2. Übersicht über die BootPrompt-Parameter

In diesem Abschnitt werden einige Programme vorgestellt, die zur Weiterleitung von Kernel-Bootparametern zum Kernel selbst verwendet werden können. Es wird ebenfalls erklärt, wie die Parameter verarbeitet werden, welchen Beschränkungen sie unterliegen und wie sie zu jedem passenden Gerät, für das sie bestimmt sind, weitergeleitet werden.

Man sollte unbedingt beachten, daß innerhalb eines Bootparameters keine Leerstellen verwendet werden sollten, nur zwischen getrennten Parametern. Mehrere Werte für einen Parameter müssen durch ein Komma getrennt werden und zwar wiederum ohne Leerstellen. Richtig wäre z.B. dieses Beispiel:

ether=9,0x300,0xd0000,0xd4000,eth0  root=/dev/hda1

Nachfolgendes Beispiel ist hingegen falsch:

ether = 9, 0x300, 0xd0000, 0xd4000, eth0  root = /dev/hda1

Sobald der Kernel erst einmal läuft, kann man jederzeit mit dem Befehl

cat /proc/cmdline

nachschauen, welche Parameter an den Kernel übergeben wurden.

2.1 LILO (LInux LOader)

LILO (LInux LOader) von Werner Almesberger ist das am häufigsten verwendete Programm zur Übergabe der Parameter. Das Programm hat die Fähigkeit, verschiedene Kernel bzw. Betriebssysteme zu booten. Die meisten Distributionen verwenden standardmäßig LILO, um Linux und z.B. auch Windows zu starten. LILO kann DOS, Windows, OS/2, Linux, FreeBSD, etc. ohne Schwierigkeiten booten und ist zudem äußerst flexibel.

Nach dem Einschalten des Computers wird bei den meisten Installationen LILO gestartet. Drückt der Anwender nach der Meldung LILO die TAB-Taste, so gelangt er zum Prompt von LILO. Ansonsten wird nach eine festgelegten Zeit automatisch das Standardsystem gestartet. In der Regel wird hier durch die Eingabe eines label-Eintrages aus /etc/lilo.conf das zu startende Betriebssystem bzw. Linux Kernel ausgewählt. Typisch sind Labels wie linux, backup und msdos. Falls ein Bootparameter an den Kernel übergeben werden soll, kann man dies an dieser Stelle tun. Der Parameter wird einfach, durch ein Leerzeichen getrennt, an das Label angehängt. Folgendes Beispiel soll dies verdeutlichen:

LILO: linux root=/dev/hda1

In der Regel möchte man natürlich nicht bei jedem Booten die Parameter per Hand eingeben müssen. Hier hilft die Option append=, die der Konfigurationsdatei von LILO hinzugefügt werden kann und deren Parameter dann automatisch an den Kernel übergeben werden. Man muß einfach nur etwas wie

append = "foo=bar"

in die Datei /etc/lilo.conf einfügen. Dieses kann entweder am Anfang der Datei eingefügt werden, so daß die Parameter für alle Abschnitte der Datei gültig sind, oder in den Abschnitt eines bestimmten Kernels, so daß nur diesem die Parameter übergeben werden. Eine ausführliche Beschreibung ist in der ausgezeichneten Dokumentation von LILO zu finden.

2.2 loadlin

Ein anderer weitverbreiteter Linux-Loader ist loadlin. Dies ist ein DOS-Programm, das die Fähigkeit besitzt, einen Linux-Kernel vom DOS-Prompt aus zu starten, wobei Bootparameter übergeben werden können.

Sehr nützlich ist die Möglichkeit, Linux von DOS aus zu starten, wenn man bestimmte Hardware besitzt, die von Linux erst dann unterstützt wird, wenn sie von dem der Hardware beiliegenden DOS-Treiber in einen bestimmten Zustand versetzt worden ist. Ein gutes Beispiel sind die Soundblaster-kompatiblen Soundkarten, welche den DOS-Treiber benötigen, um ein paar geheimnisvolle Register ziehen zu können, um die Karte in einen SB-kompatiblen Modus zu bringen. Das Booten von DOS mit dem zur Verfügung stehenden Treiber und das anschließende Laden von Linux mit LOADLIN.EXE vom DOS-Prompt aus verhindert das Zurückschalten der Karte in den vorherigen Zustand, was beim erneuten Booten der Fall wäre. So jedoch bleibt die Karte in einem SB-kompatiblen Modus und ist somit unter Linux verwendbar. Auch Plug&Play Hardware kann auf diese Art und Weise initialisiert werden.

Es gibt auch noch andere Programme, die zum Booten von Linux verwendet werden können. Auf dem lokalen Linux-FTP-Server erhält man unter system/Linux-boot/ die komplette Liste aller verfügbaren Programme.

2.3 Das Hilfsprogramm »rdev«

Es gibt einige Kernel-Bootparameter, deren Standardwerte an bestimmten Stellen im Kernel-Image selbst gespeichert sind. Es gibt ein Hilfsprogramm namens rdev, das auf den meisten Systemen installiert ist und das weiß, wo sich diese Werte befinden und wie sie geändert werden können. Dieses Hilfsprogramm kann auch Dinge ändern, die kein Kernel-Bootparameter-Äquivalent besitzen, wie z.B. der standardmäßig verwendete Grafik-Modus.

Das Hilfsprogramm rdev ist gewöhnlich auch unter den Namen swapdev, ramsize, vidmode und rootflags aufrufbar. Diese Namen zeigen die fünf Änderungsmöglichkeiten durch rdev an: das Root-Device, das Swap-Device, die RAM-Disk-Parameter, der Standard-Grafik-Modus sowie die readonly/readwrite-Einstellung vom Root-Device.

Weitere Informationen über rdev erhält man nach Eingabe von rdev -h oder durch die Lektüre der bereitgestellten Manpage (man rdev).

2.4 Sortierung der Parameter durch den Kernel

Die meisten Bootparameter sind folgendermaßen strukturiert:

name[=wert_1][,wert_2]...[,wert_11]

name ist hierbei ein einzigartiges Schlüsselwort, das Aufschluß darüber gibt, für welchen Teil des Kernels die entsprechenden Werte bestimmt sind. Mehrere Bootparameter werden als Liste nach obigem Format an den Kernel übergeben, wobei die einzelnen Parameter durch Leerzeichen getrennt werden. Man beachte das tatsächliche Limit von 11 Parametern. Der bestehende Code kann nur 11 durch Kommas getrennte Parameter pro Schlüsselwort verarbeiten. In ungewöhnlich komplizierten Fällen kann man jedoch dasselbe Schlüsselwort mit 11 zusätzlichen Parametern erneut benutzen, vorausgesetzt, die Setup-Funktion unterstützt dies. Man beachte auch, daß der Kernel die Liste in maximal zehn Ganzzahlen-Parameter und eine anschließende Zeichenfolge unterteilt. Das heißt, man kann nicht wirklich 11 Ganzzahlen bereitstellen; dies ist höchstens durch Konvertierung des 11ten Parameters von einer Zeichenkette in eine Ganzzahl im Treiber selbst möglich.

Die Sortierung findet hauptsächlich in linux/init/main.c statt. Zuerst überprüft der Kernel, ob der Parameter zu einem der speziellen Parameter wie root=, ro, rw oder debug gehört. Die Bedeutung dieser speziellen Parameter wird im weiteren Verlauf dieser Dokumentation beschrieben.

Der Kernel durchsucht dann eine Liste von Setup-Funktionen, die im bootsetups-Array gespeichert ist, um zu sehen, ob ein Treiber oder ein Teil des Kernels für die entsprechende Zeichenkette, wie z.B. foo, eine Setup-Funktion setup_foo() registriert hat. Würde man dem Kernel die Zeile foo=3,4,5,6,bar übergeben, dann würde dieser den bootsetups-Array durchgehen, um herauszufinden, ob foo registriert ist. Falls dies der Fall wäre, würde der Kernel die Setup-Funktion, die mit foo verbunden ist, aufrufen und dieser die Ganzzahlen-Parameter 3, 4, 5 und 6 übergeben, wie sie auf der Kernel-Kommandozeile angegeben wurden. Außerdem würde er ebenfalls die Zeichenkette bar übergeben.

2.5 Umgebungsvariablen setzen

Alles, was aussieht wie foo=bar und nicht als Setup-Funktion akzeptiert wird, wie oben beschrieben, wird dann als zu setzende Umgebungsvariable interpretiert. Ein Beispiel wäre die Verwendung von TERM=vt100 oder BOOT_IMAGE=vmlinuz.bak als Bootparameter. Diese Umgebungsvariablen werden typischerweise in Initialisierungsskripts abgefragt, um ein große Anzahl von verschiedenen Dingen ein- oder auszuschalten.

2.6 Weitergabe von Parametern zum »init«-Programm

Alle verbleibenden Parameter, die der Kernel nicht selbst verwendet und nicht als Umgebungsvariablen interpretiert, werden zum ersten Prozeß weitergeleitet. Dieser ist normalerweise das init-Programm. Meistens wird dem init-Programm per Bootparameter mitgeteilt, mit welchem Runlevel Linux gebootet werden soll. So kann init angewiesen werden, den Rechner im Ein-Benutzer-Modus zu booten und die üblichen Dämonen nicht zu starten. Um herauszufinden, welche Parameter von der auf Ihrem System installierten Version von init akzeptiert werden, lesen Sie bitte die entsprechende Manual Page.


Inhalt