লিনাক্স: ডিভাইসটির জন্য ব্যবহৃত ডিভাইস ড্রাইভারকে কীভাবে খুঁজে পাবেন?


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এটি নিজেই করে
পোয়েজ

7
lspci -nkআপনাকে সংযুক্ত ড্রাইভারগুলি প্রদর্শন করবে। সাধারণভাবে সিসফগুলি অনুসন্ধানের সঠিক জায়গা।
এন্ড্রি

অ্যান্ডি শেভচেঙ্কো আপনাকে ধন্যবাদ! এটি আমার জন্য একটি দুর্দান্ত
টাইমসভার হবে :

1
আমি জানি ওপি "ড্রাইভার ব্যবহার করা হচ্ছে" জিজ্ঞাসা করেছে, তবে ড্রাইভার ইনস্টল না করা থাকলে বা ব্যবহৃত না হলে কী হবে? কীভাবে সন্ধান করবেন vendorID:productID? এছাড়াও, যদি এটি পিসিআই ডিভাইস না হয় এবং আপনি কেবল lsusbউদাহরণস্বরূপ এটি দেখতে পান ?
ডাঃ বেকো

1
@ ড্রিবেকো: তবে ড্রাইভার ইনস্টল না করা থাকলে আপনি কী খুঁজে পেতে চান? আপনার কেবল এই ক্ষেত্রে গুগল করা উচিত
ইগোর চুবিন

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
আমি অনেকগুলি খুঁজে পেতে / গ্রেপিংয়ের লিঙ্কগুলি পড়তে পছন্দ করি। সুন্দর সমাধান।
ক্রিস মেন্ডেজ

ধন্যবাদ! অবিশ্বাস্য 'dmesg | গ্রেপ' (রিং বাফার ...) এর চেয়ে ভাল উপায়
ডোমিনিক আর

আমি এমন সমাধান খুঁজে পেতে চাই যা vethএটির সাথে এবং অন্যান্য ভার্চুয়াল ড্রাইভারগুলিও খুঁজে পেতে পারে । আইএমএইচওর একমাত্র সমাধান হ'ল ব্যবহার করা 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 এর অভ্যন্তরে দেখায় সেগুলি ব্যবহার করতে চান না, এখানে কীভাবে:

বলুন, এথ 6 এর জন্য মডিউল / ড্রাইভার কী? "এসএফসি" এটি

# 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
ধন্যবাদ। তবে যদি আমি একই মেজর নম্বর এবং ভিন্ন ভিন্ন নাবালক নম্বরযুক্ত একটি ডিভাইসের জন্য দুটি ড্রাইভার লোড করে রেখেছি এবং যদি কেবল একটি ড্রাইভারই ডিভাইসের জন্য ব্যবহার করা হয় তবে আমি কীভাবে আবিষ্কার করব যে সেই ডিভাইসের জন্য কোন ড্রাইভার ব্যবহৃত হচ্ছে?

সম্ভবত এই এত প্রশ্ন আপনাকে আরও সাহায্য করতে পারে।

যদি আপনার সিস্টেমটি এত দিন অনলাইনে না থেকে থাকে যে রিং বাফারটি আবার শুরু হয়েছে, নিশ্চিত dmesg | গ্রেপ <ডিভাইস- নাম> কাজ করবে; তবে এটি আমার কোনও রাউটারে কাজ করে না।
সিজে্যাক

3

ইউএসবি ভিত্তিক ডিভাইসের জন্য আপনি lsusbকমান্ডটি ব্যবহার করে ড্রাইভারের নাম দেখতে পাবেন :

lsusb -t

এবং / অথবা আপনি ব্যবহার করেন lshwযা ইউএসবি, পিসিআই ইত্যাদি সহ সমস্ত বাসের ডিভাইসগুলিকে অঙ্কিত করে যাতে আপনি এটি দেখতে পারেন যে এটি কোন ড্রাইভার ব্যবহার করে:

sudo lshw
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.