Bir USB aygıtı için hangi sürücünün kullanıldığını bulmanın bir yolunu önerebilir misiniz? Bir usb lspci -k
komut emri sıralaması.
Bir USB aygıtı için hangi sürücünün kullanıldığını bulmanın bir yolunu önerebilir misiniz? Bir usb lspci -k
komut emri sıralaması.
Yanıtlar:
$ 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 nut
vardır).
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.
Eğer debugfs monte varsa, çekirdek aynı biçimde bir dosya tutacak usb-devices
dışarı baskılar /sys/kernel/debug/usb/devices
; less
vb. 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.
Bilgiyi dışarı çıkarabilir /sys
, daha acı verici olduğunu düşünebilirsiniz lspci
. Bu /sys
arayü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, lsusb
1'den /sys
0'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. devnum
Eğ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
cat
Bir 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, .0
arabirim - tek bir USB aygıtı birden çok şey yapabilir ve birden çok sürücüye sahip olabilir; lsusb -v
bunları 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
. modinfo
Modalias 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 hid
gerçekten varsayılan olan sürücüye varsayılandır . Ve bu yana doğrudur onun anda kullanmakta usbfs, nut
'ın usbhid-ups
onu izlemektedir.
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 lsof
cevap 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-ups
beklendiği gibi (lsof, mizanpajı sığdırmak için komut adını keser, eğer tam isme ihtiyacınız varsa, ps 4951
onu almak için kullanabilirsiniz , ya da muhtemelen bazı lsof çıktı formatlama seçenekleri için kullanabilirsiniz).
/sys/bus/usb/devices
doğru olduğunu sanmıyorum . Veriyolu 1’de usb-devices
cihaz 12 olduğunu belirten bir cihaz var, ancak /sys/bus/usb/devices/1-11
sistemimde yok.
lsusb
kendisi size iyi sonuçlar verebilir. Kompakt çıktı ben kullanım için lsusb -t
, nerede -t
gö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
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.