Hangi modüllerin bir usb cihazla ilişkilendirildiğini öğrenin?


34

Bir USB aygıtı için hangi sürücünün kullanıldığını bulmanın bir yolunu önerebilir misiniz? Bir usb lspci -kkomut emri sıralaması.

Yanıtlar:


56

Çekirdek Sürücüsünü Bulma

Kurban cihaz

$ 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

APC UPS için hangi sürücünün kullanıldığını bulmaya çalışacağız. Bu sorunun iki cevabı olduğuna dikkat edin: Çekirdeğin kullanacağı sürücü ve şu anda kullanımda olan sürücü. Kullanıcı alanı çekirdeğe farklı bir sürücü kullanma talimatı verebilir (ve APC UPS'imde nutvardır).

Yöntem 1: usbutils kullanma (kolay)

usbutils(Debian, en azından ilgili) paketi adı verilen bir komut içerir usb-devices. Çalıştırırsanız, hangi sürücünün kullanıldığı da dahil olmak üzere sistemdeki cihazlar hakkında bilgi verir.

$ 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
⋮

Bunun varsayılan sürücüyü değil geçerli sürücüyü listelediğini unutmayın. Varsayılanı bulmanın bir yolu yok.

Yöntem 2: Hata ayıklayıcıları kullanma (kök gerektirir)

Eğer debugfs monte varsa, çekirdek aynı biçimde bir dosya tutacak usb-devicesdışarı baskılar /sys/kernel/debug/usb/devices; lessvb. ile görüntüleyebilirsiniz . Debugfs arayüzlerinin sabit olmadığına dikkat edin, bu nedenle farklı çekirdek sürümleri farklı bir formatta yazdırabilir veya dosyayı tamamen özlüyor olabilir.

Bir kez daha, bu yalnızca geçerli sürücüyü gösterir, varsayılanı değil.

Yöntem 3: Yalnızca doğrudan okuma / sys için temel programları kullanma (komut dosyası oluşturma veya kurtarma için en iyisi)

Bilgiyi dışarı çıkarabilir /sys, daha acı verici olduğunu düşünebilirsiniz lspci. Bu /sysarayüzler oldukça kararlı olmalıdır, eğer bir kabuk betiği yazıyorsanız, muhtemelen bu şekilde yapmak istediğiniz şeydir.

Başlangıçta, lsusb1'den /sys0'a kadar olan cihazları sayar gibi görünüyor. Yani 10-2, APC'yi nerede bulacağınıza dair iyi bir tahmin. UPS lsusb, veri yolu 10, cihaz 3 olarak veriyor. cihaz numaraları olmasa bile. devnumEğer böyle bir şey yapmak, böylece dosyanın içeriğini lsusb tarafından verilen cihaz numarasını eşleşir:

$ 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

Yani, bu durumda, kesinlikle 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

catBir kaç dosya yazarak bunun doğru aygıt olduğundan emin olabiliriz :

$ 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'a bakarsanız ( :1"yapılandırma" dır, .0arabirim - tek bir USB aygıtı birden çok şey yapabilir ve birden çok sürücüye sahip olabilir; lsusb -vbunları gösterecektir), bir modalias dosyası ve bir sürücü işaret bağlantısı vardır:

$ cat 10-2\:1.0/modalias 
usb:v051Dp0002d0106dc00dsc00dp00ic03isc00ip00in00
$ readlink driver
../../../../../../bus/usb/drivers/usbfs

Yani, mevcut sürücü usbfs. modinfoModalias hakkında sorarak varsayılan sürücüyü bulabilirsiniz :

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

Bu nedenle, APC UPS varsayılan olarak hidgerçekten varsayılan olan sürücüye varsayılandır . Ve bu yana doğrudur onun anda kullanmakta usbfs, nut'ın usbhid-upsonu izlemektedir.

Kullanıcı alanı (usbfs) sürücüleri ne durumda?

Sürücü olduğunda usbfs, temel olarak bir kullanıcı alanı (çekirdek olmayan) programın sürücü olarak çalıştığı anlamına gelir. Hangi programın bulunacağının bulunması kök gerektirir (program kullanıcı olarak çalışmazsa) ve oldukça kolaydır: hangi programın cihaz dosyası açıksa.

"Kurban" cihazımızın otobüs 10, cihaz 3 olduğunu biliyoruz. Böylece cihaz dosyası /dev/bus/usb/010/003(en azından modern bir Debian'da) ve lsofcevap veriyor :

# 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

Ve gerçekten de, usbhid-upsbeklendiği gibi (lsof, mizanpajı sığdırmak için komut adını keser, eğer tam isme ihtiyacınız varsa, ps 4951onu almak için kullanabilirsiniz , ya da muhtemelen bazı lsof çıktı formatlama seçenekleri için kullanabilirsiniz).


Bu arada, Windows vs Linux arkadaşım ile tartışmamda kesinlikle kaybolacağım :). Daha basit bir çözüm olup olmadığını görmek için birkaç gün verecek. Çaba için teşekkürler.
TheMeaningfulEngineer

@Alan Tamam, iki yol daha buldum, bunlardan biri oldukça basit. Ayrıca, "hangi sürücüye" iki olası cevabın hangisi olduğunu açıkladım. Her yöntem sağlar.
derobert

Cihazı yerleştirme ile ilgili iddianın /sys/bus/usb/devicesdoğru olduğunu sanmıyorum . Veriyolu 1’de usb-devicescihaz 12 olduğunu belirten bir cihaz var, ancak /sys/bus/usb/devices/1-11sistemimde yok.
Cerin

@Cerin gerçekten öyle değil. Ben daha iyisini koyacağım. Teşekkür ederim.
derobert

13

lsusbkendisi size iyi sonuçlar verebilir. Kompakt çıktı ben kullanım için lsusb -t, nerede -tgösterileri bir ağaç gibi cihazlar; Bu format sürücüyü de raporlar.

Örnek çıktı:

 $ 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
...

Sürücü kullanılmazsa, satır şöyle görünecektir (örneğime göre olan aygıt sürücüyü çekirdekten çıkardığım bir kameradır):

    |__ Port 6: Dev 4, If 1, Class=Video, Driver=, 480M

0

Derobert'in yazdıkları yanında kendimi kullanırken buluyorum

lsusb -t

Yararlı bir «Sürücü» bölümü de dahil olmak üzere bağlı cihazlar hakkında çeşitli bilgiler içeren bir ağaç yazdıracak.

ve

dmesg | grep driver

en son takılan cihazların sürücülerini listeleyecektir.

Artıları, bu iki komutun tüm dağıtımlarla birlikte gelmesidir.


0

Biri lshwUSB, PCI vb. Tüm veri yollarında aygıtları numaralandıracak olanı da kullanabilir , böylece hangi sürücüyü kullandığını ve ilgili kimliklerini görebilirsiniz:

sudo lshw
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.