Kernel-Howto

Aus VDR Wiki
Wechseln zu: Navigation, Suche

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 Standarddistribution 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 -xvjf linux-2.x.x.tar.bz2
b) linux-2.x.x.tar.gz:
tar -xvzf linux-2.x.x.tar.gz
c) linux-2.x.x.tar.gz:
tar -xvzf linux-2.x.x.tgz

ln -s linux-2.x.x linux

cd linux

Konfigurieren des Kernels

Hinweis
Hinweis

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.

Hinweis
Hinweis

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 Konfiguration 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 wird es 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 durch geguckt, ob nichts vergessen wurde? Dann speichern.

Hinweis
Hinweis

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 Distribution variieren.

Installation des Kernels

Für den Grub-Nutzer

Statt bzImage heißt der Kernel im folgenden Beispiel vmlinuz.

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 gegangen 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.