Kernel-Howto
Inhaltsverzeichnis |
Einleitung
Für viele Zwecke ist es nötig, einen eigenen Kernel zu erstellen. Dafür kann es mehrere Gründe geben:
- Treibermodule die in einer Standarddistri nicht enthalten sind
- manuelles Installieren von LIRC
- wenn im Kernel Module einkompiliert sind, aber andere Module verwendet werden sollen
- Raid-Systeme
- ungewöhnliche Dateisysteme
- sonstiges
Das Erstellen eines Kernels ist nicht so schwer wie es immer dargestellt wird, setzt aber beim Konfigurieren MITDENKEN voraus.
Benötigte Dinge
- Compiler (bevorzugt gcc-3.x.x)
- make
- bzip2 oder gzip (auf fast jedem System vorhanden)
- tar (auf fast jedem System vorhanden)
- die Kernel-Quellen (linux-2.{4,6}.x.{tar.bz2, tar.gz, tgz})
Die Schritte im Einzelnen
Download der Kernelquellen
Es gibt zwei prinzipielle Möglichkeiten:
- Installation eines Kernels von www.kernel.org
- Installation eines distributionsspezifischen Kernels, der dann zumeist Anpassungen an das jeweilige System enthält
Hinweis: Normalerweise spricht nichts dagegen, einen aktuellen Kernel von kernel.org herunterzuladen. Der Wechsel von einer Kernelgeneration auf die nachfolgende (2.4.x => 2.6.x) bringt jedoch zumeist weitreichende Änderungen an zusätzlicher Software mit sich. Beim Wechsel von 2.4.x auf 2.6.x sind die modutils *vorher* gegen die modinit-tools auszutauschen.
Kopieren des Kernels nach /usr/src
Die Kernelquellen müssen nach /usr/src kopiert werden. Je nach Kernelversion 2.4 oder 2.6 den Befehl bitte anpassen.
cp linux-2.{4,6}.x /usr/src
Wechsel nach /usr/src und Entpacken der Quellen, Anlegen eines symbolischen Links
cd /usr/src a) linux-2.x.x.tar.bz2: tar xvj linux-2.x.x.tar.bz2 b) linux-2.x.x.tar.gz: tar xvz linux-2.x.x.tar.gz c) linux-2.x.x.tar.gz: tar xvz linux-2.x.x.tgz ln -s linux-2.x.x linux cd linux
Konfigurieren des Kernels
Das Konfigurieren eines Kernels ist der schwierigste Teil der Installation. Hier kommt es darauf an, Hardware, Dateisysteme und grundlegende Software-Einstellungen zu machen! Da hier nicht bekannt ist welche Hardware und welche Distribution du verwendest, können hier nur allgemeine Ratschläge gegeben werden.
make menuconfig
Nach diesem Befehl öffnet sich die Wunderwelt der Kernelkonfiguration. Nicht gleich verzweifeln, hier kommen einige Tipps.
Falls die alte Konfigurationsdatei des Kernels noch vorhanden ist, lohnt es sich, diese *vor* dem make menuconfig nach /usr/src/linux zu kopieren. Die (versteckte) Datei nennt sich .config, übliche Fundorte sind das Verzeichnis der alten Kernelquellen, das Verzeichnis /boot, /lib/modules/<ALTE_KERNELVERSION>
- Code maturity level options
Die Nachfrage, ob ihr Development-Treiber in der Konfiguation angeboten bekommen wollt. Meist NEIN.
- Loadable module support
Klar wollt ihr, der DVB-Treiber sollte ja als Modul laufen! Kernel module loader ebenso.
Processor type and features
Hier ist der korrekte Prozessor anzugeben. Sollte nicht schwierig sein. Interessant sind hier noch MTRR Support und APIC support
- General setup
Hier wird wenigstens (!) Networking support, pci support, support for hot-pluggable devices, SYS V IPC, syctl und ELF support benötigt. Die meisten werden auch beim ACPI support ein Häkchen machen wollen.
- Parallel port support
Wer ein LCD ansteuert wird den wohl auch brauchen, pc-style hardware & IEEE1284 mode (bidirektionaler Modus)
- Plug and Play
Hiermit sind uralte ISA-Karten gemeint. 99,9% aller Nutzer haben so etwas nicht mehr. Gewöhnlich nein.
- Block devices
Wer hat noch ein altes Floppy? Loopback device sollte jedenfalls mit angekreuzt werden. Einige nutzen auch RAM-Disks.
- Networking options
Wenigstens TCP/IP.
ATA/IDE/MFM/RLL support
Hier gehören IDE/ATAPI CDROM und IDE/ATAPI ATA2 Disc support rein, beide direkt in den Kernel. Wer ältere cdrecord Versionen benutzt auch SCSI emulation support als Modul. Ebenso Generic PCI IDE chipset support, Sharing PCI IDE interrupts support. Wenn dein Mainboard das unterstützt, auch Generic PCI IDE busmaster-DMA support. Nicht vergessen ein Kreuz bei deinem Mainboard Chipsatz zu machen.
- SCSI support
Brauchen die wenigsten.
- Network device support
Hier gehören die Häkchen für deine Netzwerkkarte rein. Bitte auch in die Untermenüs gucken!
- Input core support
Für Nutzer von usb Maus/Tastatur.
- Character devices
Hier wirds interessant. Support für nvram und enhanced real time clock support für die nvram Nutzer. Wer die serielle Schnittstelle braucht: 16550 support ankreuzen. Unix98 pty support ankreuzen. LIRC user: support for user-space parport drivers. BTTV TV Karten brauchen i2c support (möglichst als Modul).
- Multimedia devices
Video for Linux als Modul. 2.4.x-Nutzer sollten hier außer dem Kreuz bei Video for Linux nicht weiter ankreuzen und aktuelle BTTV/DVB-Treiber besorgen. 2.6.x Nutzer können auch den Kerneltreiber benutzen.
- Filesystems
Alle benötigten Dateisysteme hier auswählen. Lieber als Modul bauen mit einer Ausnahme: das Dateisystem was als root-Dateisystem ("/") verwendet wird MUSS in den Kernel einkompiliert werden! Sehr interessant sind hier das /proc Dateisystem und das /dev Dateisystem. Hier lohnt sich der Besuch bei Google um herauszufinden was das ist oder ein Blick in die LFS und Gentoo Sektion hier.
- Sound
hier nur ein <M> bei support machen und ALSA verwenden. Die ALSA Module müssen *nach* dem neuen Kernel erneut kompiliert werden!
- USB support
Die meisten brauchen usb.
Okay. Habt ihr alles? Noch mal alles durchgeguckt, ob nichts vergessen wurde? Dann speichern.
Die hier gegebenen Hinweise sind extrem stark von Verwendungszweck, Hard- und Software sowie Kernelversion abhängig. Es kann KEINE GARANTIE für Funktion mit dieser Konfiguration gegeben werden!
Kompilieren des Kernels
make dep (NUR 2.4.x, entfällt für 2.6.x) make bzImage make modules make modules_install
Bis hierhin ist alles glatt gegangen? Dann weiter.
cp arch/i386/boot/bzImage /boot/bzImage-<KERNELVERSION>
Der hier angegebene Ort /boot kann je nach Distri variieren.
Installation des Kernels
für den Grub Nutzer
Die Datei menu.lst unter /boot/grub muss angepasst werden. Hier ein Beispiel:
# menu.lst Beispiel # default=0 timeout=0 title Linux-2.4.22 root (hd0,0) kernel /vmlinuz-2.4.22 ro root=/dev/hda2 initrd /initrd-2.4.22.img
Grub benutzt andere Laufwerksbezeichnungen als Linux. Beispiele:
1. Festplatte : Grub hd0 - Linux /dev/hda Partition1 : Grub hd0,0 - Linux /dev/hda1 Partition2 : Grub hd0,1 - Linux /dev/hda2
2. Festplatte: Grub hd1 - Linux /dev/hdb Partition1 : Grub hd1,0 - Linux /dev/hdb1 Partition2 : Grub hd1,1 - Linux /dev/hdb2
Es muss im Gegensatz zu Lilo nach einer Änderung der Konfiguration kein Befehl aufgerufen werden!
für den lilo Nutzer
Die Datei /etc/lilo.conf muss editiert werden, genauer der neue Kernel hinten angefügt werden.. hier ein Beispiel:
image = /boot/bzImage-2.6.5 label = 2.6.5 root = /dev/hda1
Dabei ist "image" der Pfad zum frisch gebackenen Kernel, "label" der angezeigte bootmenue-Eintrag, "root" die Angabe des / - Verzeichnisses.
Nach dem Speichern muss noch
/sbin/lilo
aufgerufen werden. Wenn alles glatt gegegangen ist, steht beim nächsten Booten ein neuer Eintrag zur Verfügung, der den neuen Kernel bootet. In dieser Anleitung wurde absichtlich der alte Kernel NICHT entfernt, um bei Problemen problemlos den alten Kernel booten zu können.
Bei Problemen
Mit einem neuen Kernel treten oft Probleme auf: Nicht geladene Codepages, vergessene Maus- oder andere Treiber, nicht einkompilierte IDE-Treiber oder Dateisysteme. In diesen Fällen wird einfach make menuconfig erneut aufgerufen. Alle alten Änderungen sind noch da, make clean aufrufen und alle weiteren Schritte erneut durchlaufen.