लिनक्स पर, दिया गया:
- एक उपकरण, उदाहरण के लिए
/dev/sda, - और इसकी प्रमुख और छोटी संख्या, उदाहरण के लिए
8, 0,
मैं यह कैसे जान सकता हूं कि कौन सा मॉड्यूल / ड्राइवर "ड्राइविंग" कर रहा है?
क्या मुझे खुदाई करनी चाहिए /sysया /procइसकी खोज करनी चाहिए?
लिनक्स पर, दिया गया:
/dev/sda,8, 0,मैं यह कैसे जान सकता हूं कि कौन सा मॉड्यूल / ड्राइवर "ड्राइविंग" कर रहा है?
क्या मुझे खुदाई करनी चाहिए /sysया /procइसकी खोज करनी चाहिए?
जवाबों:
sysfsडिवाइस फ़ाइल के लिए यह जानकारी प्राप्त करने के लिए , पहले ls -l, उदाहरण के लिए आउटपुट को देखकर प्रमुख / मामूली संख्या निर्धारित करें
$ ls -l /dev/sda
brw-rw---- 1 root disk 8, 0 Apr 17 12:26 /dev/sda
8, 0हमें बताता है कि प्रमुख संख्या है 8और मामूली है 0। bसूची के शुरू में भी हमें बताता है कि यह एक ब्लॉक युक्ति है। अन्य उपकरणों cमें शुरुआत में चरित्र उपकरण हो सकता है ।
यदि आप /sys/devनीचे देखते हैं, तो आप देखेंगे कि दो निर्देशिकाएं हैं। एक ने फोन किया blockऔर एक ने फोन किया char। यहां नो-ब्रेनर यह है कि ये क्रमशः ब्लॉक और चरित्र उपकरणों के लिए हैं। प्रत्येक उपकरण तब अपनी प्रमुख / छोटी संख्या द्वारा सुलभ होता है यह निर्देशिका है। यदि डिवाइस के लिए कोई ड्राइवर उपलब्ध है, तो यह driverइस या deviceउप-निर्देशिका में लिंक के लक्ष्य को पढ़कर पाया जा सकता है । जैसे, मेरे लिए /dev/sdaमैं बस कर सकता हूं:
$ readlink /sys/dev/block/8\:0/device/driver
../../../../../../../bus/scsi/drivers/sd
इससे पता चलता है कि sdडिवाइस के लिए ड्राइवर का उपयोग किया जाता है। यदि आप अनिश्चित हैं यदि डिवाइस एक ब्लॉक या कैरेक्टर डिवाइस है, तो शेल में आप बस इस हिस्से को ए से बदल सकते हैं *। यह भी काम करता है:
$ readlink /sys/dev/*/8\:0/device/driver
../../../../../../../bus/scsi/drivers/sd
ब्लॉक डिवाइस को /sys/blockया तो उनके नाम के माध्यम से या तो सीधे एक्सेस किया जा सकता है /sys/class/block। उदाहरण के लिए:
$ readlink /sys/block/sda/device/driver
../../../../../../../bus/scsi/drivers/sd
ध्यान दें कि /sysकर्नेल कॉन्फ़िगरेशन के आधार पर विभिन्न निर्देशिकाओं का अस्तित्व बदल सकता है। इसके अलावा सभी उपकरणों में एक deviceसबफ़ोल्डर नहीं होता है। उदाहरण के लिए, यह विभाजन डिवाइस फ़ाइलों की तरह है /dev/sda1। यहां आपको पूरे डिस्क के लिए डिवाइस का उपयोग करना होगा (दुर्भाग्य से इसके लिए कोई sysलिंक नहीं हैं )।
एक अंतिम चीज जो करना उपयोगी हो सकता है वह यह है कि सभी उपकरणों के लिए ड्राइवरों को सूचीबद्ध करना, जिनके लिए वे उपलब्ध हैं। इसके लिए आप सभी निर्देशिकाओं का चयन करने के लिए ग्लब्स का उपयोग कर सकते हैं जिसमें ड्राइवर लिंक मौजूद हैं। उदाहरण के लिए:
$ 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
अंत में, प्रश्न को थोड़ा सा /sysमोड़ने के लिए, मैं एक और व्यापक ट्रिक जोड़ने के लिए एक बहुत व्यापक परिप्रेक्ष्य प्राप्त करूंगा, जिस पर ड्राइवरों द्वारा किस डिवाइस का उपयोग किया जा रहा है (हालांकि जरूरी नहीं कि वे डिवाइस फ़ाइल के साथ हों):
find /sys/bus/*/drivers/* -maxdepth 1 -lname '*devices*' -ls
के आउटपुट पर अधिक बारीकी से देखते हुए udevadm, यह कैनोनिकल /sysडायरेक्टरी ढूंढकर काम करना प्रतीत होता है (जैसा कि आपको मिलेगा अगर आपने ऊपर दिए गए प्रमुख / लघु निर्देशिकाओं को अवगत कराया है), तो डायरेक्टरी ट्री पर अपने तरीके से काम करना, किसी भी जानकारी को प्रिंट करना जो इसे पाता है। इस तरह से आपको मूल उपकरणों और उनके द्वारा उपयोग किए जाने वाले किसी भी ड्राइवर के बारे में जानकारी मिलती है।
इसके साथ प्रयोग करने के लिए मैंने नीचे दी गई स्क्रिप्ट को लिखा है ताकि डायरेक्टरी ट्री पर चल सकें और प्रत्येक प्रासंगिक स्तर पर जानकारी प्रदर्शित कर सकें। udevप्रत्येक स्तर पर पठनीय फ़ाइलों की तलाश करने लगता है, उनके नाम और सामग्री को इसमें शामिल किया जाता है ATTRS। ऐसा करने के बजाय मैं ueventप्रत्येक स्तर पर फ़ाइलों की सामग्री प्रदर्शित करता हूं (प्रतीत होता है कि इस की उपस्थिति एक उपनिर्देशिका के बजाय एक अलग स्तर को परिभाषित करती है)। मैं किसी भी सबसिस्टम लिंक का बेसनेम भी दिखाता हूं जो मुझे लगता है और यह दिखाता है कि डिवाइस इस पदानुक्रम में कैसे फिट बैठता है। udevadmसमान जानकारी प्रदर्शित नहीं करता है, इसलिए यह एक अच्छा पूरक उपकरण है। PCIयदि आप अन्य उपकरणों के आउटपुट lshwको उच्च स्तर के उपकरणों की तरह मैच करना चाहते हैं, तो पैरेंट डिवाइस की जानकारी (उदाहरण के लिए जानकारी) भी उपयोगी है।
#!/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
udevadmजवाब आपको sdऔर देना होगा ahci। क्या कोई तरीका निर्धारित ahciकिया जा रहा है?
device/device/, इसलिए मेरी readlinkकमान दिख रही थी readlink /sys/dev/char/XX\:Y/device/device/driver।
udevadmइसे खोजने के लिए आप टूल का उपयोग कर सकते हैं ।
आदेश होगा udevadm info -a -n /dev/sda, और फिर DRIVER==मापदंडों को देखो ।
# udevadm info -a -n /dev/sda | grep -oP 'DRIVERS?=="\K[^"]+'
sd
ahci
इससे पता चलता है कि इस उपकरण को प्रदान करने में वास्तव में 2 ड्राइवर शामिल हैं, sdऔर ahci। पहले वाला, डिवाइस के sdलिए सीधे जिम्मेदार /dev/sdaहै, लेकिन यह ahciड्राइवर को कम करता है ।
udevadmकमांड का आउटपुट इस तरह दिखता है, और यह कैसे काम करता है, इसका विवरण शामिल है।
# 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==""
udevadmहटा दिया गया है (या यहां तक कि अनुशंसित है)? मैं उस पर एक संकेत देने के लिए भी कुछ नहीं पा सकते हैं।
कमांड hwinfo और आउटपुट मॉडल और ड्राइवर का उपयोग करें । अगर कोई ड्राइवर नहीं है तो उसे नहीं दिखाया जाएगा। डिस्क के लिए उदाहरण के लिए:
# hwinfo --ब्लॉक | grep -Ei "ड्राइवर \: | मॉडल \:" मॉडल: "फ्लॉपी डिस्क" मॉडल: "फुजित्सु एमएचजेड 2080 बी" ड्राइवर: "आहि", "एसडी" मॉडल: "विभाजन" मॉडल: "विभाजन" मॉडल: "विभाजन" मॉडल: "जेनेरिक मल्टी-कार्ड" चालक: "उम-रियलटेक", "एसडी" मॉडल: "Realtek USB2.0-CRW" ड्राइवर: "ओम्स-रियलटेक"
नेटवर्क कार्ड के लिए:
# hwinfo - नेटकार्ड | grep -Ei "ड्राइवर \: | मॉडल \:" मॉडल: "ब्रॉडकॉम नेटएक्सट्रीम BCM5764M गिगाबिट ईथरनेट PCIe" ड्राइवर: "tg3" मॉडल: "इंटेल वायरलेस वाईफाई लिंक 5100" ड्राइवर: "iwlwifi"
USB उपकरणों के लिए:
# hwinfo --usb | grep -Ei "ड्राइवर \: | मॉडल \:" मॉडल: "लिनक्स 3.11.10-7-डेस्कटॉप uhci_hcd UHCI होस्ट कंट्रोलर" ड्राइवर: "हब" मॉडल: "लिनक्स 3.11.10-7-डेस्कटॉप uhci_hcd UHCI होस्ट कंट्रोलर" ड्राइवर: "हब" मॉडल: "IDEACOM IDC 6680" ड्राइवर: "usbhid" [...]
यह पता लगाने के लिए कि आप किस अन्य प्रकार के डिवाइस को क्वेरी कर सकते हैं hwinfo --help का उपयोग करें। hwinfo डिफ़ॉल्ट रूप से SUSE लाइनेक्स पर स्थापित होता है।
--onlyविकल्प जोड़ने का एक तरीका है । जैसे hwinfo --block --only /dev/sda | grep ...।
lshwआपके मशीन में पाए जाने वाले हार्डवेयर को सूचीबद्ध करने के लिए एक बढ़िया उपकरण है। दौड़ने से पहले आपको इसे स्थापित करना होगा।
$ yum install lshw
$ apt-get install lshw
आपके द्वारा उपयोग किए जा रहे सिस्टम के आधार पर उपयोग yumया apt-getनिर्भर करता है। फिर स्टोरेज हार्डवेयर को विशेष रूप से सूचीबद्ध करने के लिए:
# 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
rootसभी जानकारी वापस पाने के लिए आप इसे चलाना चाह सकते हैं ।
अन्यथा, lspciअपने हार्डवेयर के बारे में जानकारी भी दे सकते हैं:
$ 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
डिवाइस की प्रमुख और मामूली संख्या का पता लगाने के लिए, बस lsउस पर चलें ।
$ ls -l /dev/sda
brw-rw----. 1 root disk 8, 0 13 avril 10:54 /dev/sda
इस उत्पादन में, bमें brw-rw----.इसका अर्थ है कि ब्लॉक युक्ति है। अंक 8और 0क्रमशः डिवाइस की प्रमुख और मामूली संख्या हैं।
lshwऔर lspciआप एक डिवाइस द्वारा उपयोग किए जाने वाले मॉड्यूल को देख सकते हैं: कॉन्फ़िगरेशन: ड्राइवर = अहिंसा विलंबता = 0 और उपयोग में कर्नेल ड्राइवर: अहसी ।
lsmod, का कुछ संयोजन ?/proc/modulesmodinfo