Linux Kernel

BO

gesperrt
Linux Kernel Teil 1

Eventl kann´s ja wer gebrauchen ;)

Dieses Howto richtet sich an Linux Anfänger die vorhaben
ihren ersten Kernel selbst einzurichten. Es werden alle
Möglichkeiten der Konfiguration angesprochen und der Leser
sollte anschließend in der Lage sein, einen Kernel ohne
Probleme zu erstellen und anzupaßen.

Inhalt:

Verzeichnisstruktur für die Kerneldateien

Konfiguration des Kernels

2.1 config, menuconfig und xconfig

Konfigurationsmöglichkeiten

Erstellung des neuen Kernels

4.1 Feststellen der Abhängigkeiten

Löschen alter Einträge

Generierung des Kernels

6.1 zdisk, zImage, zlilo

6.2 Erstellung der Module und einbinden in den
Verzeichnisbaum

1. Verzeichnisstruktur für die Kerneldateien

arch Architekturabhängige Teile des Kernels (Intel,
Alpha, Sparc, etc.) drivers Zeichen- und blockorientierte
Gerätetreiber, ebenso Sound- und Netzwerkkartentreiber

fs enthält Funktionen um mit verschiedenen Dateisystemen
umgehen zu können (jedes unterstützte Dateisystem hat
ein Unterverzeichnis)

include enthält die Headerdateien des Kernels (z.B.
Konstanten und Strukturdefinitionen)

ipc enthält die Realisierung der Interprozeßkommunikation
wie Shared Memory und Semaphoren

kernel Routinen wie fork und exec, die zentrale Aufgaben
wie die Prozeßverwaltung übernehmen

mm Routinen zur Speicherverwaltung

modules Module, nachladbare Kernelteile

net Protokolltreiber für Netzwerkkarten (TCP, IP, IPX etc.)




2. Konfiguration des Kernels

Um den ersten eigenen Kernel herstellen zu können, ist
es notwendig dem Computer mitzuteilen, wie dieser später
aussehen soll, was er unterstützen und was weglassen soll.

Um dies zu bewerkstelligen hat man 3 verschiedene
Möglichkeiten der Konfiguration:

2.1 config, menuconfig und xconfig

Diese Möglichkeiten unterscheiden sich eigentlich nur
noch im Komfort. Von der reinen Text-
konfiguration mit config, über die menübasierte mit
menuconfig, bis hin zur komfortablen XServer
Konfiguration mit xconfig läßt sich frei wählen.

Da die graphische Konfiguration die ansehnlichste und
auch die übersichtlichste ist, sollte man
generell xconfig verwenden.

Um nun die Konfiguration zu starten, wechselt man in das
Verzeichnis /usr/src/linux und startet den Aufruf make xconfig.
Selbstverständlich geschieht das im Windowmanager nach dem Aufruf
von des XTerminals (xterm).

Dies bewirkt dann, dass die Datei Makefile mit dem
Parameter Xconfig abgearbeitet wird.
Wenn dies korrekt ausgeführt wurde, soltle man nun einen
Grafikfenster vor sich haben, mit relativ vielen Auswahlmöglichkeiten.



3. Konfigurationsmöglichkeiten

Grundsätzlich hat man die Auswahl zwischen y (yes = fest
im Kernel einbinden), m (modul = als Modul einbinden) und
n (no = nicht in den Kernel einbinden).

Hier sind die Auswahlmöglichkeiten der Reihe nach nun
kurz vorgestellt:

Code maturity level options: Hier kann man wählen, ob
man nur ausgereifte Treiber verwenden
will, oder ob man auch noch nicht ganz fertig
getestetete Treiber verwenden will. Wenn man das
vor hat, sollte man die Frage mit y beantworten.

Loadable module support: Hier teilt man dem Kernel mit,
ob man nachladbare Module verwenden will oder nicht.
Man sollte diese Frage auf jeden Fall mit y beantworten,
da einem die Verwendung von Modulen einen enormen
Geschwindigkeitsvorteil beim booten und höhere Flexibilität des
gesamten Systems bringt.

General setup: Hier legt man fest, was für den Kernel
allgemein gültig sein soll, also ohne Bezug
zu Gerätetreibern etc. . Hierunter fällt beispielsweise
ob der Kernel Fließkommaberechnungen
übernehmen soll (wenn Prozessor ohne FPU also unter 486
DX). Zudem wird hier der korrekte Prozessortyp und das
Format der Kernelübersetzung ausgewählt. Standard sollte
hierbei das ELF (Extendable Linkage Format) sein.

