Linux: Wie finde ich den für ein Gerät verwendeten Gerätetreiber?

Linux: Wie finde ich den für ein Gerät verwendeten Gerätetreiber?

Wenn an mein Ziel ein Gerät angeschlossen ist und viele Treiber für dieses Gerät geladen sind, wie kann ich erkennen, welches Gerät welchen Treiber verwendet?

Antwort1

Benutz einfach /sys.

Beispiel. Ich möchte den Treiber für meine Ethernet-Karte finden:

$ sudo lspci
...
02:00.0 Ethernet controller: Realtek Semiconductor Co., Ltd. RTL8111/8168B PCI Express Gigabit Ethernet controller (rev 01)
$ find /sys | grep drivers.*02:00
/sys/bus/pci/drivers/r8169/0000:02:00.0

Das ist r8169.

Zuerst muss ich die Koordinaten des Geräts finden lspci; dann finde ich den Treiber, der für die Geräte mit diesen Koordinaten verwendet wird.

Antwort2

Hier ist einkleines Skript, das ich geschrieben habe:

#!/bin/bash
for f in /sys/class/net/*; do
    dev=$(basename $f)
    driver=$(readlink $f/device/driver/module)
    if [ $driver ]; then
        driver=$(basename $driver)
    fi
    addr=$(cat $f/address)
    operstate=$(cat $f/operstate)
    printf "%10s [%s]: %10s (%s)\n" "$dev" "$addr" "$driver" "$operstate"
done

Beispielausgabe:

$ ~/what_eth_drivers.sh 
      eth0 [52:54:00:aa:bb:cc]: virtio_net (up)
      eth1 [52:54:00:dd:ee:ff]: virtio_net (up)
      eth2 [52:54:00:99:88:77]: virtio_net (up)
        lo [00:00:00:00:00:00]:            (unknown)

Antwort3

sudo lspci -vwerde es zeigen. So:

$ sudo lspci -v
00:01.0 VGA compatible controller: Advanced Micro  Devices, Inc......
...
Kernel driver in use: radeon
Kernel modules: radeon

Sie können es auch wie grepfolgt kombinieren:

$ sudo lspci -v | grep -A 20 VGA

Antwort4

Bei USB-basierten Geräten können Sie den Treibernamen mit dem folgenden lsusbBefehl anzeigen:

lsusb -t

Und/oder Sie verwenden lshwes, das die Geräte auf allen Bussen auflistet, einschließlich USB, PCI usw., sodass Sie sehen können, welcher Treiber verwendet wird:

sudo lshw

verwandte Informationen