Pahami output dari `udevadm info -a -n / dev / sdb`

11

Saya pasang HDD eksternal ke laptop saya. Saya mencoba mencari tahu informasinya

$ udevadm info -a -n /dev/sdb

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:1d.7/usb2/2-1/2-1:1.0/host10/target10:0:0/10:0:0:0/block/sdb':
    KERNEL=="sdb"
    SUBSYSTEM=="block"
    DRIVER==""
    ATTR{range}=="16"
    ATTR{ext_range}=="256"
    ATTR{removable}=="0"
    ATTR{ro}=="0"
    ATTR{size}=="312581808"
    ATTR{alignment_offset}=="0"
    ATTR{discard_alignment}=="0"
    ATTR{capability}=="50"
    ATTR{stat}=="     322    11207    13259     2196        2        0       16        0        0     1524     2196"
    ATTR{inflight}=="       0        0"
    ATTR{events}==""
    ATTR{events_async}==""
    ATTR{events_poll_msecs}=="-1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/host10/target10:0:0/10:0:0:0':
    KERNELS=="10:0:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS=="sd"
    ATTRS{device_blocked}=="0"
    ATTRS{type}=="0"
    ATTRS{scsi_level}=="0"
    ATTRS{vendor}=="USB 2.0 "
    ATTRS{model}=="Storage Device  "
    ATTRS{rev}=="0100"
    ATTRS{state}=="running"
    ATTRS{timeout}=="30"
    ATTRS{iocounterbits}=="32"
    ATTRS{iorequest_cnt}=="0x165"
    ATTRS{iodone_cnt}=="0x165"
    ATTRS{ioerr_cnt}=="0x2"
    ATTRS{evt_media_change}=="0"
    ATTRS{dh_state}=="detached"
    ATTRS{queue_depth}=="1"
    ATTRS{queue_type}=="none"
    ATTRS{max_sectors}=="240"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/host10/target10:0:0':
    KERNELS=="target10:0:0"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0/host10':
    KERNELS=="host10"
    SUBSYSTEMS=="scsi"
    DRIVERS==""

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1/2-1:1.0':
    KERNELS=="2-1:1.0"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb-storage"
    ATTRS{bInterfaceNumber}=="00"
    ATTRS{bAlternateSetting}==" 0"
    ATTRS{bNumEndpoints}=="02"
    ATTRS{bInterfaceClass}=="08"
    ATTRS{bInterfaceSubClass}=="06"
    ATTRS{bInterfaceProtocol}=="50"
    ATTRS{supports_autosuspend}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2/2-1':
    KERNELS=="2-1"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="c0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="1076"
    ATTRS{idVendor}=="0402"
    ATTRS{idProduct}=="5621"
    ATTRS{bcdDevice}=="0103"
    ATTRS{bDeviceClass}=="00"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="8"
    ATTRS{devpath}=="1"
    ATTRS{product}=="USB 2.0 Storage Device"
    ATTRS{serial}=="00042222200000064007"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7/usb2':
    KERNELS=="usb2"
    SUBSYSTEMS=="usb"
    DRIVERS=="usb"
    ATTRS{configuration}==""
    ATTRS{bNumInterfaces}==" 1"
    ATTRS{bConfigurationValue}=="1"
    ATTRS{bmAttributes}=="e0"
    ATTRS{bMaxPower}=="  0mA"
    ATTRS{urbnum}=="382"
    ATTRS{idVendor}=="1d6b"
    ATTRS{idProduct}=="0002"
    ATTRS{bcdDevice}=="0302"
    ATTRS{bDeviceClass}=="09"
    ATTRS{bDeviceSubClass}=="00"
    ATTRS{bDeviceProtocol}=="00"
    ATTRS{bNumConfigurations}=="1"
    ATTRS{bMaxPacketSize0}=="64"
    ATTRS{speed}=="480"
    ATTRS{busnum}=="2"
    ATTRS{devnum}=="1"
    ATTRS{devpath}=="0"
    ATTRS{version}==" 2.00"
    ATTRS{maxchild}=="6"
    ATTRS{quirks}=="0x0"
    ATTRS{avoid_reset_quirk}=="0"
    ATTRS{authorized}=="1"
    ATTRS{manufacturer}=="Linux 3.2.0-27-generic-pae ehci_hcd"
    ATTRS{product}=="EHCI Host Controller"
    ATTRS{serial}=="0000:00:1d.7"
    ATTRS{authorized_default}=="1"

  looking at parent device '/devices/pci0000:00/0000:00:1d.7':
    KERNELS=="0000:00:1d.7"
    SUBSYSTEMS=="pci"
    DRIVERS=="ehci_hcd"
    ATTRS{vendor}=="0x8086"
    ATTRS{device}=="0x293a"
    ATTRS{subsystem_vendor}=="0x17aa"
    ATTRS{subsystem_device}=="0x20f1"
    ATTRS{class}=="0x0c0320"
    ATTRS{irq}=="19"
    ATTRS{local_cpus}=="ff"
    ATTRS{local_cpulist}=="0-7"
    ATTRS{dma_mask_bits}=="32"
    ATTRS{consistent_dma_mask_bits}=="32"
    ATTRS{broken_parity_status}=="0"
    ATTRS{msi_bus}==""
    ATTRS{companion}==""
    ATTRS{uframe_periodic_max}=="100"

  looking at parent device '/devices/pci0000:00':
    KERNELS=="pci0000:00"
    SUBSYSTEMS==""
    DRIVERS==""

