• Willkommen im Linux Club - dem deutschsprachigen Supportforum für GNU/Linux. Registriere dich kostenlos, um alle Inhalte zu sehen und Fragen zu stellen.

[HOWTO] Installieren eines zusätzlichen Kernelmodules

Status
Für weitere Antworten geschlossen.

Martin Breidenbach

Ultimate Guru
Installieren eines zusätzlichen Kernelmodules unter SuSE Linux mit Kernel 2.6.x

Zusätzliche Kernelmodule sind z.B. zusätzliche Netzwerkkartentreiber, Grafiktreiber von nvidia und ATI oder die VMware Kernelmodule die nicht Bestandteil des Standardkernels sind. Ab SuSE 10.1 zählen da auch die Treiber für AVM Karten dazu. Kernelmodule müssen immer zum laufenden Kernel kompiliert werden. Und bevor man diese kompilieren kann müssen einige Vorbereitungen getroffen werden.

Kernelquellen und Entwicklertools installieren
Kernelquellen installieren (Paket kernel-source).
- Am einfachsten yast2 starten,
- Software - Software installieren oder löschen,
- im Feld 'Suche' kernel eingeben und dann auch 'Suche' klicken.
- Im rechten Fenster einen Haken vor 'kernel-source' machen.

gcc, make und sonstige Entwicklertools installieren.
- Am einfachsten yast2 starten,
- Software - Software installieren oder löschen,
- unter Filter 'Selektionen' auswählen,
- Haken vor 'C/C++ Compiler und Werkzeuge' machen,
- Übernehmen

Sicherstellen daß Kernelversionen zueinander passen
Die Version der Kernelquellen und des laufenden Kernels muß übereinstimmen.

Überprüfen kann man die Übereinstimmung der laufenden und installierten Kernelversionen mit:
(in einem Konsolenfenster eingeben)
Code:
uname -r
ergibt z.B: 2.6.8-24.18-default
Code:
rpm -q kernel-source
ergibt z.B: kernel-source-2.6.8-24.18
Code:
rpm -q kernel-default
ergibt z.B: kernel-default-2.6.8-24.18

Auf Systemen mit Multiprozessor oder Hyperthreading ist statt kernel-default üblicherweise kernel-smp installiert.

Alternativ kann man auch
Code:
rpm -qa | grep kernel
eingeben. Das listet alle installierten RPMs auf und zeigt davon die an bei denen im Namen 'kernel' vorkommt.

ergibt z.B:
kernel-xen-nongpl-2.6.11.4-21.9
kernel-smp-nongpl-2.6.11.4-21.9
kernel-source-2.6.11.4-21.9
kernel-xen-2.6.11.4-21.9
kernel-smp-2.6.11.4-21.9

Falls man nur mit SuSE Kerneln arbeitet kann man YOU (Yast Online Update) laufen lassen damit die Kernelquellen zum laufenden Kernel passen (der ja vermutlich schon einmal von YOU aktualisiert wurde).

Vorbereitende Arbeiten für die Modulkompilierung
/usr/src/linux ist ein Link auf das Verzeichnis der Kernelquellen.
(in einem Konsolenfenster eingeben)
Code:
cd /usr/src/linux
make mrproper
make cloneconfig
make prepare-all

Die letzten drei Schritte erzeugen eine Datei mit der Kernelkonfiguration und erstellen dann noch ein paar Dateien die möglicherweise bei der Kompilierung des zusätzlichen Kernelmodules benötigt werden.

'make mrproper' löscht alle ggf von einer früheren Kernelbausitzung erstellten temporären Dateien (auch die von der Kernelkonfiguration)
'make cloneconfig' übernimmt die Kernelkonfiguration aus /proc/config.gz nach /usr/src/linux. Entspricht 'zcat /proc/config.gz > .config'
'make prepare-all' äh nunja bereitet alles vor :D

Zusätzliches Kernelmodul entsprechend der dem Modul beiliegenden Anleitung installieren

