Linux-Praxisbook: Kernel-Konfiguration

Vorbereitung und Information

Bearbeiten

Die Konfiguration des Kernels richtet sich in erster Linie an erfahrenere Nutzer, die ihr System optimal anpassen möchten, und jene, die einen bestimmten Treiber brauchen, der nicht im Standardkernel der Distribution enthalten ist. Um die weiteren Vorgänge besser nachvollziehen zu können, sollten Sie ein wenig mehr über die Funktion und den Aufbau des Kernels wissen.

Kernel und Module

Bearbeiten

Der Kernel (Linux) ist der Systemkern, auf ihn baut nahezu jede Kommunikation zwischen Hardware und Software auf. Ohne zu sehr ins Detail gehen zu wollen, können Sie sich den Kernel als einen "Boten" vorstellen, der zwischen dem Hardwaresystem und dem Softwaresystem vermittelt. Natürlich ist das eine sehr einfache Interpretation, der Kernel übernimmt noch weitaus mehr, wie Speicher-, Zeit-, Prozessmanagement, Scheduling, uvm. Die Software muss daher auch nicht wissen, wie sie auf das jeweilige Gerät zugreifen muss, sondern nur die universale Kernelschnittstelle ansprechen. Andersherum fängt der Kernel Interrupts der Hardware ab, wie z.B. der CPU, um bpsw. mittels einer prozessorbedingten Menge von Zeitintervallen (Jiffies) die Systemzeit zu repräsentieren.

Damit der Kernel eben jene Fähigkeit besitzt, auf die Hardware zuzugreifen, bedingt es passender Treiber. Diese lassen sich aufgrund der Kernelstruktur auf zweierlei Weise einbauen; entweder Sie übersetzen sie statisch mit dem Kernel, sodass diese fest implementiert sind, oder Sie übersetzen sie als Module. Module sind nichts anderes als Maschinencode, welcher sich dynamisch zur Laufzeit hinzuladen lässt. Damit haben Sie die Möglichkeit, Treiber nur bei Bedarf laden zu lassen. Beispielsweise wenn Sie ein bestimmtes Gerät nicht ständig am System angeschlossen haben (z.B. Wechsellaufwerke). Der Vorteil an Modulen ist, dass sie es ermöglichen den "Grundkernel" klein zu halten und damit vor allem bei Geräten mit geringer Arbeitsspeicherkapazität Platz zu sparen.

Dies soll für den groben Überblick reichen, kommen wir nun zur Konfiguration des Kernels.

Sammeln von Systeminformationen

Bearbeiten

Sie sollten sich über die Konfiguration Ihres Systems genau informieren und wissen, was Sie brauchen, und was nicht. Gerade beim ersten Mal ist dies etwas langwierig und mühselig. Daher folgen ein paar Tipps.

Informationen zur CPU:

cat /proc/cpuinfo

Informationen zu PCI-, API-, und ISA-Geräten, sowie Controller:

lspci

Informationen zu USB-Geräten:

lsusb

Informationen zur Hardware, die vom aktuellen Kernel erkannt wurde:

dmesg |less

Es empfiehlt sich, die Informationen neben der Konfiguration parat zu haben und besonders bei Versionsnummern sehr achtsam zu sein.

Sichern des aktuellen Kernels

Bearbeiten

Bevor Sie sich ins (Un)Glück stürzen, ist es sehr wichtig, den aktuellen Kernel zu sichern. Sie können sich das jedoch sparen, wenn Sie dem neuen Kernel einen anderen Namen geben als den des aktuellen. In diesem Fall überspringen Sie diesen Abschnitt und fahren Sie mit 'Kernelquellen beschaffen' fort.

Schauen Sie in das /boot-Verzeichnis, da sollte sich der Kernel befinden. Wenn Sie sich nicht sicher sind, welche der Dateien der Kernel ist, dann prüfen Sie dessen Dateityp mit 'file':

file /boot/kernelname

Wenn Sie etwas wie das Folgende bekommen, sind Sie richtig:

/boot/kernelname: Linux kernel [...]

Machen Sie ein Backup, indem Sie den Kernel kopieren:

cp /boot/kernelname /boot/kernelname.bak

Auf manchen Systemen befindet sich der Kernel im Root-Verzeichnis (/):

cp /vmlinuz /vmlinuz.bak

Kernelquellen beschaffen

Bearbeiten

Es gibt mehrere Wege, sich die Quellen (Sources) zu beschaffen. Meist bietet Ihre Distribution bereits einen oder mehrere Kernel an. Sie sollten sich diese, insbesondere wenn Sie noch nicht mit der Kernelkonfiguration vertraut sind, genauer anschauen. Diese bieten meist an die Distribution angepasste Quellen an (Patches), seien es sicherheitsrelevante Patches, oder zusätzliche Features. Suchen Sie dazu mit Ihrem Paketmanager nach aktuellen Kernels.

