Treiber
Linux-Netzwerktreiber einrichten: Modul finden, laden, dauerhaft machen
Von der PCI-ID zum geladenen Modul: Wie man unter Linux herausfindet, welcher Treiber zuständig ist, ihn lädt, Parameter setzt und die Einstellungen so ablegt, dass sie den nächsten Neustart überleben.
Von Redaktion SysKonnect
Kurz gesagt
Der Weg ist immer derselbe: PCI-ID mit lspci -nn auslesen, geladenes Modul mit lspci -k prüfen, bei Bedarf mit modprobe laden und Parameter dauerhaft in /etc/modprobe.d ablegen. Alles, was nur in der Shell gesetzt wurde, ist nach dem Neustart weg.
Netzwerkprobleme unter Linux wirken oft mysteriös, folgen aber fast immer derselben Kette: Hardware erkannt, Modul geladen, Schnittstelle konfiguriert. Wer diese Kette der Reihe nach prüft, ist meist in fünf Minuten fertig.
Schritt 1: Ist die Hardware da?
lspci -nn | grep -i -E "ethernet|network"
Die Ausgabe nennt Hersteller, Bezeichnung und in eckigen Klammern die PCI-ID im Format [10ec:8168]. Erscheint hier nichts, ist die Karte nicht angesprochen worden - dann geht es weiter mit der Fehlersuche bei nicht erkannten Karten. Bei USB-Adaptern heißt der Befehl lsusb.
Diese ID ist der einzige verlässliche Ausgangspunkt. Modellbezeichnungen auf Karten und in Shops sagen wenig, weil unter demselben Namen über die Jahre unterschiedliche Chips verbaut wurden.
Schritt 2: Welches Modul ist zuständig?
lspci -nnk | grep -A 3 -i ethernet
Unter dem Gerät stehen zwei Zeilen: Kernel driver in use und Kernel modules. Die erste sagt, was gerade läuft, die zweite, was der Kernel für passend hält. Steht nur die zweite Zeile da, ist das Modul verfügbar, aber nicht geladen.
Für eine bereits aktive Schnittstelle geht es auch direkt:
ethtool -i enp3s0
Schritt 3: Modul laden
sudo modprobe sky2
Danach dmesg | tail -20 prüfen. Dort steht entweder die erfolgreiche Initialisierung mit MAC-Adresse und Verbindungsstatus - oder der Grund, warum es nicht geklappt hat. Ein häufiger Fall ist eine fehlende Firmware-Datei; die Meldung nennt dann den erwarteten Dateinamen, und das Firmware-Paket der Distribution löst das Problem.
Schritt 4: Einstellungen dauerhaft ablegen
Alles, was in der Shell gesetzt wird, ist nach dem Neustart weg. Das ist der Grund, warum ein vermeintlich behobenes Problem Tage später zurückkommt.
Modulparameter gehören in eine eigene Datei unter /etc/modprobe.d/:
# /etc/modprobe.d/netzwerk.conf
options sky2 disable_msi=1
Ein störendes Modul ausschließen:
# /etc/modprobe.d/blacklist-netzwerk.conf
blacklist sk98lin
Das ist genau der Fall, der bei alten Karten auftritt, wenn neben dem Kernel-Modul noch ein extern gebauter Herstellertreiber vorhanden ist - Hintergrund unter sk98lin, skge und sky2.
Schnittstellenoptionen wie MTU, Ringpuffer oder Flusskontrolle gehören in die Konfiguration des Netzwerkdienstes - bei NetworkManager in die Verbindungsprofile, bei systemd-networkd in die .network-Datei, bei Netplan in die YAML-Datei. Ein ethtool-Aufruf in der Shell ist nur zum Testen gedacht.
Schritt 5: Gegenprüfen
ip link # Schnittstelle vorhanden und UP?
ethtool enp3s0 # ausgehandelte Geschwindigkeit und Duplex
ip -br addr # hat die Schnittstelle eine Adresse?
Steht die Geschwindigkeit auf 100 Mbit/s, obwohl Gigabit erwartet wird, liegt es fast immer am Kabel oder an einer defekten Ader - siehe Kabelvergleich. Bleibt die Schnittstelle ohne Adresse, ist die Ursache weiter oben im Netz zu suchen, nicht im Treiber.
Kernel-Updates ohne Überraschungen
Module, die im Kernel liegen, werden bei jedem Update mitgebaut. Extern übersetzte Module nicht - die brauchen DKMS oder einen manuellen Neubau und brechen früher oder später an einer geänderten Schnittstelle ab. Wer die Wahl hat, nimmt deshalb das In-Kernel-Modul, auch wenn der Hersteller ein eigenes Paket anbietet. Diese Regel steht nicht ohne Grund am Anfang des Treiber-Bereichs.
Wenn die Hardware selbst am Ende ist, hilft kein Modul mehr weiter: Dann geht es zur Kartenauswahl.
Häufige Fragen
Wo lege ich Modulparameter dauerhaft ab?
In einer eigenen Datei unter /etc/modprobe.d/, zum Beispiel /etc/modprobe.d/netzwerk.conf mit einer Zeile options <modul> <parameter>=<wert>. Danach initramfs neu bauen, wenn das Modul beim Systemstart gebraucht wird.
Wie verhindere ich, dass ein falsches Modul geladen wird?
Mit einer blacklist-Zeile in /etc/modprobe.d/. Das ist nötig, wenn zwei Module dieselbe Hardware beanspruchen, etwa ein extern gebauter Herstellertreiber neben dem Kernel-Modul.
Brauche ich eine Firmware-Datei?
Manche Chips laden beim Start Firmware nach. Fehlt sie, meldet dmesg eine fehlende Datei mit Namen. In dem Fall das Firmware-Paket der Distribution installieren, meist linux-firmware.