Hiểu đầu ra của `udevadm thông tin -a -n / dev / sdb`


11

Tôi cắm một ổ cứng gắn ngoài vào máy tính xách tay của tôi. Tôi cố gắng tìm hiểu thông tin bằng cách

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

Tôi tự hỏi "chuỗi thiết bị mẹ" là gì, ngụ ý đầu ra? Tôi không hiểu ý looking at (parent) devicenghĩa của từng phương tiện. Ví dụ,

Đây có phải là ổ cứng gắn ngoài đầu tiên của tôi không? Phần còn lại là gì?

Tại sao tất cả ngoại trừ hai người cuối cùng có "usb" trong '...'?

Là cái bên cạnh khe cắm PCI cuối cùng?

Cái cuối cùng trống rỗng là gì, mặc dù có pcitên của nó?

"Đi lên" có nghĩa là từ ổ cứng gắn ngoài đến CPU?

Cảm ơn!

Câu trả lời:


11

Cuộc đi bộ vượt qua các thành phần phần mềm (trình điều khiển) khác nhau để xử lý thiết bị; điều này tương ứng với các thiết bị phần cứng và xe buýt có liên quan đến việc kết nối với thiết bị. Điều này chủ yếu không liên quan đến sự sắp xếp vật lý của các thiết bị: dù sao hầu hết chúng đều nằm trong cùng một con chip.

Lấy ví dụ này từ đầu:

  • Đầu tiên chúng ta có một thiết bị khối (một thiết bị giống như đĩa).
    Đây là thiết bị thực tế, do các phím của nó không có thức S( KERNEL, ATTR, vv). Một cuối cùng S( KERNELS, ATTRSv.v.) được thêm vào các khóa của tổ tiên trong udevadmđầu ra, để khớp với những gì bạn có thể viết trong các quy tắc udev .
  • Cha mẹ đầu tiên là một đĩa SCSI , được xử lý bởi sdtrình điều khiển (đĩa SCSI). Đây là một đĩa được kết nối với giao thức SCSI, không nhất thiết phải qua kết nối SCSI vật lý; hầu hết các liên kết lưu trữ hiện đại (ATA, SCSI, USB, iSCSI) sử dụng giao thức SCSI trên các giao thức truyền thông vật lý khác nhau.
  • Địa chỉ SCSI được xếp lớp: thiết bị SCSI được gắn vào mục tiêu được gắn vào máy chủ .
  • Máy chủ SCSI là bộ điều khiển lưu trữ USB , được xử lý bởi usb-storagetrình điều khiển.
  • Bộ điều khiển lưu trữ USB được gắn vào bộ điều khiển USB . Các thiết bị USB được gắn theo kiểu cây (như SCSI, nhưng SCSI có số điểm phân nhánh cố định, trong khi USB có thể xâu chuỗi các trung tâm làm tăng độ sâu của cây). Tôi không biết đủ về USB để giải thích chi tiết về các bước USB.
  • Cuối cùng, chúng tôi đến bộ điều khiển máy chủ USB : ATTRS{product}=="EHCI Host Controller". EHCI có nghĩa là bộ điều khiển USB 2.0.
  • Bộ điều khiển USB nói chuyện với CPU qua bus PCI . 0000:00:1d.7là địa chỉ bus mà tại đó bộ điều khiển USB được gắn vào.
    Thẻ mở rộng PCI được đính kèm ở cấp độ này. Con chip chứa bộ điều khiển USB không được kết nối với bất kỳ thứ gì quá cồng kềnh, các kết nối của nó nằm sâu bên trong silicon.
  • Mục cuối cùng là bus PCI. Đây là mục cuối cùng vì điểm cuối của bus đó là CPU.

2
@Tim Vỏ bọc dịch giữa bộ lưu trữ IDE và USB về mặt vật lý, điện và ở cấp độ thấp hơn của ngăn xếp giao thức. Cả IDE và bộ lưu trữ USB đều sử dụng SCSI làm giao thức trao đổi dữ liệu (hoặc các biến thể rất gần). Câu hỏi đầu tiên của bạn là một chút khó khăn; hệ thống nhìn thấy những thứ khác nhau ở các cấp độ khác nhau (bạn có thể nói nó nhìn thấy đĩa cứng ở cấp độ thiết bị khối, hdd ở cấp độ SCSI và vỏ bọc ở cấp độ USB). Cáp USB là vô hình từ phần mềm.
Gilles 'SO- ngừng trở nên xấu xa'

2
@Tim Các cấp độ này là tất cả các khái niệm trừu tượng được tạo bởi các nhà thiết kế hệ điều hành. Hầu hết các tóm tắt này tương ứng với một số quan điểm của một phần cứng (có thể không phải là tất cả các thành phần riêng biệt và có thể có nhiều hơn một thành phần bên trong một phần cứng vật lý), sự tương ứng giữa trừu tượng và phần cứng là gần gũi nhưng không phải lúc nào cũng hoàn hảo.
Gilles 'SO- ngừng trở nên xấu xa'

1
@Tim Hmmm, tôi cho rằng đây là những điều bạn chỉ thực sự hiểu khi bạn đã viết mã trình điều khiển ở cả hai bên (điều mà tôi chưa bao giờ làm). Bạn có thể bắt đầu từ Wikipedia và có những cuốn sách về chủ đề này (tôi không biết nên giới thiệu gì) và bạn có thể đọc các tiêu chuẩn (một số có sẵn miễn phí, một số yêu cầu phải trả tiền, đôi khi chỉ có một khoản phí đáng kể cho một phương tiện trung bình tổ chức lớn).
Gilles 'SO- ngừng trở nên xấu xa'

1
@Tim Giống như bạn có thể có IP qua Ethernet, hoặc qua PPP hoặc qua Bluetooth, v.v. Và bạn có thể có những thứ như Ajax qua HTTP qua TCP qua IP. Bạn có thể có các lệnh SCSI qua SCSI, qua IDE, qua USB, v.v. Và bus PCI chuyển tiếp tất cả các lệnh này.
Gilles 'SO- ngừng trở nên xấu xa'

1
@Tim 1) Thay thế IDE bằng bộ lưu trữ USB , bao vây dịch giữa hai cái. 2) Các lệnh SCSI so với SCSI
Gilles 'SO- ngừng trở nên xấu xa'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.