Der andere Weg ist das Beschaffen der Quellen über [1]. Die hier angebotenen Kernel sind die aktuellsten, jedoch ohne Patches (Vanilla-Kernel). Wenn Sie solch einen benötigen, greifen Sie hier zu. Wählen Sie den oberst aufgelisteten, und klicken Sie rechts auf das F. Damit bekommen Sie den kompletten Kernel. Laden Sie sich ihn herunter und speichern Sie ihn auf ihrem Dateisystem ab. Entpacken Sie den Kernel, nachdem Sie in das Verzeichnis /usr/src/ gewechselt sind. Sie sollten dann ein Verzeichnis mit dem Namen 'linux-kernelversion' haben.

Wenn Sie den Kernel mittels Ihrem Paketmanager installiert haben, sollte sich im Verzeichnis /usr/src/ bereits das Kernelverzeichnis befinden.

Wechseln Sie in das Verzeichnis. Nun kommen wir zur eigentlichen Konfiguration.

Konfiguration

Bearbeiten

Zum Konfigurieren des Kernels gibt es drei Programme. Die folgende Liste zeigt Ihnen welche es gibt, und worin sie sich voneinander unterscheiden.

make config

Der traditionelle, jedoch sehr unbequeme Weg. Sie müssen hierbei jede einzelne Kerneloption einzeln bestätigen und können bei einem Tippfehler nicht mehr zurückspringen und korrigieren. Für die meisten ungeeignet und nicht empfohlen.

make menuconfig

Dies ist der empfohlene Weg. Sie können menünavigiert Optionen ein- und ausschalten.

make xconfig

Dieser ist von Aufbau und Navigation ähnlich 'menuconfig', nur das hier ein laufender X-Server benötigt wird.

Sie sehen, sofern Sie sich für die zweite oder dritte Möglichkeit entschieden haben, ein Menü mit mehreren Unterpunkten. Wenn Sie dies das erste Mal machen, sollten Sie sorgfältig alle Unterpunkte durchgehen und entscheiden, was Sie brauchen und was nicht. Da es vor allem beim ersten Durchgang ein wenig verwirrend und überfordernd scheint, gibt es zu (fast) allen Punkten Hilfeseiten, welche Sie mit 'Shift + ?' aufrufen können.

Bei fast jeder Option können Sie individuell entscheiden, ob Sie den Treiber fest mit in den Kernel einbauen wollen, oder als dynamisches Modul, indem Sie mittels der Leertaste auswählen. Ein '*' bedeutet fest einbauen und 'M' als Modul übersetzen.

Wenn Sie alles erforderliche ausgewählt haben, sollten Sie die Konfiguration abspeichern, indem Sie 'Esc' drücken und bestätigen.

Sie haben nun im Rootverzeichnis des Kernels eine Datei namens '.config'. In dieser sind all Ihre getroffenen Entscheidungen zur Konfiguration vermerkt. Übersetzen Sie Ihren Kernel nun mit

make all

Dies kann je nach System ein paar Minuten dauern. Wenn der Kernel fertig kompiliert ist, müssen Sie die Module, sofern vorhanden, ins richtige Verzeichnis kopieren:

make modules_install

Wenn Sie bei der Konfiguration die Option 'Automatic kernel module loading' aktiviert haben, werden die Module automatisch beim Systemstart geladen. Ansonsten tragen Sie, wenn bestimmte Module beim Start automatisch geladen werden sollen, dessen Modulnamen in /lib/modules/kernelversion/modules.dep mit der Endung '.ko' ein. Die restlichen Module können Sie später im Betrieb mit 'modprobe' nachladen.

Nun sollten Sie Ihren Kernel in Ihr boot-Verzeichnis kopieren (stellen Sie sicher, dass dieses auch gemountet ist), jedoch ohne Ihren alten Kernel zu überschreiben:

cp arch/i386/boot/bzImage /boot/linux-VERSION

Zusätzlich können Sie noch Folgendes mitkopieren:

cp .config /boot/config-VERSION
cp System.map /boot/System-VERSION

Bootloader konfigurieren

Bearbeiten

Um den Kernel beim Systemstart zu laden, müssen Sie Ihren Bootloader entsprechend konfigurieren.

Wenn Sie den Bootloader GRUB verwenden, tragen Sie unter Ihren bestehenden Punkten soetwas wie das Folgende ein:

title Neuer Linux-Kernel
root (hdx,y)
kernel /linux-VERSION root=/root-partition

Schauen Sie in die Manual-Page, wenn Sie nicht wissen, was für 'root (hdx,y)' einzutragen ist.

Nun starten Sie das System neu und wählen Ihren neuen Kernel aus.

Fehleranalyse

Bearbeiten

Achten Sie beim Start des Kernels auf Fehler- und Warnmeldungen. Wenn es einen Kernel-Panic gibt, dann analysieren Sie die Kernelmeldungen und überlegen Sie, was Ihrem Kernel fehlt. Oft liegt es daran, dass der Kernel das Dateisystem, auf dem sich das System befindet, nicht laden kann. Sie müssen in diesem Fall das Root-Dateisystem (/), ob ReiserFS oder ext3, fest in den Kernel einkompilieren.