लिनक्स: डिवाइस के लिए उपयोग किए जाने वाले डिवाइस ड्राइवर को कैसे ढूंढें?


59

यदि मेरे लक्ष्य में एक डिवाइस कनेक्टेड है और उस डिवाइस के लिए कई ड्राइवर लोड किए गए हैं, तो मैं कैसे समझ सकता हूं कि कौन सा डिवाइस किस ड्राइवर का उपयोग कर रहा है?

जवाबों:


46

बस उपयोग करें /sys

उदाहरण। मैं अपने ईथरनेट कार्ड के लिए ड्राइवर ढूंढना चाहता हूं:

$ 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

यही कारण है r8169

पहले मुझे डिवाइस का उपयोग करके निर्देशांक खोजने की आवश्यकता है lspci; तब मुझे ड्राइवर मिलता है जो इन निर्देशांक वाले उपकरणों के लिए उपयोग किया जाता है।


35
lspci -vखुद से करता है।
4

7
lspci -nkआपको संलग्न ड्राइवर दिखाएंगे। सामान्य तौर पर खोज के लिए sysfs सही जगह है।
--ंद्री

@AndyShevchenko धन्यवाद! यह मेरे लिए एक महान समय होगा :-D
पेपोलुआन

1
मुझे पता है कि ओपी ने "ड्राइवरों का उपयोग किया जा रहा है" के लिए कहा है, लेकिन क्या होगा अगर ड्राइवर स्थापित नहीं है और न ही उपयोग किया जा रहा है? कैसे पता करें vendorID:productID? इसके अलावा, क्या होगा अगर यह पीसीआई उपकरण नहीं है, और आप इसे केवल lsusbउदाहरण के लिए देखते हैं ?
डॉ। बीको

1
@DrBeco: लेकिन अगर ड्राइवर स्थापित नहीं है, तो आप क्या खोजना चाहते हैं? आपको इस मामले में सिर्फ गूगल करना चाहिए
इगोर चुबिन

24

यहाँ एक छोटी स्क्रिप्ट लिखी गई है :

#!/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

नमूना उत्पादन:

$ ~/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)

1
मैं बहुत खोजने / grepping के लिंक पढ़ना पसंद करता हूं। अच्छा समाधान है।
क्रिस मेंडेज़

धन्यवाद! मार्ग अविश्वसनीय की तुलना में बेहतर 'dmesg | ग्रेप' (अंगूठी बफर ...)
डोमिनिक आर

मैं समाधान खोजना चाहूंगा जो vethअन्य आभासी चालकों को भी मिलेगा । IMHO एकमात्र समाधान का उपयोग ethtoolया है lshw
पाविक

8

sudo lspci -vइसे दिखाएगा। इस तरह:

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

आप इसे grepइस तरह से भी जोड़ सकते हैं :

$ sudo lspci -v | grep -A 20 VGA

4

यदि आप स्पष्ट रूप से sysfs का उपयोग करना चाहते हैं और इन सभी आदेशों से निपटना नहीं चाहते हैं, जो अंततः sysfs वैसे भी अंदर दिखता है, तो यहाँ बताया गया है:

कहते हैं, eth6 के लिए मॉड्यूल / ड्राइवर क्या है? "sfc" यह है

# 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

या अभी तक बेहतर है .. पढ़ने के लिए आप के लिए पथ को हल करने दें।

# readlink -f /sys/class/net/eth6/device/driver
/sys/bus/pci/drivers/sfc 

इसलिए ... यह जानने के लिए कि आपके सभी नेटवर्क इंटरफेस के लिए ड्राइवर क्या हैं:

# 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

यह एक जोनाथन रेनहार्ट की पोस्ट से बेहतर कैसे है? unix.stackexchange.com/a/225496/47663
nhed

1
शायद एक ही ... लेकिन मुझे एक लाइनर से प्यार है ... मैं आसानी से कमांड लाइन पर चीजों को ठीक से समायोजित कर सकता हूं ... बस उन लोगों के लिए जिनके पास फ़ाइल खोलने और स्क्रिप्ट लिखने का समय नहीं है।
मोंटी मोंटमायोर

3

आप lsmodलिनक्स कर्नेल में लोड किए गए मॉड्यूल / डिवाइस ड्राइवरों की स्थिति प्राप्त करने के लिए कमांड का उपयोग कर सकते हैं ।

एक विशिष्ट उपकरण के लिए, आप dmesg |grep <device-name>विवरण प्राप्त करने के लिए भी उपयोग कर सकते हैं ।


1
धन्यवाद। लेकिन अगर मैं एक ही प्रमुख नहीं और अलग-अलग नाबालिग के साथ एक डिवाइस के लिए दो ड्राइवरों को लोड करता हूं, और यदि डिवाइस के लिए केवल एक ड्राइवर का उपयोग किया जा रहा है, तो मुझे कैसे पता चलेगा कि उस डिवाइस के लिए किस ड्राइवर का उपयोग किया गया है?

शायद यह SO प्रश्न आगे आपकी मदद कर सकता है।

यदि आपका सिस्टम इतने लंबे समय से ऑनलाइन नहीं है, तो रिंग बफर फिर से शुरू हो गया है, निश्चित रूप से dmesg | grep <device-name> काम करेगा; हालाँकि, यह मेरे किसी भी राउटर पर काम नहीं करता है।
बजे

3

USB आधारित उपकरणों के लिए आप lsusbकमांड का उपयोग करके ड्राइवर का नाम देख सकते हैं :

lsusb -t

और / या आप उपयोग करते हैं lshwजो USB, PCI, आदि सहित सभी बसों पर उपकरणों को शामिल करता है, ताकि आप देख सकें कि यह किस चालक का उपयोग करता है:

sudo lshw
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.