Hinweis: Wenn man nach der Installation eines zusätzlichen Kernelmodules durch manuelles Selbstkompilieren einen Kernelupdate z.B. durch YOU durchführt dann wird das selbstkompilierte Modul i.A. NICHT aktualisiert. Beim nächsten Reboot (den man nach Kernelupdate durchführen sollte) wird es dann nicht geladen. Das bedeutet daß man es dann nochmal installieren darf.
 

mikrosaft

Member
Wenn man ein Modul kompilieren will, dass nicht in einem Extrapaket vorliegt, sonder dem Kernel selbst beiliegt, gibt es leider keine Installationanleitung.
Ein solcher Fall wäre z.B. das "Tunen" des Speedstep-Moduls für die mobilen Intel-CPUs.

In einem solchen Fall geht man dann wie folgt vor:
Code:
#! /bin/sh

# Nachträgliches kompilieren eines gepatchten Centrino-Moduls:
KERNEL=`uname -r | sed s/-default//`
VERSION=`uname -r`
KDIR="/usr/src/linux-${KERNEL}"
cd $KDIR
mkdir ./.tmp_versions
make arch/i386/kernel/cpu/cpufreq/speedstep-centrino.ko
mv /lib/modules/${VERSION}/kernel/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.ko \ /lib/modules/${VERSION}/kernel/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.ko.org
cp arch/i386/kernel/cpu/cpufreq/speedstep-centrino.ko /lib/modules/${VERSION}/kernel/arch/i386/kernel/cpu/cpufreq/speedstep-centrino.ko
depmod

Gruss
ms
 

Tueftel

Newbie
Hallo Martin,

was meinst Du mit Yast2 ? Hat ein System mehrere Yaste, die verschieden funktionieren ?

Gruß Tueftel
 

Grothesk

Ultimate Guru
Nein, das Programm heißt halt so.
yast war der Vorgänger. Es gibt aber noch eine Umleitung auf yast2, wenn du in der Konsole yast eingibst. Aber im System ist nur yast2 vorhanden.
 

ayCaramba

Newbie
In der Konsole/Bash gibst du yast für die textbasierte Version von YaST ein. Wenn du dich in einer grafischen Oberfläche befindest, kannst du auch die GTK/QT - Applikation von SuSE mit yast2 starten. Sieht schöner aus, kann allerdings genauso wie viel wie 'yast'...
 
Martin Breidenbach schrieb:
Und bevor man diese kompilieren kann müssen einige Vorbereitungen getroffen werden.

Falls man nur mit SuSE Kerneln arbeitet kann man YOU (Yast Online Update) laufen lassen damit die Kernelquellen zum laufenden Kernel passen (der ja vermutlich schon einmal von YOU aktualisiert wurde).

Vorbereitende Arbeiten für die Modulkompilierung
/usr/src/linux ist ein Link auf das Verzeichnis der Kernelquellen.
(in einem Konsolenfenster eingeben)
Code:
cd /usr/src/linux
make mrproper
make cloneconfig
make prepare-all
cloneconfig usw. trifft nicht für Kernel-RPMs zu, da die schon vorkonfiguriert sind.
 

Fisnix

Newbie
Hallo,

ich wollte das Modul forcedeth.ko neu komplilieren, weil dieser Netzwerkartentreiber die MAC Adresse meiner nvidia onboard-nic immer verkehrt herum ermittelt. Das sollte zwar in der forcedeth Version 0.60 behoben sein, aber offenbar sind die Hersteller wieder dazu übergegangen, die MAC-Adresse jetzt wieder in der richtigen Reihenfolge in der Karte abzulegen, so dass forcedeth, eine eine falsche Reihenfolge erwartend, die (richtige) MAC-Adresse umdreht und damit wieder eine ungültige MAC-Adresse vorfindet. Der Treiber erkennt, dass nunmehr eine ungültige MAC vorliegt und erzeugt daraufhin eine zufällige, aber gültige MAC. Das führt dazu, dass bei jedem Booten udev ein neues Gerät erkennt und neue Schnittstellen anlegt werden (eth0, eth1, eth2...)

