Kernel-Howto

Aus Fedorawiki.de

(Weitergeleitet von Kernel)
Wechseln zu: Navigation, Suche
Dieser Artikel ist Teil der HOWTO Sammlung

Der Kernel ist die Basis des Systems - der Teil, der wirklich Linux heißt. Hier ein paar Informationen und Anleitungen zu.

Inhaltsverzeichnis

Kernel-Sourcen

Spätestens ab Fedora Core 4 werden die Kernel-Sourcen nicht mehr mitgeliefert - auch eine Suche nach entsprechenden rpm-Paketen geht fehl.
Hintergrund ist, dass der Kernel von Fedora Core die wichtigsten Quellen schon mit sich bringt. Um also z.B. Grafiktreiber oder andere Kernelmodule zu bauen, benötigt man bei Fedora Core die Kernel-Sourcen gar nicht mehr.

Kernel im Eigenbau

Voraussetzungen

Um rpmbuild verwenden zu können muß das Paket rpmdevtools installiert werden:

[root]# yum install rpmdevtools

Kernelsourcen holen

Will man sich aber einen eigenen Kernel basteln, sind diese unverzichtbar. Um diese zu bekommen, geht man folgendermaßen vor:

Man muss sich das Kernel src.rpm ziehen und installieren. Das geht am schnellsten mit dem Befehl

[root]# rpm -ivh http://download.fedora.redhat.com/pub/fedora/linux/releases/7/Fedora/source/SRPMS/kernel-$(uname -r).src.rpm

Bevorzugt sollte man allerdings einen der zahlreichen Mirrors benutzen. Unterhalb des Ordners /updates/fedoraversion/SRPMS findet man das aktuellste src.rpm. Der Pfad zum Download muß dann angepasst werden. Dabei muss die 7 natürlich der verwendeten Fedoraversion entsprechen , falls man ein anderes Fedorarelease (für Versionen vor Fedora 7 muss das "releases" durch "core" ersetzt werden) nutzt.Seit F7 ist es außerdem nötig das Tool "sparse" zu installieren:

[root]# yum install sparse

Der nächste Schritt ist, die Sourcen nun noch an die richtige Stellen zu bringen. Am schnellsten geht dies abermals mit dem Befehl

rpmbuild -bp --target=noarch /usr/src/redhat/SPECS/kernel-2.6.spec

Man kann auch gleich seine Hardwarearchitektur mitteilen, der Aufruf sollte dann so erfolgen:

rpmbuild -bp --target=$(uname -m) /usr/src/redhat/SPECS/kernel-2.6.spec

Die Source-Dateien werden dann in /usr/src/redhat/BUILD/kernel-2.6.xx/ auftauchen.

Alte Kernelconfig kopieren

Da aber meistens die Source-Dateien im Verzeichnis /usr/src/ erwartet werden, kann man diese mit folgendem Befehlssatz dorthin verschieben:

cd /usr/src/redhat/BUILD/kernel-<version> 
mv linux-<version> /usr/src/
cd /usr/src
ln -s linux-<version> linux
cd /usr/src/linux

Anmerkung:Im Verzeichnis /usr/src/redhat/BUILD/kernel-2.6.**/ gibt es zwei Kernelvarianten,einmal mit Fedorapatches (linux-2.6.**.ARCH)wobei du mit uname -m deine benötigte Hardwarearchitektur herausfindest oder den Vanillakernel (/vanilla),den Standardkernel von kernel.org ohne Patches und Updates.

Man sollte danach noch das Kernelquellverzeichnis säubern mit dem Befehl:
[root]# make mrproper
(Dazu muß man sich bereits im Verzeichnis /usr/src/linux befinden).Danach sollte man (um sich die Konfiguration zu erleichtern), eine bewährte Konfiguration z.B. aus dem Verzeichnis /boot kopieren (diese kann älterer bzw. gleicher Kernelversion wie die z.Zt. verwendete sein):
[root]# cp /boot/config-2.6.21-1.3228.fc7 /usr/src/linux/.config

Abschließend kann man noch die alten Konfigurationsparameter einstellen, um auf diesen beim bauen aufzubauen:

make oldconfig 

Dieser Schritt ist eigentlich nur nötig, wenn man eine Kernelversion neueren Datums hat, um dann die dazugekommenen Kernelfeatures zu bearbeiten.Jetzt folgt die Anpassung des Makefiles:Bevor man mit der eigentlichen Kernelkonfiguration anfängt, sollte man die Datei /usr/src/linux/Makefile mit einem Editor seiner Wahl bearbeiten und folgendes ändern (dies ist eigentlich nur relevant wenn man zwei identische Kernelversionen vorhalten will, bspw. zu Testzwecken):Beim Vanillakernel steht vermutlich EXTRAVERSION = .1 beim gepatchten Fedorakernel EXTRAVERSION = -prep.Was hier eingegeben wird ist eigentlich belanglos, solange es nicht identisch ist mit der zeitgleich installierten Kernelversion (s.a. weiterführende Hinweise im letzten Abschnitt!). Ansonsten kann man, wenn man sich die .config-Datei aus /boot kopiert hat, direkt zur eigentlichen Kernelkonfiguration übergehen,bspw. mit make menuconfig. Nun kann man einen eigenen Kernel kompilieren.Falls das kompilieren fehlschlagen sollte, beginnt man von vorne und korrigiert die bemängelten Kerneleinstellungen, man sollte dann allerdings vorher erneut ein

