home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Chip 2000 May
/
Chip_2000-05_cd2.bin
/
docu
/
ascii
/
suselxde
/
slxde-13.txt
< prev
next >
Wrap
Text File
|
2000-02-29
|
22KB
|
438 lines
Teil VI
Der Kernel und die
Kernel-Parameter
353
Kapitel 13
Der Kernel
Der Kernel, der wΣhrend der Installation m÷glicherweise auf die Diskette ge-
schrieben wird ¡ und auch im installierten System im /boot-Verzeichnis
zu finden ist ¡, ist so konfiguriert, dass er ein m÷glichst breites Spektrum
von Hardware unterstⁿtzt. Wenn Sie wΣhrend der Installation oder des Up-
dates die richtige Auswahl getroffen haben, ist dieser Kernel sogar fⁿr Ihren
Prozessor speziell optimiert. Deshalb ist es keineswegs zwingend erforder-
lich, einen eigenen Kernel zu generieren. Sollten Sie jedoch experimentelle"
Features oder Treiber ausprobieren wollen, so ist das Selberbauen" des Ker-
nels mitunter notwendig. Und nicht zuletzt gestattet das Konfigurieren des
Kernels einen h÷chst interessanten Einblick in den gegenwΣrtigen Stand der
Entwicklung.
Zum Erzeugen eines neuen Kernels existieren bereits Makefiles fⁿr den C-
Compiler, mit deren Hilfe der Ablauf fast v÷llig automatisiert ist. Lediglich
die Abfrage der vom Kernel zu unterstⁿtzenden Hardware muss interaktiv
durchlaufen werden.
Fⁿr das Kompilieren eines eigenen Kernels kann kein Installationssupport in
Anspruch genommen werden (vgl. Abschnitt H.1.2 auf Seite 548); wir sind
aber gern bereit, im Rahmen der kostenpflichtigen Professional Services zu
helfen (vgl. Abschnitt H.3 auf Seite 551).
Die folgende Beschreibung betrifft im Wesentlichen den Kernel der Serie
2.2.x. Viele Dinge treffen zwar auch noch auf die Kernel der Serie 2.0.x
zu ¡ im Detail ist jedoch oftmals mit kleinen, aber entscheidenden Abwei-
chungen zu rechnen!
13.1 Die Kernelquellen
Um einen Kernel bauen zu k÷nnen ist es selbstverstΣndlich notwendig, dass
sowohl die Kernelquellen (Paket lx_suse) als auch wenigstens der C-Com-
piler (Paket gcc), die GNU Binutils (Paket binutils) und die Include-
Dateien fⁿr den C-Compiler (Paket libc) installiert sind. Diese Pakete sind
in der Serie D (Development) enthalten. Generell ist die Installation des C-
Compilers dringend anzuraten, da die Programmiersprache C untrennbar mit
dem Betriebssystem Linux verbunden ist.
Die Kernelquellen befinden sich im Verzeichnis /usr/src/linux. Sollten
Sie vorhaben, am Kernel herumzuexperimentieren und verschiedene Versio-
355
13. Der Kernel
nen des Kernels gleichzeitig auf der Platte zu haben, so bietet es sich an, die
einzelnen Versionen in verschiedene Unterverzeichnisse zu entpacken und
die augenblicklich relevanten Quellen ⁿber einen Link anzusprechen. Diese
Form der Installation wird von YaST automatisch vorgenommen.
Genaugenommen k÷nnen die Kernelquellen in einem beliebigen Unterver-
zeichnis installiert und ⁿbersetzt werden. Da es jedoch eine ganze Reihe
von Software gibt, die die Kernelquellen unter /usr/src/linux erwartet,
sollte dieses Verzeichnis gewΣhlt werden, um ein fehlerfreies Compilieren
systemnaher Programme zu gewΣhrleisten.
13.2 Kernel-Module
Viele Treiber und Features des Linux-Kernels mⁿssen nicht fest zum Kernel
hinzugebunden werden, sondern k÷nnen zur Laufzeit als Kernel-Modul (engl.
kernel module) geladen werden. Welche Treiber fest zum Kernel gebunden
und welche als Module realisiert werden, wird bei der Konfiguration des
Kernels festgelegt.
Die Kernelmodule werden in dem Verzeichnis /lib/modules/<Version>
abgelegt, wobei <Version> der momentanen Version des Kernels entspricht
(beispielsweise 2.2.14).
Wenn immer m÷glich, sollten Sie von diesem Feature Gebrauch machen. Die
Grundregel ist: Alle Kernel-Komponenten, die nicht zwingend wΣhrend des
Bootvorgangs ben÷tigt werden, sind als Modul zu realisieren. So wird sicher-
gestellt, dass der Kernel nicht zu gro▀ wird und dass der Kernel ohne Schwie-
rigkeiten vom BIOS und einem beliebigen Bootloader geladen werden kann.
Der Festplatten-Treiber, Unterstⁿtzung fⁿr ext2 und Σhnliche Dinge sind al-
so im Regelfall direkt in den Kernel hineinzucompilieren, Unterstⁿtzung fⁿr
isofs, msdos oder sound sollten in jedem Fall als Modul compiliert wer-
den.
Umgang mit Modulen
Folgende Befehle zum Umgang mit Modulen stehen zur Verfⁿgung:
* insmod
Mit dem Befehl insmod wird das angegebene Modul geladen. Das Modul
wird in einem Unterverzeichnis von /lib/modules/<Version>
gesucht. Zugunsten von modprobe (s. u.) sollte insmod nicht mehr
verwendet werden.
* rmmod
EntlΣdt das angegebene Modul. Dies ist natⁿrlich nur dann m÷glich, wenn
die entsprechende FunktionalitΣt des Kernels nicht mehr verwendet wird.
So ist es nicht m÷glich, das Modul isofs zu entladen, wenn noch eine
CD gemountet ist.
* depmod
Dieser Befehl erzeugt eine Datei mit dem Namen modules.dep im
Verzeichnis /lib/modules/<Version>, in der die AbhΣngigkeiten
der einzelnen Module untereinander verzeichnet sind. Damit stellt man
356
13.2. Kernel-Module
sicher, dass beim Laden eines Modules alle davon abhΣngigen Module
ebenfalls automatisch geladen werden. Ist das Starten des Kernel-Dae-
mons in /etc/rc.config vorgesehen, wird die Datei mit den Modul-
AbhΣngigkeiten beim Start des Systems automatisch generiert, sofern sie
noch nicht existiert.
* modprobe
Laden bzw. Entladen eines Modules mit Berⁿcksichtigung der AbhΣngig-
keiten von anderen Modulen. Dieser Befehl ist sehr mΣchtig und kann fⁿr
eine Reihe weiterer Zwecke eingesetzt werden (etwa Durchprobieren al-
ler Module eines bestimmten Typs, bis eines erfolgreich geladen werden
kann). Im Gegensatz zum Laden mittels insmod wertet modprobe die Da-
tei /etc/modules.conf aus und sollte daher generell zum Laden von
Modulen verwendet werden. Fⁿr eine ausfⁿhrliche ErklΣrung sΣmtlicher
M÷glichkeiten lesen Sie bitte die zugeh÷rigen Manpages.
* lsmod
Zeigt an, welche Module gegenwΣrtig geladen sind und von wie vielen
anderen Modulen sie verwendet werden. Module, die vom Kernel-Dae-
mon geladen wurden, sind durch ein nachfolgendes (autoclean) ge-
kennzeichnet; das weist darauf hin, dass diese Module automatisch wieder
entfernt werden, wenn sie lΣngere Zeit nicht benutzt wurden.
/etc/modules.conf
Das Laden von Modulen wird ⁿber die Datei /etc/modules.conf be-
einflusst; vgl. Manual-Page von depmod (man depmod).
Hinweis: Der Dateiname wurde ab SuSE Linux 6.3 von /etc/conf.
modules in /etc/modules.conf umbenannt.
Insbesondere k÷nnen in dieser Datei die Parameter fⁿr solche Module ein-
getragen werden, die direkt auf die Hardware zugreifen und daher auf das
spezifische System eingestellt werden mⁿssen (z. B. CD-ROM-Treiber oder
Netzwerktreiber). Die hier eingetragenen Parameter sind im Prinzip identisch
mit denen, die am Bootprompt des Kernels (z. B. von LILO ) ⁿbergeben wer-
den (siehe Abschnitt 14.3.2 auf Seite 364), jedoch weichen in vielen FΣllen
die Namen von denen ab, die am Bootprompt zum Einsatz kommen (siehe
zum Vergleich Abschnitt 14.3.4 auf Seite 377). Wenn das Laden eines Mo-
duls nicht erfolgreich ist, versuchen Sie, in dieser Datei die Hardware zu spe-
zifizieren und verwenden Sie zum Laden des Moduls modprobe anstelle von
insmod.
Kmod ¡ der Kernel Module Loader"
Der eleganteste Weg bei der Verwendung von Kernel-Modulen ist seit Ver-
sion 2.2.x der Einsatz des Kernel Module Loader", der den alten" Kernel-
Daemon (kerneld) ersetzt. Kmod wacht im Hintergrund und sorgt dafⁿr, dass
ben÷tigte Module durch modprobe-Aufrufe automatisch geladen werden, so-
bald auf die entsprechende FunktionalitΣt des Kernels zugegriffen wird.
Um den Kmod verwenden zu k÷nnen, mⁿssen Sie bei der Kernel-Konfigura-
tion die Option `Kernel module loader' (CONFIG_KMOD) aktivie-
ren.
357
13. Der Kernel
Treiber, die ben÷tigt werden, um auf das Root-Dateisystem zuzugreifen, soll-
ten fest zum Kernel hinzugebunden werden. Sie sollten also Ihren SCSI-Trei-
ber und das Dateisystem der Root-Partition (ⁿblicherweise ext2) nicht als
Modul konfigurieren!
Da SuSE Linux jedoch nunmehr initrd (engl. initial ramdisk) verwen-
det und ⁿber diesen Weg beispielsweise den SCSI-Treiber einbindet, mⁿs-
sen Sie bei der Erstellung eines eigenen Kernels darauf achten, die Variable
INITRD_MODULES in der Datei /etc/rc.config anzupassen (Ab-
schnitt 17.6 auf Seite 447) und die initrd-Zeile in /etc/lilo.conf
auszukommentieren (vgl. Abschnitt 16.2.5 auf Seite 421). ¡ Wenn Sie dies
nicht tun, wird der Kernel beim Booten hΣngen bleiben!
Der Einsatz von Kernel-Modulen bietet sich vor allem fⁿr unregelmΣ▀ig
oder selten benutzte FunktionalitΣten an, wie z. B. parport- und Drucker-
Unterstⁿtzung, Treiber fⁿr Diskettenlaufwerke oder bestimmte Dateisysteme,
die Sie nur sporadisch verwenden werden.
Der Kmod ist nicht dafⁿr ausgelegt, Module wieder automatisch zu ent-
laden; bei der heutigen RAM-Ausstattung der Rechner wΣre der Ge-
winn an Arbeitsspeicher nur marginal; vgl. auch /usr/src/linux/
Documentation/kmod.txt. Server-Maschinen, die spezielle Auf-
gaben zu erfⁿllen haben und nur wenige Treiber ben÷tigen, werden aus
Performance-Grⁿnden einen monolithischen" Kernel bevorzugen.
13.3 Konfiguration des Kernels
Die Konfiguration des wΣhrend der Installation oder wΣhrend des Updates
eingerichteten Kernel ist der Datei /usr/src/linux/.config zu ent-
nehmen (vgl. Abschnitt 2.2.9 auf Seite 37); diese Datei beschreibt jedoch nur
den Kernel, nicht die Module, die dem Paket kernmod entstammen. Wenn
Sie auch Module neu compilieren wollen, mⁿssen Sie diese explizit anwΣh-
len.
Die Konfiguration des Kernels kann man auf drei verschiedene Arten vorneh-
men:
1. In der Kommandozeile
2. Im Menⁿ im Textmodus
3. Im Menⁿ unter dem X Window System
Diese drei Wege werden im Folgenden kurz vorgestellt.
Kommandozeilenkonfiguration
Um den Kernel zu konfigurieren, wechseln Sie nach /usr/src/linux und
geben folgenden Befehl ein:
erde:/usr/src/linux # make config
Sie werden nach einer Reihe von SystemfΣhigkeiten gefragt, die der Kernel
unterstⁿtzen soll. Bei der Beantwortung der Fragen gibt es normalerweise
zwei oder drei M÷glichkeiten: Entweder einfaches y und n
, oder eine der
358
13.4. Einstellungen bei der Kernelkonfiguration
drei M÷glichkeiten y (engl. yes), n (engl. no) und m (engl. module). `m'
bedeutet hierbei, dass der entsprechende Treiber nicht fest zum Kernel hinzu-
gebunden wird, sondern vielmehr als Modul ⁿbersetzt wird, das zur Laufzeit
zum Kernel hinzugeladen werden kann. Es versteht sich, dass sΣmtliche Trei-
ber, die Sie zum Booten des Systems unbedingt ben÷tigen, fest zum Kernel
hinzugebunden werden mⁿssen; in diesen FΣllen also y wΣhlen.
Wenn Sie bei einer Frage eine andere Taste drⁿcken, erhalten Sie eine kurze
Hilfestellung zu der jeweiligen Option angezeigt.
Konfiguration im Textmodus
Angenehmer lΣsst sich die Konfiguration des Kernels mit menuconfig"
durchfⁿhren; dies mit dem Befehl
erde:/usr/src/linux # make menuconfig
aufgerufen werden. Insbesondere mⁿssen Sie sich bei einer geringfⁿgigen
─nderung der Konfiguration nicht durch zig Fragen durchtasten".
Konfiguration unter dem X Window System
Haben Sie das X Window System (Paket xf86) sowie Tcl/Tk (Paket tcl
und Paket tk) installiert, so k÷nnen Sie die Konfiguration alternativ durch
erde:/usr/src/linux # make xconfig
vornehmen. Sie haben dann eine grafische OberflΣche, die das Konfigurieren
komfortabler macht. Dazu mⁿssen Sie das X Window System aber als Be-
nutzer `root' gestartet haben, da Sie andernfalls zusΣtzliche Ma▀nahmen
treffen mⁿssen, um Zugriff auf das Display eines anderen Benutzers zu erhal-
ten.
13.4 Einstellungen bei der Kernelkonfiguration
Die einzelnen Konfigurationsm÷glichkeiten des Kernels k÷nnen hier nicht Hilfetexte
im Detail dargestellt werden. Machen Sie bitte Gebrauch von den zahlreich
vorhandenen Hilfetexten zur Kernel-Konfiguration. Der allerneueste Stand
der Dokumentation findet sich immer unter den Kernelquellen im Verzeichnis
/usr/src/linux/Documentation.
13.5 ▄bersetzen des Kernels
Entfernen Sie ggf. im Haupt-Makefile (ca. Zeile 74) das Kommentar-
zeichen vor INSTALL_PATH=/boot, damit der eigene Kernel einfach
in /boot installiert werden kann.
Wir empfehlen, ein bzImage" zu generieren. So lΣsst es sich in der Regel
umgehen, dass der Kernel zu gro▀ wird, wie dies leicht passieren kann, wenn
man zu viele Features auswΣhlt und ein zImage" herstellt (typisch sind dann
die Meldungen "kernel too big" oder "System is too big").
Nachdem Sie den Kernel fⁿr Ihre Gegebenheiten konfiguriert haben, starten
Sie die Kompilation:
359
13. Der Kernel
erde:/usr/src/linux # make dep
erde:/usr/src/linux # make clean
erde:/usr/src/linux # make bzImage
Diese 3 Befehle k÷nnen Sie auch in einer Befehlszeile eingeben. Die wer-
den dann hintereinander abgearbeitet. Dies birgt Vorteile in sich, wenn Sie
die Kernel-▄bersetzung automatisch, z. B. ⁿber Nacht", durchfⁿhren lassen
wollen. Dazu geben Sie ein:
erde:/usr/src/linux # make dep clean bzImage
Je nach Leistung des Systems dauert es jetzt einige Minuten (schneller AMD
Athlon / Intel Pentium III)1 bis zu einigen Stunden (bei 386ern mit 8 MB), bis
der Kernel neu ⁿbersetzt ist. WΣhrend der ▄bersetzungsprozedur k÷nnen Sie
sich selbstverstΣndlich auf einer anderen Konsole weiterhin mit dem System
beschΣftigen.
Nach der erfolgreichen ▄bersetzung finden Sie den komprimierten Kernel im
Verzeichnis /usr/src/linux/arch/i386/boot. Das Kernel-Image ¡
die Datei, die den Kernel enthΣlt ¡ hei▀t bzImage. Finden Sie diese Datei
nicht vor, ist aller Wahrscheinlichkeit nach ein Fehler wΣhrend der Kernel-
ⁿbersetzung aufgetreten. Dies geht eventuell leicht in der Menge der Bild-
schirmausgaben unter. Ob ein Fehler aufgetreten ist, k÷nnen Sie dadurch ve-
rifizieren, dass Sie nochmals mit
erde:/usr/src/linux # make bzImage
die Kernelⁿbersetzung ansto▀en und auf entsprechende Fehlermeldungen
achten. Aber keine Angst: Fehler bei der Kernelⁿbersetzung treten eher
selten auf!
Unter der Bash k÷nnen Sie mit
erde:/usr/src/linux # make bzImage 2>&1 | tee ker-
nel.out
die Ausgaben den Kompilationsvorgangs in die Datei kernel.out mit-
schreiben" lassen; unter der Tcsh lautet der Befehl:
erde:/usr/src/linux # make bzImage |& tee kernel.out
Wenn Sie Teile des Kernels als ladbare Module konfiguriert haben, mⁿssen
Sie anschlie▀end das ▄bersetzen dieser Module veranlassen. Dies erreichen
Sie durch
erde:/usr/src/linux # make modules
13.6 Kernel installieren
Nachdem Sie den Kernel ⁿbersetzt haben, mⁿssen Sie dafⁿr sorgen, dass er
kⁿnftig gebootet wird. Verwenden Sie den LILO, so muss dieser neu in-
stalliert werden. Im einfachsten Fall kopieren Sie dazu den neuen Kernel
nach /boot/vmlinuz (vgl. Abschnitt 13.5 auf der vorherigen Seite) und
rufen dann den LILO auf; um sich vor unliebsamen ▄berraschungen zu
schⁿtzen, empfiehlt es sich jedoch, den alten Kernel zunΣchst beizubehalten
1 Ein beliebter Test fⁿr Hard- und Software ist es, den Kernel mit der Option make -j zu
ⁿbersetzen. Sie brauchen viel Hauptspeicher (bis ⁿber 100 MB) fⁿr diesen Test. Hierbei wird fⁿr
jede zu ⁿbersetzende Quelldatei ein eigener Compiler gestartet.
360
13.6. Kernel installieren
(/boot/vmlinuz.old), um ihn notfalls booten zu k÷nnen, wenn der neue
Kernel nicht wie erwartet funktioniert:
erde:/usr/src/linux # cp /boot/vmlinuz /boot/vmlinuz.old
erde:/usr/src/linux # cp arch/i386/boot/bzImage /boot/vmlinuz
erde:/usr/src/linux # lilo
Das Makefile-Target make bzlilo erledigt diese 3 Schritte ⁿbrigens in
einem Rutsch.
Die ⁿbersetzten Module mⁿssen nun noch installiert werden; durch Eingabe
von
erde:/usr/src/linux # make modules_install
k÷nnen Sie diese in die korrekten Zielverzeichnisse unter /lib/modules/
<Version> kopieren lassen.
Es ist darauf zu achten, dass Module, die man einkompiliert, unter /lib/
modules<Version> entfernt werden, da es sonsten zu nicht vorher-
sehbaren Effekten kommen kann. Deswegen wird dem Ungeⁿbten vom
Selbstkompilieren des Kernels dringend abgeraten.
Tragen Sie in Ihrer /etc/lilo.conf zusΣtzlich ein Label Linux.old
als Boot-Image ein (vgl. Abschnitt 4.4.1 auf Seite 121) und benennen Sie den
alten Kernel nach /boot/vmlinuz.old um. Sie stellen so sicher, dass Sie
immer noch mit dem vorherigen Kernel booten k÷nnen, falls dies mit dem
neu gebauten nicht funktionieren sollte. Diese M÷glichkeit wird ausfⁿhrlich
im Kapitel 4 auf Seite 115 beschrieben.
Haben Sie die Datei /etc/lilo.conf nach Ihren Wⁿnschen angepasst,
so mⁿssen Sie erneut
erde:/usr/src/linux # lilo
aufrufen.
Falls Sie Linux von DOS aus ⁿber linux.bat ¡ also mit loadlin ¡ star-
ten, mⁿssen Sie den neuen Kernel noch nach /dosc/loadlin/bzimage2
kopieren, damit er beim nΣchsten Booten wirksam werden kann.
Falls Sie Linux ⁿber den Windows NT Bootmanager starten, dⁿrfen Sie
nun nicht vergessen, erneut den LILO-Bootsektor umzukopieren (vgl. Ab-
schnitt 4.7.2 auf Seite 132).
Weiterhin ist Folgendes zu beachten: Die Datei /boot/System.map ent-
hΣlt die Kernelsymbole, die die Kernelmodule ben÷tigen, um Kernelfunk-
tionen korrekt aufrufen zu k÷nnen. Diese Datei ist abhΣngig vom aktuellen
Kernel. Daher sollten Sie nach der ▄bersetzung und Installation des Kernels
die aktuelle3 Datei /usr/src/linux/System.map in das Verzeich-
nis /boot kopieren. Falls Sie Ihren Kernel mittels make bzlilo bzw.
make zlilo erstellen, wird diese Aufgabe automatisch fⁿr Sie erledigt.
Sollten Sie beim Booten eine Fehlermeldung wie "System.map does
not match actual kernel" erhalten, dann wurde wahrscheinlich
nach der Kernelⁿbersetzung die Datei System.map nicht nach /boot
kopiert.
2 Bzw. dorthin, wohin Sie das Verzeichnis loadlin haben installieren lassen.
3 Bei jeder Kernelⁿbersetzung wird diese Datei neu erzeugt.
361
13. Der Kernel
13.7 Boot-Diskette erstellen
M÷chten Sie eine Boot-Diskette mit dem neuen Kernel erstellen, so k÷nnen
Sie einfach den folgenden Befehl verwenden:
erde:/usr/src/linux # make bzdisk
13.8 Festplatte nach der Kernel-▄bersetzung aufrΣumen
Sie k÷nnen die wΣhrend der Kernel-▄bersetzung erzeugten Objekt-Dateien
l÷schen, falls Sie Probleme mit dem Plattenplatz haben:
erde: # cd /usr/src/linux
erde:/usr/src/linux # make clean
Falls Sie jedoch ⁿber ausreichend Plattenplatz verfⁿgen und vorhaben, den
Kernel des ╓fteren neu zu konfigurieren, so ⁿberspringen Sie diesen letzten
Schritt. Ein erneutes ▄bersetzen des Kernels ist dann erheblich schneller, da
nur die Teile des Systems neu ⁿbersetzt werden, die von den entsprechenden
─nderungen betroffen sind.
362