Zrozum wyjście programu `udevadm info -a -n / dev / sdb`


11

Podłączam zewnętrzny dysk twardy do laptopa. Próbuję znaleźć informacje przez

$ 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==""

Zastanawiam się, czym jest „łańcuch urządzeń nadrzędnych” implikowany przez dane wyjściowe? Nie do końca rozumiem, co looking at (parent) deviceto znaczy. Na przykład,

Czy pierwszy to mój zewnętrzny dysk twardy? Jaka jest reszta

Dlaczego wszyscy oprócz dwóch ostatnich mają „usb” w „...”?

Czy ten obok ostatnich gniazd PCI?

Który ostatni jest tak pusty, choć ma pciw swoim imieniu?

Czy „chodzenie” oznacza z zewnętrznego dysku twardego na procesor?

Dzięki!

Odpowiedzi:


11

Omówiono różne komponenty oprogramowania (sterowniki), które obsługują urządzenie; odpowiada to w zasadzie urządzeniom sprzętowym i magistralom zaangażowanym w łączenie się z urządzeniem. Jest to w większości niezwiązane z fizycznym rozmieszczeniem urządzeń: większość z nich i tak znajduje się w tym samym układzie.

Biorąc ten przykład z góry:

  • Najpierw mamy urządzenie blokowe (urządzenie podobne do dysku).
    Jest to rzeczywista urządzenie, więc jego klawisze nie mają końcowy S( KERNEL, ATTR, itd.). Końcowy S( KERNELS, ATTRSitp.) Jest dodawany do kluczy przodków w danych udevadmwyjściowych, aby dopasować to, co można napisać w regułach udev .
  • Pierwszym rodzicem jest dysk SCSI , obsługiwany przez sdsterownik (dysk SCSI). Jest to dysk połączony z protokołem SCSI, niekoniecznie przez fizyczne połączenie SCSI; większość nowoczesnych łączy pamięci (ATA, SCSI, USB, iSCSI) korzysta z protokołu SCSI w oparciu o różne fizyczne protokoły komunikacyjne.
  • Adresowanie SCSI jest warstwowe: urządzenie SCSI jest podłączone do celu podłączonego do hosta .
  • Host SCSI to kontroler pamięci USB obsługiwany przez usb-storagesterownik.
  • Kontroler pamięci USB jest podłączony do kontrolera USB . Urządzenia USB są podłączone w sposób drzewny (jak SCSI, ale SCSI ma stałą liczbę punktów rozgałęzienia, podczas gdy USB może łączyć koncentratory, które zwiększają głębokość drzewa). Nie wiem wystarczająco dużo o USB, aby wyjaśnić szczegóły kroków USB.
  • W końcu dochodzimy do kontrolera hosta USB: ATTRS{product}=="EHCI Host Controller". EHCI oznacza kontroler USB 2.0.
  • Kontroler USB komunikuje się z procesorem przez szynę PCI . 0000:00:1d.7to adres magistrali, pod którym podłączony jest kontroler USB.
    Karty rozszerzeń PCI są dołączone na tym poziomie. Układ zawierający kontroler USB nie jest połączony z niczym tak nieporęcznym, jego połączenia są głęboko w krzemu.
  • Ostatnim wpisem jest sama magistrala PCI. Jest to ostatni wpis, ponieważ punktem końcowym tej magistrali jest procesor.

2
@Tim Obudowa tłumaczy fizycznie, elektrycznie i na dolnym poziomie stosu protokołu między IDE i pamięcią USB. Zarówno pamięć IDE, jak i pamięć USB wykorzystują SCSI jako protokół wymiany danych (lub bardzo bliskie warianty). Twoje pierwsze pytanie jest nieco trudne; system widzi różne rzeczy na różnych poziomach (można powiedzieć, że widzi dysk twardy na poziomie urządzenia blokowego, dysk twardy na poziomie SCSI i obudowę na poziomie USB). Kabel USB jest niewidoczny dla oprogramowania.
Gilles 'SO - przestań być zły'

2
@Tim Te poziomy to abstrakcje utworzone przez projektantów systemu operacyjnego. Większość tych abstrakcji odpowiada niektórym widokom elementu sprzętowego (który może nie być wszystkimi oddzielnymi komponentami, a wewnątrz fizycznie jednoczęściowego elementu sprzętowego może znajdować się więcej niż jeden element), zgodność między abstrakcjami a sprzętem jest blisko, ale nie zawsze idealnie.
Gilles 'SO - przestań być zły'

1
@ Tim Hmmm, przypuszczam, że są to rzeczy, które naprawdę rozumiesz tylko wtedy, gdy napisałeś kod sterownika po obu stronach (czego nigdy nie zrobiłem). Możesz zacząć od Wikipedii, są książki na ten temat (nie mam pojęcia, co polecić) i możesz przeczytać standardy (niektóre są dostępne bezpłatnie, inne wymagają uiszczenia, a czasem znacznej opłaty dostępne tylko dla średnich i średnich -duża organizacja).
Gilles 'SO - przestań być zły'

1
@Tim To tak, jakbyś mógł korzystać z IP przez Ethernet, przez PPP lub przez Bluetooth itp. I możesz mieć takie rzeczy jak Ajax przez HTTP przez TCP przez IP. Możesz mieć polecenia SCSI przez SCSI, przez IDE, przez USB itp. A magistrala PCI przekazuje je wszystkie.
Gilles 'SO - przestań być zły'

1
@ Tim 1) Zastąp IDE przez pamięć USB , obudowa tłumaczy się między nimi. 2) Komendy SCSI vs SCSI
Gilles „SO- przestań być zły”
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.