In Ermangelung anderer sinnvoller Tätigkeiten, habe ich gestern abend meinen Heimat-Desktop von Debian Etch auf Lenny migiert. Ok, vielleicht hätte es auch etwas Sinnvolles zu tun gegeben, aber mir war nach spielen …
Das Update lief reibungslos, aptitude lief fehlerfrei durch, ein Reboot brachte Lenny dann mit Kernel 2.6.21 an den Start.
Die einzige manuelle Anpassung, die nun noch übrig blieb, war, da der freie Nvidia-Treiber “nv” auf meinem Bildschirm die native Auflösung von 1440×900 nicht unterstützt (Bug#438850), die Installation des proprietären Treibers vom Hersteller.
Doch der Versuch, den heruntergeladenen Treiber nun über:
# sh NVIDIA-Linux-x86-100.14.11-pkg1.run
zu installieren schlug bei mir fehl:
The CC version check failed:
The Compiler used to compile the kernel (gcc 4.1) does not exactly match the current compiler (gcc 4.2)
Das war schnell behoben:
# apt-get install gcc-4.1
# ln -sf /usr/bin/gcc-4.1 /usr/bin/gcc
Nächster Versuch. Doch auch hier brach der NVidia-Installer wieder ab. In der /var/log/nvidia-installer.log tauchte die nächste Fehlermeldung auf:
FATAL: modpost: GPL-incompatible module nvidia.ko uses GPL-only symbol ‘paravirt_ops’
Blöde Nachricht…
Sie besagt im Endeffekt, dass der Kernel uns den NVidia-Treiber nicht installieren lassen möchte, da dieser nicht der GPL unterliegt.Edit: Das war etwas missverständlich, genauer sollte es heißen: NVidia darf die zum Übersetzen benötigte Paravirt-Schnittstelle im proprietären Treibermodul nicht nutzen, da diese komplett der GPL unterliegt.
Einzig mögliche Lösung: selbst einen Kernel basteln, der die paravirt_ops nicht enthält.
Das ist eigentlich nicht kompliziert, je nach System nur ein wenig zeitaufwändig. Hier die Arbeitsschritte zur Installation:
# aptitude install linux-source-2.6.21 build-essential kernel-package fakeroot gcc-4.1
# cd /usr/src
# tar xjvf linux-source-2.6.21.tar.bz2
# ln -s linux-source-2.6.21 linux
# cd linux
# cp /boot/config-2.6.21-2-486 .config
Jetzt sind die Source und die zur Kernel-Erstellung nötigen Pakete heruntergeladen, außerdem ist die Konfiguration des aktuell laufenden Kernels jetzt auch die Vorgabe zur Erstellung unseres eigenen.
Doch bevor wir nun mit der Übersetzung der Quellen beginnen können, muss natürlich noch die Option “PARAVIRT” deaktiviert werden. Am einfachsten geht das, indem man die Datei “.config” in einem Texteditor öffnet, und in der Zeile
CONFIG_PARAVIRT=y
das “y” durch ein “n” austauscht.
Jetzt geht’s an’s Kernel backen:
# fakeroot make-kpkg - -append-to-version=.meiner kernel_image
Fertig. Auch wenn’s etwas dauert
Jetzt haben wir unseren eigenen Kernel als Debian-Paket unter /usr/src/ liegen. Dieses Paket installieren wir nun:
# dpkg -i linux-image-2.6.21.meiner-10.00.Custom_i386.deb
Der Kernel selbst ist nun schon startklar, jetzt stellen wir ihm noch eine Ramdisk an die Seite:
# mkinitramfs -o /boot/initrd.img-2.6.21.meiner /lib/modules/2.6.21.meiner
erstellt die Datei. Damit die Initial-Ramdisk auch beim Bootvorgang eingebunden wird, teilen wir dem Bootloader Grub dies mit, indem wir die /boot/grub/menu.lst wie folgt anpassen:
title Debian GNU/Linux, kernel 2.6.21.meiner root (hd0,0) kernel /vmlinuz-2.6.21.meiner root=/dev/sda3 ro initrd /initrd.img-2.6.21.meiner savedefault
Das Root-Device muss natürlich noch an die eigene Umgebung angepasst werden, hier hilft ein Blick auf die Boot-Optionen des original Debian-Kernels einen Eintrag weiter unten.
Das war’s im Groben auch schon. Nach einem Neustart sollte sich der proprietäre NVIDIA-Treiber nun ohne Schwierigkeiten kompilieren und installieren lassen:
Da der NVIDIA-Treiber nicht bei laufendem XServer erstellt werden kann (warum auch immer), wechseln wir mit [STRG][ALT][F1] auf die erste Konsole, und melden uns hier als root an. Ein:
/etc/init.d/gdm stop
beendet den XServer dann.
Jetzt sollte der Installationsversuch des Grafikkartentreibers über
# sh NVIDIA-Linux-x86-100.14.11-pkg1.run
endlich erfolgreich abzuschließen sein.
8. Oktober 2007 um 16:26
fakeroot make-kpkg –append-to-version=.meiner kernel_image
muss
fakeroot make-kpkg - -append-to-version=.meiner kernel_image
sein, zumindest bei mir.
Dankeschön, hab jetzt zum ersten Mal einen “eigenen” Kernel!
8. Oktober 2007 um 16:30
@BvTaa: Das ist das Stylesheet. Der macht aus zwei “-” einfach einen Gedankenstrich. Muss ich wohl mal anpassen. Danke für die Info.
Gruß
Stefan
23. November 2007 um 01:58
Danke für die Anleitung, nun hat das erstellen eines eigenen Kernels das erste mal auf Anhieb geklappt, NVIDIA und KDE läuft