Floppy, IDE and other block devices : Hier werden wie
der Name schon sagt die Treiber für Diskettenlaufwerke,
sowie IDE Festplatten (auch EIDE Unterstützung) aktiviert.
MFM und RLL Festplatten sollten heute keine Bedeutung mehr haben.

Additional Block devices : Interessanter Punkt hier
dürfte die Verwaltung von sog. RAM-Disks sein. Per Loopback
kann man eine TCP/IP Verbindung testen, ohne dass man in ein Netzwerk
angeshloßen sein muß.

Networking options : Hier wird die Grundunterstützung
des Kernels für Netzwerke und einige spezielle Fragen zur
Verwendung des Computers im Netzwerk (auch Internet) gestellt.
Ob der Rechner zum Beispiel die Funktion einer Firewall (oder
auch Personal Firewall) übernehmen soll, entscheidet sich hier
ebenso wie die Unterstützung von TCP/IP.

Wenn man die TCP/IP Unterstützung aktiviert hat, sollte
man, wenn man niocht genau weiß was man tut die Grundeinstellungen
belassen.

SCSI support : Hier geht es um die SCSI Unterstützung
des Kernels. Man wählt den passenden
Controller und die zu unterstützenden Geräte aus.

Network device support : Hier macht man die Angaben über
die zu unterstützenden Netzwerk-protokolle sowie über die
verwendete Netzwerkkarte. Wer ins Internet will sollte auch
PPP mit einbinden. Um den Kernel allerdings nicht unnötig zu
vergrößern, sollte man die Netzwerkgeräte als Modul übersetzen
lassen und später automatisch einbinden.

ISDN Subsytem : Hier werden Treiber für ISDN Karten und
teilweise schon die Konfiguration des ISDN4Linux Paketes
angeboten. Auch hier sollte man so viel wie möglich als Modul
übersetzen laßen, um den Bootvorgang zu beschleunigen und um
flexibler und schneller zu sein.
Warum hat man denn sonst diesen Vorteil zu anderen
Betriebssystemen ? ;)

CD-ROM drivers (not for SCSI or IDE/ATAPI drives) : Wenn
sie CD-ROM Laufwerke benutzen, die weder am SCSI noch am
IDE Bus hängen, sollten sie nachsehen ob sie den
Treiber dazu hier finden.

Filesystems : Wie den meisten Benutzern sicherlich
bekannt ist, hat man unter Linux die Möglichkeit verschiedene
Dateisysteme zu mounten, das heißt in den bereits bestehenden
Verzeichnisbaum einzubinden. Hier finden sie nun die
Dateisysteme die unterstützt werden und sie können auswählen,
welche sie benutzen wollen.

Character devices : Hier findet sich alles zu serieller
und paralleler Schnittstelle, wie Mäuse und Druckerunterstützung
über Parallelport, APM (Advanced Power Management),
Unterstützung nachladbarer und selbstgeschriebener
Module, Echtzeit Uhr (wer's braucht ...
die Interrupt Zahl ist um ein vielfaches größer als bei
der Systemuhr).

Sound : Hier werden sämtliche Einstellungen zur
Soundkarte vorgenommen, wie IRQ, DMA
etc. . Natürlich wird auch das Modell festgelegt und
alles wird zwischengespeichert, so dass
wenn man sich ein nächstes Mal hierhin begibt nicht
nochmal alles komplett neu eingeben muß
sondern gefragt wird, ob die letzen Einstellungen
übernommen werden sollen. Ziemlich nützlich
wenn man man den IRQ mal falsch angegeben hat, da man in
2 Rechnern 2 verschiedene Soundkarten verwendet ;)
(5 und 7 sind sich ja auch soooo ähnlich).

Kernel hacking : Was sich für manche wohl schon fast
kriminell anhört, bezieht sich lediglich
auf die Möglichkeit die Abläufe innerhalb des Kernels
besser überwachen zu können.


...to be continued


Greetinx
 
Linux Kernel Teil 2

Das waren im wesentlichen die Einstellmöglichkeiten für
den Kernel 2.2.x. Nun wenden wir uns zu:



4. Erstellung des neuen Kernels

