In diesem Abschnitt wird Software genannt, die zur Weiterleitung von Kernel-Bootparametern zum Kernel selbst verwendet werden kann. Es wird ebenfalls erklärt, wie die Parameter ausgeführt 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. Siehe folgende Beispiele:
ether=9,0x300,0xd0000,0xd4000,eth0 root=/dev/hda1 *RICHTIG*
ether = 9, 0x300, 0xd0000, 0xd4000, eth0 root = /dev/hda1 *FALSCH*
LILO (LInux LOader), von Werner Almesberger, ist der am häufigsten verwendete. Er hat die Fähigkeit, verschiedene Kernel zu booten und speichert die Konfigurationsinformation als Klartext-Datei. Die meisten Distributionen werden mit LILO als Default-Boot-Loader ausgeliefert. LILO kann DOS, OS/2, Linux, FreeBSD, etc. ohne Schwierigkeiten booten und ist zudem äußerst flexibel.
Eine typische Konfiguration wird kurz nach dem Systemstart LILO
stoppen und folgendes ausgeben: LILO:
. Der Anwender hat dann
einige Sekunden für einen beliebigen Eintrag Zeit. Erfolgt
kein Eintrag wird das Default-System gebootet. Typische
Systemnamen, die in den LILO-Konfigurationsdateien verwendet
werden, sind linux
und backup
und msdos
. Falls
ein Bootparameter eingegeben werden soll, wird man dies an dieser
Stelle tun, nachdem man den Systemnamen, von dem LILO booten soll,
eingegeben hat. Folgendes Beispiel soll dies verdeutlichen:
LILO: linux root=/dev/hda1
LILO ist hervorragend dokumentiert und für die hier
diskutierten Bootparameter ist das LILO-Kommando append=
von großer Bedeutung, wenn man zur LILO config-Datei
einen ständigen Bootparameter hinzufügen will.
Man muß einfach nur etwas wie
append = "foo=bar"
an die
/etc/lilo.conf
-Datei anhängen. Dies kann entweder
an die höchste Ebene der config-Datei eingefügt werden und somit
für alle Sektoren gelten, oder es soll nur für einen
einzigen Systemabschnitt gelten, dann wird es innerhalb eines
image=
-Sektors eingefügt. Eine ausführliche
Beschreibung erhält man in der LILO-Dokumentation.
Ein anderer weitverbreiteter Linux-Loader ist `LoadLin'. Dieser ist ein DOS-Programm, das die Fähigkeit besitzt, einen Linux-Kernel vom DOS-Prompt aus zu starten (mit Bootparametern), vorausgesetzt, bestimmte Ressourcen stehen zur Verfügung. Dies ist ein Vorteil für alle, die Linux von DOS aus starten wollen.
Es ist ebenfalls sehr nützlich, wenn man bestimmte Hardware besitzt, welche den zur Verfügung stehenden DOS-Treiber benötigt, um die Hardware in einen bekannten Zustand zu bringen. 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 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.
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.
Es gibt einige Kernel-Bootparameter, deren Standardwerte
in mehreren Bytes im Kernel-Image selbst gespeichert
werden. 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
wird gewöhnlich auch swapdev,
ramsize, vidmode und rootflags genannt. Diese Namen zeigen die 5
Ä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
).
Die meisten Bootparameter sind folgendermaßen strukturiert:
name[=value_1][,value_2]...[,value_11]
name
ist hierbei ein einzigartiges Schlüsselwort,
das Aufschluß darüber gibt, für welchen Teil des
Kernels die entsprechenden Werte (falls überhaupt)
bestimmt sind. Mehrere Bootparameter werden als Liste nach
obigem Format ausgegeben, wobei die einzelnen Parameter durch
Leerzeichen getrennt sind. Man beachte das tatsächliche
Limit von 11. 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 10 Ganzzahlen- Parameter und eine anschließende
Zeichenfolge unterteilt. Das heißt, man kann nicht wirklich 11
Ganzzahlen bereitstellen, höchstens durch Konvertierung
des 11ten Parameters von einer Zeichenkette in eine Ganzzahl im
Treiber selbst.
Die Sortierung findet hauptsächlich in
linux/init/main.c
statt. Zuerst überprüft der
Kernel, ob der Parameter zu einem der besonderen gehört,
wie root=
, ro
, rw
, oder debug
.
Die Bedeutung dieser
`special arguments' wird im weiteren Verlauf dieser Dokumentation
beschrieben.
Der Kernel geht dann durch eine Liste von Setup-Funktionen
(zu finden im bootsetups
-Array), um zu sehen, ob
die entsprechende Zeichenkette (wie z.B. foo
) mit einer
Setup-Funktion (foo_setup()
) für ein bestimmtes
Gerät oder einen Teil des Kernels verbunden ist. 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 ja, würde
er die Setup-Funktion, die mit `foo' (foo_setup()
)
verbunden ist, aufrufen und dieser die Ganzzahlen-Parameter 3,
4, 5 und 6 übergeben, wie auf der Kernel- Kommandozeile
angegeben. Darüberhinaus würde er ebenfalls die
Zeichenkette bar
übergeben.
Alles, was aussieht wie foo=bar
und nicht als
Setup-Funktion akzeptiert wird, wie oben beschrieben, wird
dann als festzusetzende Umgebungsvariable interpretiert. Ein
(sinnloses?) Beispiel wäre die Verwendung von
TERM=vt100
als Bootparameter.
Alle verbleibenden Parameter, die nicht vom Kernel aufgegriffen
und nicht als Umgebungsvariablen interpretiert wurden, werden
dann zum ersten Prozeß weitergeleitet. Dieser ist normalerweise
das init
-Programm. Der am häufigsten zum
init
-Prozeß weitergeleitete Parameter ist das
Wort single,
welches init
anweist, 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 Manpage.