Antworten:
Verwenden Sie 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 mithilfe von finden lspci. dann finde ich treiber, die für die geräte mit diesen koordinaten verwendet werden.
lspci -nkzeigt Ihnen angehängte Treiber. Im Allgemeinen ist das sysfs der richtige Ort zum Suchen.
vendorID:productID? Was ist auch, wenn es sich nicht um ein PCI-Gerät handelt und Sie es nur lsusbzum Beispiel sehen?
Hier ist ein kleines 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)
vethund andere virtuelle Treiber finden würde . IMHO ist die einzige Lösung zu verwenden ethtooloder lshw.
Wenn Sie einfach sysfs verwenden und nicht mit all diesen Befehlen umgehen möchten, die irgendwann in sysfs auftauchen, gehen Sie wie folgt vor:
Was ist das Modul / der Treiber für eth6? "sfc" ist es
# ls -l /sys/class/net/eth6/device/driver
lrwxrwxrwx 1 root root 0 Jan 22 12:30 /sys/class/net/eth6/device/driver ->
../../../../bus/pci/drivers/sfc
oder noch besser ... lass readlink den Pfad für dich auflösen.
# readlink -f /sys/class/net/eth6/device/driver
/sys/bus/pci/drivers/sfc
Um herauszufinden, welche Treiber für all Ihre Netzwerkschnittstellen erforderlich sind, gehen Sie wie folgt vor:
# ls -1 /sys/class/net/ | grep -v lo | xargs -n1 -I{} bash -c 'echo -n {} :" " ; basename `readlink -f /sys/class/net/{}/device/driver`'
eth0 : tg3
eth1 : tg3
eth10 : mlx4_core
eth11 : mlx4_core
eth2 : tg3
eth3 : tg3
eth4 : mlx4_core
eth5 : mlx4_core
eth6 : sfc
eth7 : sfc
eth8 : sfc
eth9 : sfc
Mit dem lsmodBefehl können Sie den Status geladener Module / Gerätetreiber im Linux-Kernel abrufen.
Für ein bestimmtes Gerät können Sie auch dmesg |grep <device-name>die Details abrufen.
lspci -vmacht es von selbst.