Das erfordert natürlich einige Voraussetzungen, wie etwa
einen ausreichenden freien Platz auf der Festplatte
(mit 10 MB sollte man auf jeden Fall auf der sicheren
Seite liegen), genügend Hauptspeicher (eventuell benötigt
man einen Swap Bereich auf der Festplatte), den GNU
C - Compiler, sowie die Programme make und awk.

Da der gesamte Standardcode und alle Treiber direkt beim
ersten mal vollständig übersetzt werden müßen, kann es auf
alten Rechnern schon mal wesentlich länger als eine Stunde
dauern, bis die Übersetzung fertig ist. Also bringen sie
gerade bei 486ern Geduld mit.

Da der Compiler für die Übersetzung ein paar
vorgefertigte Dateien benötigt, sollte man vorher
folgende Kommandos eingeben, um symbolische Verweise
(symbolic Links) auf diese Dateien zu setzen:

rm -f /usr/include/linux /usr/include/asm
ln -s /usr/src/include/linux /usr/include/linux
ln -s /usr/src/include/asm /usr/include/asm



4.1 Feststellen der Abhängigkeiten

Da eine Vielzahl von sog. Headerdateien von bestimmten
Quelldateien eingebunden wird, ist es notwendig die Abhängigkeiten
festzustellen, damit der Compiler die Dateien in der richtigen
Reihenfolge abarbeitet. Gespeichert werden diese Abhängigkeiten
nach dem Aufruf make dep in der Datei .depend.



5. Löschen alter Einträge

Es soll ja vorkommen, das man eine Neugenerierung des
Kernels öfter als einmal vornimmt.
Daher ist es zu empfehlen, bevor man den 2., 3., oder x.
Kernel generiert, die noch bestehenden Einträge des
Vorgängerkernels zu löshen. Um also später keine
ungewollten Objektdateien im neuen Kernel zu finden, ist es
ratsam den Befehl make clean auszuführen, bevor man sich
an die Generierung des nächsten Kernels macht.



6. Generierung des neuen Kernels

Nachdem nun alle Hürden bis hierhin genommen wurden,
stehen der Generierung des neuen Kernels nur noch einige
Kleinigkeiten entgegen. Zunächst mal muß man sich für eine Art
der Generierung entscheiden.


6.1 zdisk, zImage und zlilo

Man steht nun vor der Wahl, wie weitgehend die
Einbindung des neuen Kernels in das bestehende
System durchgeführt werden soll.

Mit make zdisk zum Beispiel wird ein neuer Kernel
generiert, anschließend komprimiert und mit
dem Befehl dd direkt auf eine Diskette kopiert.

Wenn man make zImage eingibt, erhält man zwar einen
neuen und komprimierten Kernel, jedoch nicht im Wurzelverzeichnis
und auch ohne Eintrag im Linux Loader. Der Kernel liegt dann im
Verzeichnis /usr/src/linux/arch/i386/boot bzw. das entsprechende
äquivalent für i386 auf anderen Plattformen.

Wer seinen Kernel direkt fertig in das bestehende System
einbinden will und auch sofort damit arbeiten will, sollte
sich für die Eingabe von make zlilo entscheiden.
Denn hierbei wird der neue Kernel erzeugt, komprimiert,
im Wurzelverzeichnis abgelegt und in den Linux Loader eingetragen.



6.2 Erstellung der Module und einbinden in den Verzeichnisbaum

Nachdem der neue Kernel nun fertig generiert wurde fehlt
nur noch, dass die dazugehörigen Module, die den Kernel erst
so lauffähig machen, wie man ihn haben wollte, ebenfalls
generiert werden.
Der Aufruf hierfür lautet make modules. Nun müßen diese
Module allerdings auch noch an der richtigen Stelle im im
Verzeichnisbaum stehen. Damit sie dorthin kopiert werden, muß
der Befehl make modules_install eingegeben werden.

Geladen werden diese Module, die sich im
Unterverzeichnis /lib/modules/2.2.x, wobei 2.2.x
für die verwendete Kernelversion steht, mit Hilfe de
Befehls insmod.

Wenn sie diese Schritte alle befolgt haben, sollten sie
keine Probleme gehabt haben ihren eigenen Kernel zu erstellen,
der hoffentlich nach ihrer Zufriedenheit arbeitet.


Quelle:nocture.de


Greetinx
 
Oben