make clean

im Verzeichnis /usr/src/linux durchführen!

Wichtig Wichtig: Man sollte beim Bau eines eigenen Kernels nicht vergessen, dass man nun alle Kernel-Module (Grafiktreiber, virtuelle Maschinen, einige spezielle Hardwaretreiber wie für WLan-Karten, etc.) selbst aktuell halten muss. Auch muss man sich nun selbst um Kernel-Updates kümmern!

Kernelkonfiguration anpassen

Da das Ziel eines eigenen Kernel ist, die Konfiguration seinen eigenen Bedürfnissen anzupassen, wird der Kernel im folgenden Schritt konfiguriert. Dies kann auf mehrere Wege geschehen:

1. In der Config selbst. Dazu wird mit dem Editor der Wahl die Datei config geöffnet und angepasst. Mögliche Werte sind normalerweise

  • y (in den Kernel fest reinkompilieren)
  • m (als Modul kompilieren)
  • n (nicht in den Kernel compilieren)

Dieser Weg stellt allerdings den Schwierigsten dar, da keinerlei Hilfestellung geboten wird.

2. Über eine menübasierte Konfiguration in einem Terminal. Dieser Weg ist ressourcenschonend und ihr könnt einfach mit der Tastatur durch die einzelnen Zweige navigieren. Der Befehl hierfür lautet:

  • make menuconfig (ncurses-devel muß installiert sein!)

Mögliche Tastenkombinationen sind hier:

  • y (in den Kernel fest reinkompilieren)
  • m (als Modul kompilieren)
  • n (nicht in den Kernel compilieren)

3. Mit einer GUI. Diese Konfiguration ist am einfachsten, da auch eine Beschreibung des jeweiligen Moduls angezeigt wird. Gestartet wird die GUI durch:

  • make xconfig (für ein Qt-basiertes Programm)
  • make gconfig (für ein gtk+-basiertes Programm)

NTFS-Treiber einbinden

Der Neubau des Kernels kann insbesondere dafür verwendet werden, die NTFS-Treiber fest in den Kernel einzubinden.

Der entsprechende Eintrag ist zu finden unter:

  • File systems --->
    • DOS/FAT/NT Filesystems --->
      • <M> NTFS file system support
        • < > NTFS debugging support
        • < > NTFS write support

bzw. im config-File unter

#
# DOS/FAT/NT Filesystems
#
CONFIG_FAT_FS=m
CONFIG_MSDOS_FS=m
CONFIG_VFAT_FS=m
CONFIG_FAT_DEFAULT_CODEPAGE=437
CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1"
CONFIG_NTFS_FS=m
# CONFIG_NTFS_DEBUG is not set
# CONFIG_NTFS_RW is not set

Der Schreibsupport sollte dabei nicht angewählt werden, da dieser immer noch relativ instabil ist. So soll er unter anderem nur bei Dateien gleicher Größe möglich sein.

Danach kann der Kernel auf die gewohnte Art und Weise gebaut und installiert werden.

Kernel kompilieren

Um den Kernel nun zu kompilieren muss bei einem 1 Prozessorsystem

[root]# make && make modules_install && make install

und bei einem Mehrprozessorsystem (N=CPUAnzahl+1) (damit auch alle CPU's zum kompilieren ausgenutzt werden)

[root]# make -jN && make modules_install && make install

ausgeführt werden. In der Zeit kann man dann gut eine Tasse Kaffee trinken gehn (jenach System reicht die Zeit auch für eine ganze Kanne). Das make install sorgt dafür, das auch gleich der Eintrag in die grub.conf für den neuen Kernel erfolgt und die sonstigen Einträge in /boot etc. erfolgen.

Kernel-rpm erzeugen

Um ein RPM zu erzeugen, muss nach der Konfiguration folgendes eingegeben werden:

make rpm
Nun ist es Zeit das selbsterzeugte Paket zu installieren, welches sich im Verzeichnis /usr/src/redhat/RPMS/<arch> befinden sollte.So installieren wir unser rpm:
[root]# rpm -ivh kernel-*.rpm.
Bei Fedora ist es i.d.R. bei dieser Methode nötig, eine Initiale Ramdisk zu erzeugen, dies geschieht auf folgende Weise, vergewissern das mkinitrd installiert ist:
[root]# rpm -q mkinitrd
und ggf. nachinstallieren. Dann die Ramdisk erzeugen:
[root]# mkinitrd /boot/initrd-2.6.21-1.3228.fc7.img 2.6.21-1.3228_fc7

Bspw. für den aktuellsten Kernel, die Angaben sind so zu machen, wie Sie auch unterhalb von /lib/modules stehen. Der neue Kernel muss dann noch manuell in die grub.conf eingetragen werden. Der Eintrag kann unterschiedlich aussehen, je nachdem ob bei der Installation manuelle Partitionierung bzw. LVM gewählt wurde.

Verschiedene bootbare Kernel

Um verschiedene Kernel booten zu können, kann man diese standardmässig über GRUB (Bootloader) verwalten. Die Konfiguration von GRUB findet man in /boot/grub in der Datei grub.conf.

Siehe auch