Linux'ta verilenler:
- Bir cihaz, örneğin
/dev/sda, - ve örneğin büyük ve küçük sayıları
8, 0,
Hangi modülün / sürücünün "sürdüğünü" nasıl bilebilirim?
Ben içine kazmak Can /sysya /prockeşfetmek için?
Linux'ta verilenler:
/dev/sda,8, 0,Hangi modülün / sürücünün "sürdüğünü" nasıl bilebilirim?
Ben içine kazmak Can /sysya /prockeşfetmek için?
Yanıtlar:
Bu bilgiyi sysfsbir cihaz dosyasından almak için, önce ls -lörneğin / çıktısına bakarak büyük / küçük sayıları belirleyin.
$ ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Apr 17 12:26 /dev/sda
8, 0Büyük numara olduğunu söyler 8ve minör olduğunu 0. bListenin başında da bir blok aygıtı olduğunu söyler. Diğer cihazların cbaşında bir for karakter cihazı bulunabilir.
Daha sonra altına bakarsanız /sys/dev, iki dizin olduğunu göreceksiniz. Biri, blockdiğeri aradı char. Buradaki dikkatsiz olan, bunların sırasıyla blok ve karakter aygıtları için olmasıdır. Daha sonra her cihaza erişilebilir ana / küçük sayıları bu dizindir. Aygıt için uygun bir sürücü varsa driver, bu ya da devicealt dizindeki bağlantının hedefini okuyarak bulunabilir . Örneğin, benim için /dev/sdabasitçe yapabilirim:
$ readlink /sys/dev/block/8\:0/device/driver
../../../../../../../bus/scsi/drivers/sd
Bu, sdsürücünün aygıt için kullanıldığını gösterir . Cihazın bir blok veya karakter bir cihaz olup olmadığından emin değilseniz, kabuğun içinde bu parçayı a ile değiştirebilirsiniz *. Bu da aynı şekilde çalışır:
$ readlink /sys/dev/*/8\:0/device/driver
../../../../../../../bus/scsi/drivers/sd
Blok cihazlarına ya /sys/blockda aracılığıyla isimleri yoluyla doğrudan erişilebilir /sys/class/block. Örneğin:
$ readlink /sys/block/sda/device/driver
../../../../../../../bus/scsi/drivers/sd
İçindeki çeşitli dizinlerin varlığının /sys, çekirdek yapılandırmasına bağlı olarak değişebileceğini unutmayın. Ayrıca tüm cihazların bir devicealt klasörü yoktur. Örneğin, bu gibi bölüm aygıt dosyaları için durum böyledir /dev/sda1. Burada tüm diskin cihaza erişmek zorundasınız (maalesef bunun için bir sysbağlantı yok ).
Yapılması yararlı olabilecek son şey, mevcut oldukları tüm aygıtların sürücülerini listelemektir. Bunun için sürücü bağlantılarının bulunduğu tüm dizinleri seçmek için globları kullanabilirsiniz. Örneğin:
$ ls -l /sys/dev/*/*/device/driver ls -l /sys/dev/*/*/driver
ls: cannot access ls: No such file or directory
lrwxrwxrwx 1 root root 0 Apr 17 12:27 /sys/dev/block/11:0/device/driver -> ../../../../../../../bus/scsi/drivers/sr
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/block/8:0/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/block/8:16/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/block/8:32/device/driver -> ../../../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:0/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:1024/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:128/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:256/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:384/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:512/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:513/driver -> ../../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:514/driver -> ../../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:640/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/189:643/driver -> ../../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:768/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 20:38 /sys/dev/char/189:896/driver -> ../../../../bus/usb/drivers/usb
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/21:0/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/21:1/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:27 /sys/dev/char/21:2/device/driver -> ../../../../../../../bus/scsi/drivers/sr
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/21:3/device/driver -> ../../../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/250:0/device/driver -> ../../../../../../../bus/hid/drivers/hid-generic
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/250:1/device/driver -> ../../../../../../../bus/hid/drivers/hid-generic
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/250:2/device/driver -> ../../../../../../../bus/hid/drivers/hid-generic
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/252:0/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/252:1/device/driver -> ../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 12:27 /sys/dev/char/252:2/device/driver -> ../../../../../../../bus/scsi/drivers/sr
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/252:3/device/driver -> ../../../../../../../../../bus/scsi/drivers/sd
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/254:0/device/driver -> ../../../bus/pnp/drivers/rtc_cmos
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/29:0/device/driver -> ../../../bus/platform/drivers/simple-framebuffer
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/4:64/device/driver -> ../../../bus/pnp/drivers/serial
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/4:65/device/driver -> ../../../bus/platform/drivers/serial8250
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/4:66/device/driver -> ../../../bus/platform/drivers/serial8250
lrwxrwxrwx 1 root root 0 Apr 17 19:53 /sys/dev/char/4:67/device/driver -> ../../../bus/platform/drivers/serial8250
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/6:0/device/driver -> ../../../bus/pnp/drivers/parport_pc
lrwxrwxrwx 1 root root 0 Apr 17 12:26 /sys/dev/char/99:0/device/driver -> ../../../bus/pnp/drivers/parport_pc
Son olarak, sorudan biraz sapmak için, /syshangi sürücülerin hangi cihazlar tarafından kullanıldığı konusunda daha geniş bir perspektif elde etmek için başka bir glob numarası ekleyeceğim (zorunlu olarak bir cihaz dosyasına sahip olanlar olmasa da):
find /sys/bus/*/drivers/* -maxdepth 1 -lname '*devices*' -ls
Çıktısına daha yakından bakıldığında udevadm, kanonik /sysdizini bularak (yukarıdaki ana / küçük dizinleri kaldırırsanız elde edeceğiniz gibi), daha sonra bulduğu herhangi bir bilgiyi yazdırarak dizin ağacını bularak çalışıyor gibi görünüyor . Bu şekilde, ana aygıtlar ve kullandıkları sürücüler hakkında bilgi edinebilirsiniz.
Bunu denemek için, dizin ağacında dolaşmak ve ilgili her bir seviyedeki bilgiyi görüntülemek için aşağıdaki betiği yazdım. udevHer seviyede okunabilir dosyaları arayın, adları ve içerikleri dahil edildi ATTRS. Bunu yapmak yerine, ueventdosyaların içeriğini her seviyede görüntülerim (görünüşe göre bunun varlığı sadece bir alt dizinden ziyade farklı bir seviye tanımlar). Ayrıca, bulduğum alt sistem bağlantılarının temel adını ve cihazın bu hiyerarşide nasıl uyduğunu gösteren bir ad gösteririm. udevadmaynı bilgiyi göstermediğinden, bu güzel bir tamamlayıcı araçtır. Ana cihaz bilgisi (örneğin PCIbilgi), diğer araçların çıktısını lshwdaha üst seviye cihazlarla eşleştirmek isterseniz de kullanışlıdır .
#!/bin/bash
dev=$(readlink -m $1)
# test for block/character device
if [ -b "$dev" ]; then
mode=block
elif [ -c "$dev" ]; then
mode=char
else
echo "$dev is not a device file" >&2
exit 1
fi
# stat outputs major/minor in hex, convert to decimal
data=( $(stat -c '%t %T' $dev) ) || exit 2
major=$(( 0x${data[0]} ))
minor=$(( 0x${data[1]} ))
echo -e "Given device: $1"
echo -e "Canonical device: $dev"
echo -e "Major: $major"
echo -e "Minor: $minor\n"
# sometimes nodes have been created for devices that are not present
dir=$(readlink -f /sys/dev/$mode/$major\:$minor)
if ! [ -e "$dir" ]; then
echo "No /sys entry for $dev" >&2
exit 3
fi
# walk up the /sys hierarchy one directory at a time
# stop when there are three levels left
while [[ $dir == /*/*/* ]]; do
# it seems the directory is only of interest if there is a 'uevent' file
if [ -e "$dir/uevent" ]; then
echo "$dir:"
echo " Uevent:"
sed 's/^/ /' "$dir/uevent"
# check for subsystem link
if [ -d "$dir/subsystem" ]; then
subsystem=$(readlink -f "$dir/subsystem")
echo -e "\n Subsystem:\n ${subsystem##*/}"
fi
echo
fi
# strip a subdirectory
dir=${dir%/*}
done
udevadmcevap size verecek sdve ahci. ahciKullanıldığını belirlemenin bir yolu var mı ?
device/device/, bu yüzden readlinkemrim benziyordu readlink /sys/dev/char/XX\:Y/device/device/driver.
Bunu udevadmkeşfetmek için aracı kullanabilirsiniz .
Komut olur udevadm info -a -n /dev/sdave ardından DRIVER==parametrelere bakar .
# udevadm info -a -n /dev/sda | grep -oP 'DRIVERS?=="\K[^"]+'
sd
ahci
Bu gösteriler orada aslında bu cihazı sunan katılan 2 sürücü vardır o sdve ahci. Birincisi sd, /dev/sdacihazdan doğrudan sorumludur , ancak ahcisürücüyü altında kullanır .
udevadmKomutun çıktısı şöyle görünür ve nasıl çalıştığını açıklar.
# udevadm info -a -n /dev/sda
Udevadm info starts with the device specified by the devpath and then
walks up the chain of parent devices. It prints for every device
found, all possible attributes in the udev rules key format.
A rule to match, can be composed by the attributes of the device
and the attributes from one single parent device.
looking at device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0/block/sda':
KERNEL=="sda"
SUBSYSTEM=="block"
DRIVER==""
ATTR{ro}=="0"
ATTR{size}=="500118192"
ATTR{stat}==" 84786 1420 3091333 40215 966488 12528 14804028 2357668 0 1146934 2396653"
ATTR{range}=="16"
ATTR{discard_alignment}=="0"
ATTR{events}==""
ATTR{ext_range}=="256"
ATTR{events_poll_msecs}=="-1"
ATTR{alignment_offset}=="0"
ATTR{inflight}==" 0 0"
ATTR{removable}=="0"
ATTR{capability}=="50"
ATTR{events_async}==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0':
KERNELS=="0:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{rev}=="VZJ4"
ATTRS{type}=="0"
ATTRS{scsi_level}=="6"
ATTRS{model}=="LITEONIT LMT-256"
ATTRS{state}=="running"
ATTRS{queue_type}=="simple"
ATTRS{iodone_cnt}=="0x10daad"
ATTRS{iorequest_cnt}=="0x10ead1"
ATTRS{queue_ramp_up_period}=="120000"
ATTRS{device_busy}=="0"
ATTRS{evt_capacity_change_reported}=="0"
ATTRS{timeout}=="30"
ATTRS{evt_media_change}=="0"
ATTRS{ioerr_cnt}=="0x2"
ATTRS{queue_depth}=="31"
ATTRS{vendor}=="ATA "
ATTRS{evt_soft_threshold_reached}=="0"
ATTRS{device_blocked}=="0"
ATTRS{evt_mode_parameter_change_reported}=="0"
ATTRS{evt_lun_change_reported}=="0"
ATTRS{evt_inquiry_change_reported}=="0"
ATTRS{iocounterbits}=="32"
ATTRS{eh_timeout}=="10"
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0':
KERNELS=="target0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0':
KERNELS=="host0"
SUBSYSTEMS=="scsi"
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1':
KERNELS=="ata1"
SUBSYSTEMS==""
DRIVERS==""
looking at parent device '/devices/pci0000:00/0000:00:1f.2':
KERNELS=="0000:00:1f.2"
SUBSYSTEMS=="pci"
DRIVERS=="ahci"
ATTRS{irq}=="41"
ATTRS{subsystem_vendor}=="0x144d"
ATTRS{broken_parity_status}=="0"
ATTRS{class}=="0x010601"
ATTRS{enabled}=="1"
ATTRS{consistent_dma_mask_bits}=="64"
ATTRS{dma_mask_bits}=="64"
ATTRS{local_cpus}=="0f"
ATTRS{device}=="0x1e03"
ATTRS{msi_bus}==""
ATTRS{local_cpulist}=="0-3"
ATTRS{vendor}=="0x8086"
ATTRS{subsystem_device}=="0xc0d3"
ATTRS{numa_node}=="-1"
ATTRS{d3cold_allowed}=="1"
looking at parent device '/devices/pci0000:00':
KERNELS=="pci0000:00"
SUBSYSTEMS==""
DRIVERS==""
udevadmkaldırılmasını (veya hatta tavsiye edilmesini) nerede görüyorsunuz ? Bu konuda ipucu veren bir şey bile bulamıyorum.
Hwinfo ve output model ile driver komutunu kullanın . Sürücü yoksa, gösterilmez. Örneğin diskler için:
# hwinfo --blok | grep -Ei "sürücü \: | model \:" Model: "Disket" Model: "FUJITSU MHZ2080B" Sürücü: "ahcı", "sd" Model: "Bölüm" Model: "Bölüm" Model: "Bölüm" Model: "Genel Çoklu Kart" Sürücü: "ums-realtek", "sd" Model: "Realtek USB2.0-CRW" Sürücü: "ums-realtek"
Ağ kartları için:
# hwinfo - ağ kartı | grep -Ei "sürücü \: | model \:" Model: "Broadcom NetXtreme BCM5764M Gigabit Ethernet PCIe" Sürücü: "tg3" Model: "Intel Kablosuz WiFi Bağlantısı 5100" Sürücü: "iwlwifi"
USB cihazları için:
# hwinfo - usb | grep -Ei "sürücü \: | model \:" Model: "Linux 3.11.10-7-desktop uhci_hcd UHCI Ana Bilgisayar Denetleyicisi" Sürücü: "hub" Model: "Linux 3.11.10-7-desktop uhci_hcd UHCI Ana Bilgisayar Denetleyicisi" Sürücü: "hub" Model: "IDEACOM IDC 6680" Sürücü: "usbhid" [...]
Başka hangi cihaz tiplerini sorgulayabileceğinizi öğrenmek için hwinfo --help komutunu kullanın. hwinfo, varsayılan olarak örneğin SUSE Linux'ta kuruludur.
--onlyseçenek eklemenin bir yolu vardır . Örn hwinfo --block --only /dev/sda | grep ....
lshwmakinenizde bulunan donanımı listelemek için harika bir araçtır. Çalıştırmadan önce onu yüklemeniz gerekecektir.
$ yum install lshw
$ apt-get install lshw
Kullanmakta olduğunuz sistemi bağlı olarak kullanın yumveya kullanın apt-get. Ardından, depolama donanımını özellikle listelemek için:
# lshw -class storage
*-storage
description: SATA controller
product: 5 Series/3400 Series Chipset 4 port SATA AHCI Controller
vendor: Intel Corporation
physical id: 1f.2
bus info: pci@0000:00:1f.2
version: 06
width: 32 bits
clock: 66MHz
capabilities: storage msi pm ahci_1.0 bus_master cap_list
configuration: driver=ahci latency=0
resources: irq:41 ioport:1830(size=8) ioport:1824(size=4) ioport:1828(size=8) ioport:1820(size=4) ioport:1800(size=32) memory:f0305000-f03057ff
rootTüm bilgileri geri almak için çalıştırmak isteyebilirsiniz .
Aksi takdirde, lspcidonanımınız hakkında da bilgi verebilir:
$ lspci -vv
00:1f.2 SATA controller: Intel Corporation 5 Series/3400 Series Chipset 4 port SATA AHCI Controller (rev 06) (prog-if 01 [AHCI 1.0])
Subsystem: Dell Device 0434
Control: I/O+ Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+
Status: Cap+ 66MHz+ UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx-
Latency: 0
Interrupt: pin B routed to IRQ 41
Region 0: I/O ports at 1830 [size=8]
Region 1: I/O ports at 1824 [size=4]
Region 2: I/O ports at 1828 [size=8]
Region 3: I/O ports at 1820 [size=4]
Region 4: I/O ports at 1800 [size=32]
Region 5: Memory at f0305000 (32-bit, non-prefetchable) [size=2K]
Capabilities: <access denied>
Kernel driver in use: ahci
Bir cihazın büyük ve küçük sayılarını bulmak için, sadece lsüzerinde çalıştırın .
$ ls -l /dev/sda
brw-rw----. 1 root disk 8, 0 13 avril 10:54 /dev/sda
Bu çıkış olarak, biçerisinde brw-rw----., bu blok, cihaz araçlarına olduğu. Rakamlar 8ve 0sırasıyla cihazın büyük ve küçük sayılarıdır.
lshwve lspciyapılandırma: Bir aygıt tarafından kullanılan modülü görebilir sürücü = ahci gecikme = 0 ve kullanımda Çekirdek sürücü: AHCI .
lsmod,/proc/modulesvemodinfo?