[LinuxOB] Linux-Kernel - Marke Selbstgebaut
Daniel Dombrowski
daniel.dombrowski at linuxob.de
So Jan 4 17:26:29 CET 2004
On 2004.01.04 16:37, katja pieck wrote:
> Danke, ich hoffe aber, wenn Ihr Eure Erklärungen anfangt,
> vielleicht ein wenig vorher? Dann hätte ich vielleicht sogar eine
> Chance etwas zu verstehen oder mache ich vielleicht doch besser den
> VHS Kurs?
Ich hatte jetzt auf dem Level angefangen, wo Udo angefangen hatte.
Natürlich kann ich auch mal ganz bei Null anfangen.
Also:
Der Kernel (http://www.kernel.org/) ist das, was ein Linux eigendlich
zu einem Linux macht. Auch wenn umganssprachlich (und technisch gesehen
völlig falsch) oft ganze Distributionen als "Linux" bezeichnet werden
so ist eigendlich nur der Kernel das, was "Linux" heißt.
Der Kernel beinhaltet alle Treiber, die ein System zum Laufen braucht
und stellt für das Betriebssystem einheitliche Schnittstellen für den
Zugriff auf die Hardware (und eine ganze Reihe an "Geräten", die nur
logisch, nicht aber physikalisch vorhanden sind) bereit.
Wenn ein Rechner bootet, dann läuft als erstes das BIOS an. Dies ist
noch eine sehr hardwarenahe und betriebssystemunabhängige
Angelegenheit. Das BIOS ließt dann den Boot-Sektor des Mediums, von dem
gebootet werden soll (i.d.R. die Festplatte). Der Boot-Sektor sind die
ersten 512 Byte der Platte. Dort befindet sich der sog. Boot-Loader. Im
Zusammenhang mit Linux werden hier in der Regel LiLo oder Grub
eingesetzt. Der Bootloader übergibt dann - sofern entsprechend
konfiguriert - die Kontrolle an den Linux-Kernel. Sobald der Linux-
Kernel geladen ist, übergibt dieser die Kontrolle an den init-Prozess,
welcher dann die weiteren Dienste auf dem Rechner startet.
Die Treiber im Linux-Kernel können auf zwei verschiedene Arten
eingebunden werden. Zum einen können sie fest in den Kernel
einkompiliert werden, zum anderen können sie als Module nachgeladen
werden. Auf jeden Fall in den Kernel einkompiliert werden müssen die
Dinge, die der Kernel braucht, um essentielle Dinge erledigen zu können
- z.B. auf die Festplatte zugreifen zu können, die Dateisysteme lesen
zu können, etc.
Alle weiteren Treiber können entweder fest einkompiliert werden oder
als Modul nachgeladen werden. Was man letztendlich bevorzugt, kann bis
in einen Glaubenskrieg ausarten. Ich persönlich bevorzuge fest
einkompilieren, da ich dann immer alles an Board habe. Auf älteren
Systemen macht es aber durchaus Sinn, nur die Module zu laden, die auch
gerade wirkich benötigt werden. Damit sind wir auch schon beim größten
Vorteil der Module angekommen: Module können während des Betriebs Ge-
oder Entladen werden. Weiterhin werden Treiber, die noch nicht im
Kernel intergriert sind, sondern von Drittanbietern zur Verfügung
gestellt werden i.d.R. als Module zur Verfügung gestellt.
Und wie komme ich jetzt an meinen eigenen Kernel?
Erstmal muss man wissen, welche Version man will/braucht. Oben hatte
ich bereits die Adresse für die "offiziellen" Kernel genannt
(http://www.kernel.org/). Fast jeder Distributor bietet jedoch auch
eigene Kernel-Varianten an, die auf die eine oder andere Art verändert
wurden.
Grundsätzlich gilt aber: Eine Kernel-Versions-Nummer besteht immer aus
3 Zahlen, also z.B.:
2.4.23
Besonders interessant ist hierbei immer die zweite Zahl. Ist diese
gerade, so handelt es sich um eine als stabil geltende Kernel-Version,
ist diese ungerade, so sind dies Sourcen, die sich noch in der
Entwicklung befinden. Gerade am Anfang sollte man sich auf die stabilen
Sourcen beschränken, außer, man weis, was man tut. Weiterhin gibt es
noch mögliche Zusätze zu der Versionsnummer. -pre# (prereleases) sind
immer Vorabversionen zwischen den Versionsnummern, -rc# (release
candidate) sind potentielle Kandidaten für die nächste Versionsnummer.
I.d.R. reichen aber die "vollen" Versionsnummern aus, außer, man weis,
was man tut.
Für die 2.4er-Version ist derzeit 2.4.23 die aktuelle Versionsnummer,
bei der 2.6er-Version ist es 2.6.0. Über die 2.6er-Version wird
Christian euch sicherlich noch was erzählen können, ich beschränke mich
hier jetzt auf den 2.4er.
Wenn man nun seinen Kernel bauen will, läd man dazu die entsprechenden
Sourcen herunter. Diese erreicht man über o.g. Website. Anschließend
entpackt man das Paket. Ich nehme grundsätzlich immer .tar.bz2, weil
die einfach kleiner sind. Die Kernel-Sourcen residieren eigendlich
immer in /usr/src/linux-VERSIONSNUMMER. Also das Archiv nach /usr/src
kopieren und entpacken:
bzcat linux-2.4.23.tar.bz2 | tar x
Dann sollte es dort ein Verzeichnis linux-2.4.23 geben. Dort hinein und
make menuconfig
Kurz darauf erscheint das Konfigmenü. Dort muss man alle Dinge
auswählen, die man im Kernel haben möchte. Auf Details verzichte ich
jetzt, da diese eigendlich nur individuell zu beantworten sind. Nachdem
man dort fertig ist und gespeichert hat, gehts weiter mit:
make dep && make clean bzImage modules modules_install
Je nach Rechner und Auswahl der Module dauert das ganze Spektakel
zwischen 5 Minuten und 5 Stunden (OK, gibt natürlich Hardware, wo es
auch 5 Wochen dauert ...).
Der fertige Kernel liegt dann in /usr/src/linux/arch/i386/boot/bzImage.
Also noch nach /boot kopieren:
cp /usr/src/linux/arch/i386/boot/bzImage /boot
Dann noch den Bootloader konfigurieren (auch das ist ein eigenes Thema
für sich, da je nach Bootloader unterschiedlich) und hoffen, dass der
nächste Reboot klappt. Übrigens sollte man NIE darauf vertrauen, dass
der Kernel geht, also immer einen bereits getesteten in der Hinterhand
haben als Rescue-System. :)
Ich denke, man merkt, dass man über das Thema Linux-Kernel ganze Bücher
voll schreiben kann, ich habe mal einfach versucht, mit auf das
wichtigste zu Beschränken. Ergänzungen oder Rückfragen sind natürlich
jederzeit willkommen.
Gruss
Daniel
Mehr Informationen über die Mailingliste linux