`udevadm info -a -n / dev / sdb`의 출력 이해


11

노트북에 외장 HDD를 연결합니다. 나는 정보를 찾으려고 노력한다.

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

"부모 장치 체인"이 출력에 의해 암시되어 있는지 궁금합니다. 나는 각각의 looking at (parent) device의미를 따르는 것이 무엇인지 이해하지 못한다 . 예를 들어

첫 번째가 내 외장 HDD입니까? 나머지는 무엇입니까?

왜 마지막 두 개를 제외한 모두가 '...'내에 "usb"를 가지고 있습니까?

마지막 PCI 슬롯 옆에 있습니까?

pci이름이 비어 있지만 마지막으로 비어있는 것은 무엇입니까 ?

"워크 업"은 외장 HDD에서 CPU 로의 의미입니까?

감사!

답변:


11

이 과정은 장치를 처리하는 다른 소프트웨어 구성 요소 (드라이버)를 넘어갑니다. 이는 장치 연결과 관련된 하드웨어 장치 및 버스에 해당합니다. 이것은 대부분 장치의 물리적 배열과 관련이 없습니다. 대부분의 장치는 같은 칩 안에 있습니다.

이 예제를 위에서 본 것입니다 :

  • 먼저 블록 장치 (디스크와 같은 장치)가 있습니다.
    그 키는 더 최종 없다 이렇게하면, 실제 장치 S( KERNEL, ATTR등). udev 규칙으로 작성할 수있는 것과 일치하도록 최종 S( KERNELS, ATTRS등)이 udevadm출력의 조상 키에 추가됩니다 .
  • 제 부모는이다 SCSI에 의해 처리 디스크 sd(SCSI 디스크) 드라이버. 이것은 물리적 SCSI 연결을 통해 반드시 SCSI 프로토콜로 연결된 디스크는 아닙니다. 대부분의 최신 스토리지 링크 (ATA, SCSI, USB, iSCSI)는 서로 다른 물리적 통신 프로토콜을 통해 SCSI 프로토콜을 사용합니다.
  • SCSI 주소 지정 계층화 : SCSI 장치는 호스트에 연결된 대상에 연결됩니다 .
  • SCSI 호스트는 드라이버가 처리 하는 USB 스토리지 컨트롤러 usb-storage입니다.
  • USB 저장 콘트롤러가 부착되어 USB 용 제어기. USB 장치는 SCSI와 같은 트리 방식으로 연결되지만 SCSI에는 고정 된 수의 분기점이 있지만 USB는 트리의 깊이를 증가시키는 허브를 연결할 수 있습니다. USB 단계에 대한 세부 정보를 설명 할 USB에 대해 잘 모릅니다.
  • 결국 우리는 USB 호스트 컨트롤러에 도착합니다 ATTRS{product}=="EHCI Host Controller". EHCI 는 USB 2.0 컨트롤러를 의미합니다.
  • USB 컨트롤러는 PCI 버스를 통해 CPU와 통신합니다 . 0000:00:1d.7USB 컨트롤러가 연결된 버스 주소입니다.
    이 레벨에는 PCI 확장 카드가 연결되어 있습니다. USB 컨트롤러를 포함하는 칩은 너무 큰 물체와 연결되어 있지 않으며 연결은 실리콘 내부에 있습니다.
  • 마지막 항목은 PCI 버스 자체입니다. 해당 버스의 엔드 포인트가 CPU이기 때문에 이것이 마지막 항목입니다.

2
@Tim 인클로저는 물리적, 전기적으로 그리고 프로토콜 스택의 하위 레벨에서 IDE와 USB 스토리지 간을 변환합니다. IDE와 USB 스토리지는 모두 SCSI를 데이터 교환 프로토콜 (또는 매우 유사한 변형)로 사용합니다. 첫 번째 질문은 약간 까다 롭습니다. 시스템은 서로 다른 수준에서 다른 것을 보게됩니다 (블록 장치 수준에서 하드 디스크, SCSI 수준에서 hdd, USB 수준에서 인클로저를 볼 수 있음). USB 케이블이 소프트웨어에서 보이지 않습니다.
Gilles 'SO- 악마 그만'

2
@Tim이 레벨은 모두 OS 디자이너가 만든 추상화입니다. 이러한 추상화의 대부분은 하드웨어 (일부 개별 구성 요소가 아닐 수 있으며 물리적으로 단일체 하드웨어 내에 하나 이상의 구성 요소가있을 수 있음)의 일부보기에 해당합니다. 추상화와 하드웨어 사이의 일치는 다음과 같습니다. 항상 완벽하지는 않습니다.
Gilles 'SO- 악한 중지'

1
@Tim Hmmm, 나는 당신이 양쪽에 드라이버 코드를 작성할 때 (내가 한 적이없는) 당신이 정말로 이해하는 것이라고 생각합니다. Wikipedia에서 시작할 수 있으며 주제에 관한 책이 있습니다 (추천해야 할 사항이 없습니다). 표준을 읽을 수 있습니다 (일부는 무료로 제공되며 일부는 지불이 필요하며 때로는 중간 정도의 경우에만 상당한 수수료가 부과됩니다) 큰 조직).
Gilles 'SO- 악마 중지'

1
@Tim IP over Ethernet, PPP 또는 Bluetooth 등을 사용할 수있는 것과 같습니다. 또한 Ajax over HTTP over TCP over IP를 사용할 수 있습니다. SCSI, IDE, USB 등을 통해 SCSI 명령을 사용할 수 있습니다. 그리고 PCI 버스는이 모든 것을 중계합니다.
Gilles 'SO- 악한 중지'

1
@Tim 1) IDE를 USB 저장 장치로 교체 하면 인클로저가 둘 사이를 변환합니다. 2) SCSI 명령SCSI
Gilles 'SO-stop
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.