क्या आप यह पता लगाने का कोई तरीका सुझा सकते हैं कि USB डिवाइस के लिए किस ड्राइवर का उपयोग किया जा रहा है। एक usb lspci -k
कमांड के समतुल्य ।
क्या आप यह पता लगाने का कोई तरीका सुझा सकते हैं कि USB डिवाइस के लिए किस ड्राइवर का उपयोग किया जा रहा है। एक usb lspci -k
कमांड के समतुल्य ।
जवाबों:
$ lsusb
Bus 010 Device 002: ID 046d:c01e Logitech, Inc. MX518 Optical Mouse
Bus 010 Device 003: ID 051d:0002 American Power Conversion Uninterruptible Power Supply
हम यह पता लगाने की कोशिश करने जा रहे हैं कि एपीसी यूपीएस के लिए ड्राइवर का क्या उपयोग किया जाता है। ध्यान दें कि इस प्रश्न के दो उत्तर हैं: चालक जो कर्नेल का उपयोग करेगा, और वह ड्राइवर जो वर्तमान में उपयोग में है। यूजरस्पेस कर्नेल को एक अलग ड्राइवर (और मेरे एपीसी यूपीएस के मामले nut
में) का उपयोग करने का निर्देश दे सकता है ।
usbutils
पैकेज (डेबियन, कम से कम पर) एक स्क्रिप्ट कहा जाता है शामिल हैं usb-devices
। यदि आप इसे चलाते हैं, तो यह सिस्टम पर मौजूद उपकरणों के बारे में जानकारी को आउटपुट करता है, जिसमें ड्राइवर का उपयोग किया जाता है:
$ usb-devices
⋮
T: Bus=10 Lev=01 Prnt=01 Port=01 Cnt=02 Dev#= 3 Spd=1.5 MxCh= 0
D: Ver= 1.10 Cls=00(>ifc ) Sub=00 Prot=00 MxPS= 8 #Cfgs= 1
P: Vendor=051d ProdID=0002 Rev=01.06
S: Manufacturer=American Power Conversion
S: Product=Back-UPS RS 1500 FW:8.g9 .D USB FW:g9
S: SerialNumber=XXXXXXXXXXXX
C: #Ifs= 1 Cfg#= 1 Atr=a0 MxPwr=24mA
I: If#= 0 Alt= 0 #EPs= 1 Cls=03(HID ) Sub=00 Prot=00 Driver=usbfs
⋮
ध्यान दें कि यह वर्तमान ड्राइवर को सूचीबद्ध करता है, डिफ़ॉल्ट को नहीं। डिफ़ॉल्ट खोजने का कोई तरीका नहीं है।
यदि आपके पास डिबगफ़्यू माउंटेड है, तो कर्नेल एक फ़ाइल को उसी प्रारूप में रखता है जिस usb-devices
पर प्रिंट होता है /sys/kernel/debug/usb/devices
; आप के साथ देख सकते हैं less
, आदि ध्यान दें कि डीबगफ इंटरफेस स्थिर नहीं हैं, इसलिए अलग-अलग कर्नेल संस्करण एक अलग प्रारूप में प्रिंट हो सकते हैं, या फ़ाइल को पूरी तरह से गायब कर सकते हैं।
एक बार फिर, यह केवल वर्तमान ड्राइवर दिखाता है, डिफ़ॉल्ट नहीं।
आप इस जानकारी को प्राप्त कर सकते हैं /sys
, इसकी तुलना में अधिक दर्दनाक है lspci
। ये /sys
इंटरफेस यथोचित रूप से स्थिर होना चाहिए, इसलिए यदि आप एक शेल स्क्रिप्ट लिख रहे हैं, तो संभवतः यह है कि आप इसे कैसे करना चाहते हैं।
प्रारंभ में, lsusb
1 से उपकरणों को गिनने लगता है, /sys
इसलिए 0. 10-2 एक अच्छा अनुमान है जहां एपीसी यूपीएस खोजने के लिए बस 10 के रूप में देता है lsusb, डिवाइस 3. दुर्भाग्य से, समय के साथ-साथ मैपिंग टूट जाती है- sysfs फिर से संख्याओं का उपयोग करता है यहां तक कि जब डिवाइस नंबर नहीं हैं। devnum
फ़ाइल की सामग्री, lsusb द्वारा दिए गए डिवाइस संख्या से मेल ताकि आप कुछ इस तरह कर सकते हैं होगा:
$ grep -l '^3$' /sys/bus/usb/devices/10-*/devnum # the ^ and $ to prevent also matching 13, 31, etc.
/sys/bus/usb/devices/10-2/devnum
तो, इस मामले में, यह निश्चित रूप से है 10-2
।
$ cd /sys/bus/usb/devices/10-2
$ ls
10-2:1.0 bDeviceClass bMaxPower descriptors ep_00 maxchild remove urbnum
authorized bDeviceProtocol bNumConfigurations dev idProduct power serial version
avoid_reset_quirk bDeviceSubClass bNumInterfaces devnum idVendor product speed
bcdDevice bmAttributes busnum devpath ltm_capable quirks subsystem
bConfigurationValue bMaxPacketSize0 configuration driver manufacturer removable uevent
हम यह सुनिश्चित कर सकते हैं कि यह cat
कुछ फाइलों में से एक सही डिवाइस है :
$ cat idVendor idProduct manufacturer product
051d
0002
American Power Conversion
Back-UPS RS 1500 FW:8.g9 .D USB FW:g9
यदि आप 10-2: 1.0 में देखते हैं ( :1
"कॉन्फ़िगरेशन" है, .0
तो इंटरफ़ेस-एक एकल USB डिवाइस कई काम कर सकता है, और कई ड्राइवर कर सकता है; lsusb -v
इनको दिखाएगा), एक मोडलैस फ़ाइल और एक ड्राइवर सिमलिंक है:
$ cat 10-2\:1.0/modalias
usb:v051Dp0002d0106dc00dsc00dp00ic03isc00ip00in00
$ readlink driver
../../../../../../bus/usb/drivers/usbfs
तो, वर्तमान चालक है usbfs
। आप modinfo
modalias के बारे में पूछकर डिफ़ॉल्ट ड्राइवर पा सकते हैं :
$ /sbin/modinfo `cat 10-2\:1.0/modalias`
filename: /lib/modules/3.6-trunk-amd64/kernel/drivers/hid/usbhid/usbhid.ko
license: GPL
description: USB HID core driver
author: Jiri Kosina
author: Vojtech Pavlik
author: Andreas Gal
alias: usb:v*p*d*dc*dsc*dp*ic03isc*ip*in*
depends: hid,usbcore
intree: Y
vermagic: 3.6-trunk-amd64 SMP mod_unload modversions
parm: mousepoll:Polling interval of mice (uint)
parm: ignoreled:Autosuspend with active leds (uint)
parm: quirks:Add/modify USB HID quirks by specifying quirks=vendorID:productID:quirks where vendorID, productID, and quirks are all in 0x-prefixed hex (array of charp)
तो, APC UPS hid
ड्राइवर को डिफॉल्ट करता है, जो वास्तव में सही है। और इसके वर्तमान में उपयोग कर usbfs है, जो बाद में सही है nut
की usbhid-ups
यह निगरानी कर रहा है।
जब ड्राइवर होता है usbfs
, तो मूल रूप से इसका मतलब है कि एक यूजरस्पेस (नॉन-कर्नेल) प्रोग्राम ड्राइवर के रूप में काम कर रहा है। यह पता लगाना कि किस प्रोग्राम के लिए रूट की आवश्यकता है (जब तक कि प्रोग्राम आपके उपयोगकर्ता के रूप में चल रहा है) और काफी आसान है: जो भी प्रोग्राम में डिवाइस फ़ाइल खुली है।
हम जानते हैं कि हमारा "शिकार" डिवाइस बस 10, डिवाइस 3 है। इसलिए डिवाइस फ़ाइल /dev/bus/usb/010/003
कम से कम (एक आधुनिक डेबियन पर) है, और lsof
उत्तर प्रदान करता है:
# lsof /dev/bus/usb/010/003
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
usbhid-up 4951 nut 4u CHR 189,1154 0t0 8332 /dev/bus/usb/010/003
और वास्तव में, इसकी usbhid-ups
अपेक्षा के अनुसार (lsof ने लेआउट को सफल बनाने के लिए कमांड नाम को काट दिया, यदि आपको पूर्ण नाम की आवश्यकता है, तो आप ps 4951
इसे प्राप्त करने के लिए उपयोग कर सकते हैं , या शायद कुछ lsof आउटपुट स्वरूपण विकल्प)।
/sys/bus/usb/devices
सही है। मेरे पास बस 1 पर एक उपकरण है जो usb-devices
कहता है कि डिवाइस 12 है, लेकिन /sys/bus/usb/devices/1-11
मेरे सिस्टम पर कोई नहीं है।
lsusb
स्वयं ही आपको अच्छे परिणाम मिल सकते हैं। कॉम्पैक्ट आउटपुट के लिए मैं उपयोग करता हूं lsusb -t
, जहां -t
उपकरणों को एक पेड़ के रूप में दिखाता है; यह प्रारूप ड्राइवर को भी रिपोर्ट करता है।
उदाहरण आउटपुट:
$ lsusb -t
/: Bus 04.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 5000M
/: Bus 03.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/2p, 480M
/: Bus 02.Port 1: Dev 1, Class=root_hub, Driver=ehci-pci/3p, 480M
|__ Port 1: Dev 2, If 0, Class=Hub, Driver=hub/8p, 480M
...
यदि कोई ड्राइवर का उपयोग नहीं किया जाता है, तो रेखा इस तरह दिखाई देगी (मेरे उदाहरण में डिवाइस एक कैमरा है जिसके लिए मैंने ड्राइवर को कर्नेल से हटा दिया था):
|__ Port 6: Dev 4, If 1, Class=Video, Driver=, 480M
Derobert ने जो लिखा है, इसके अलावा मैं खुद का उपयोग कर पाता हूं
lsusb -t
जो एक सहायक «चालक» भाग सहित जुड़े उपकरणों के बारे में विभिन्न जानकारी के साथ एक पेड़ प्रिंट करेगा।
तथा
dmesg | grep driver
जो आपको नवीनतम प्लग-इन उपकरणों के ड्राइवरों को सूचीबद्ध करेगा।
अभिप्राय यह है कि ये दोनों कमांड सभी डिस्ट्रीब्यूशन के साथ स्थापित होते हैं।