Dort im Quellcode, wo die zufällige MAC erzeugt wird, habe ich jetzt einfach die richtige MAC meiner Netzwerkkarte hart codiert. Nicht elegant, aber da ich so gut wie keine Ahnung von C habe, eine passable Lösung für mich. Dann habe ich nach der Anleitung von mikrosaft den Treiber neu kompiliert. Hat auch alles wunschgemäß funktioniert und der Treiber tut jetzt was er soll.

Aber: der Treiber ist jetzt ungefähr 7 mal so groß geworden, wie das Originalmodul (488000 statt 72000). Meine Vermutung: nach dem Aufruf von make erhielt ich zunächst eine Fehlermeldung, dass kein Target verfügbar sei und ich solle doch mit make oldconfig oder ähnlichen Kommandos ein solches erzeugen. Das habe ich einfach einmal gemacht und es wurde die Datei .config erzeugt und danach konnte das Modul forcedeth.ko auch klaglos kompiliert werden. Kann es sein, dass dadurch jetzt irgendwelche anderen Kernelteile mit einkompiliert wurden, was dann die Größe des Moduls so aufgebläht hat?
 

michalla

Newbie
Hallo,

ich bin durch Zufall auf diesen Thread gestoßen...
... und trauriger Besitzer eines Aldi-USB-Empfängers MD95700. Mein Rechner läuft unter OpenSuSE11.0 (Kernel 2.6.25.18-0.2-pae) und KDE 3.5.10 Rel. 27.4.

Der DVB-Empfänger lief auf meinem alten SuSE10.2 einwandfrei, nur hier bei OpenSuSE11.0 tut er's nicht, weil das Modul dvb-usb-cxusb fehlt. Der Versuch, dieses Modul nach obiger Anleitung nachzukompilieren scheiterte, weil unter menu-config in Drivers/... nichts angeboten wird, was ich für dieses Modul auswählen könnte. So, und nu sitz ich da...

Unter Knoppix von der DVD läuft der Receiver einwandfrei, schade, daß bei OpenSuSE nicht auch die Treiber für die in unserem Land doch recht weit verbreitete Box (Aldi hat davon mehr als 60.000 Stück verkauft) enthalten sind.

Kann mir jemand weiterhelfen? Es ist echt lästig, für eine TV-Sendung jedesmal OpenSuSe runter- und dann Knoppix hochfahren zu müssen.

Tschüß
der Michael
 

michalla

Newbie
Hallo alle z'samm,

hier bin ich nochmal mit meinem Problem mit der MD95700. Nach vielem Lesen und Suchen bin ich letztendlich eigentlich kein bißchen schlauer.

Nur eines ist mir aufgefallen:

Um dieses Modul nachzukompilieren, müssen ja auch die Sourcen dafür vorhanden sein. Da ich sie unter menuconfig nirgends gefunden habe, habe ich in den Sourcen direkt gesucht. Wenn ich nicht total daneben liege, müßte die entsprechende Datei ja irgendwie

dvb_usb_cxusb.h

oder auch

dvb_usb_cxusb.c

heißen. Ist diese Annahme richtig? Eine derartige Datei ist aber bei den Sourcen nicht enthalten. Bedeutet dies, daß dann die Box nichtmehr unterstützt wird? Wo kann ich nachlesen, ob der Treiber noch enthalten ist oder wo der Treiber aufzutreiben ist?

Ich bitte um Hilfe!

Danke
Tschüß
der Michael
 

michalla

Newbie
Hallo,

mein Problem hat sich erledigt, in einem anderen Forum war man fixer oder hilfsbereiter oder was auch immer...!

Danke
Tschüß
der Michael
 

Gimpel

Guru
[Howto] threads sind nicht dazu gedacht um Fragen zu stellen, mach dazu ein extra topic auf bitte.

Ich mach das mal dicht. Das gehört eh in das Wiki.
 
Status
Für weitere Antworten geschlossen.
Oben