Saya bertanya-tanya apa "rantai perangkat induk", tersirat dari output? Saya tidak begitu mengerti apa looking at (parent) deviceartinya mengikuti masing-masing . Sebagai contoh,

Apakah yang pertama HDD eksternal saya? Apa sisanya?

Mengapa semua kecuali dua yang terakhir memiliki "usb" dalam '...'?

Apakah yang di sebelah slot PCI terakhir?

Apa yang terakhir yang begitu kosong, meskipun ada pcidalam namanya?

Apakah "berjalan" berarti dari HDD eksternal ke CPU?

Terima kasih!

Tim
sumber

Jawaban:

11

Jalannya melewati berbagai komponen perangkat lunak (driver) yang menangani perangkat; ini pada umumnya sesuai dengan perangkat perangkat keras dan bus yang terlibat dalam menghubungkan ke perangkat. Ini sebagian besar tidak terkait dengan pengaturan fisik perangkat: kebanyakan dari mereka berada di dalam chip yang sama.

Mengambil contoh ini dari atas:

  • Pertama kita memiliki perangkat blok (perangkat seperti disk).
    Ini adalah perangkat yang sebenarnya, sehingga kunci-kuncinya tidak memiliki akhir S( KERNEL, ATTR, dll). Final S( KERNELS,, ATTRSdll.) Ditambahkan ke kunci leluhur dalam udevadmoutput, untuk mencocokkan apa yang dapat Anda tulis dalam aturan udev .
  • Orang tua pertama adalah disk SCSI , ditangani oleh sddriver (SCSI disk). Ini adalah disk yang terhubung dengan protokol SCSI, tidak harus melalui koneksi SCSI fisik; sebagian besar tautan penyimpanan modern (ATA, SCSI, USB, iSCSI) menggunakan protokol SCSI melalui berbagai protokol komunikasi fisik.
  • Pengalamatan SCSI berlapis: perangkat SCSI dilampirkan ke target yang dilampirkan ke host .
  • Host SCSI adalah pengontrol penyimpanan USB , ditangani oleh usb-storagedriver.
  • Pengontrol penyimpanan USB terpasang ke pengontrol USB . Perangkat USB terpasang dalam mode pohon (seperti SCSI, tetapi SCSI memiliki jumlah titik percabangan yang tetap, sedangkan USB dapat menghubungkan hub yang meningkatkan kedalaman pohon). Saya tidak cukup tahu tentang USB untuk menjelaskan detail langkah-langkah USB.
  • Akhirnya kami tiba di host controller USB: ATTRS{product}=="EHCI Host Controller". EHCI berarti pengontrol USB 2.0.
  • Kontroler USB berbicara ke CPU melalui bus PCI . 0000:00:1d.7adalah alamat bus tempat pengontrol USB terpasang.
    Kartu ekstensi PCI terpasang pada level ini. Chip yang berisi pengontrol USB tidak terhubung dengan sesuatu yang begitu besar, koneksinya jauh di dalam silikon.
  • Entri terakhir adalah bus PCI itu sendiri. Ini adalah entri terakhir karena titik akhir dari bus itu adalah CPU.
Gilles 'SANGAT berhenti menjadi jahat'
sumber
2
@Tim. Enklosur menerjemahkan antara IDE dan penyimpanan USB secara fisik, elektrik, dan pada tingkat yang lebih rendah dari tumpukan protokol. Baik penyimpanan IDE dan USB menggunakan SCSI sebagai protokol pertukaran data (atau varian yang sangat dekat). Pertanyaan pertama Anda agak sulit; sistem melihat hal-hal yang berbeda pada level yang berbeda (bisa dibilang ia melihat hard disk pada level blok perangkat, hdd pada level SCSI, dan enclosure pada level USB). Kabel USB tidak terlihat dari perangkat lunak.
Gilles 'SANGAT berhenti menjadi jahat'
2
@Tim Level-level ini adalah semua abstraksi yang dibuat oleh perancang OS. Sebagian besar abstraksi ini sesuai dengan beberapa tampilan perangkat keras (yang mungkin tidak semua komponen terpisah, dan mungkin ada lebih dari satu komponen di dalam perangkat keras tunggal), korespondensi antara abstraksi dan perangkat keras adalah dekat tapi tidak selalu sempurna.
Gilles 'SANGAT berhenti menjadi jahat'
1
@Tim Hmmm, saya kira ini adalah hal-hal yang hanya Anda benar-benar mengerti ketika Anda telah menulis kode driver di kedua sisi (yang belum pernah saya lakukan). Anda dapat mulai dari Wikipedia, dan ada buku tentang topik ini (saya tidak tahu apa yang harus direkomendasikan), dan Anda dapat membaca standarnya (beberapa tersedia secara bebas, beberapa memerlukan pembayaran, kadang-kadang biaya besar hanya tersedia untuk media-ke- organisasi besar).
Gilles 'SANGAT berhenti menjadi jahat'
1
@Tim Ini seperti Anda dapat memiliki IP melalui Ethernet, atau melalui PPP, atau melalui Bluetooth, dll. Dan Anda dapat memiliki hal-hal seperti Ajax melalui HTTP melalui TCP melalui IP. Anda dapat memiliki perintah SCSI melalui SCSI, melalui IDE, melalui USB, dll. Dan bus PCI me-relay semua ini.
Gilles 'SANGAT berhenti menjadi jahat'
1
@Tim 1) Ganti IDE dengan penyimpanan USB , enklosur menerjemahkan keduanya. 2) Perintah SCSI vs SCSI
Gilles 'SO- stop being evil'