了解udevadm info -a -n / dev / sdb的输出


11

我将外部硬盘插入笔记本电脑。我尝试通过以下方式查找信息

$ 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含义。例如,

第一个是我的外部硬盘吗?剩下的是什么?

为什么除了后两个以外的所有字符都在“ ...”中包含“ usb”?

最后一个PCI插槽旁边是那个吗?

尽管如此,最后一个空无一物的是pci什么?

从外部硬盘驱动器到CPU的“提升”是指吗?

谢谢!

Answers:


11

遍历处理设备的不同软件组件(驱动程序)。这在很大程度上与硬件设备和连接到该设备所涉及的总线相对应。这主要与设备的物理布置无关:无论如何,它们大多数都位于同一芯片内。

从顶部开始看这个例子:

  • 首先,我们有一个块设备(类似磁盘的设备)。
    这是实际的设备,因此它的键有没有最终SKERNELATTR等)。在输出的祖先键中添加一个末尾SKERNELSATTRS等)udevadm,以匹配您可以在udev规则中编写的内容。
  • 第一亲本是一个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.7是连接USB控制器的总线地址。
    PCI扩展卡已连接到该级别。包含USB控制器的芯片没有与任何笨重的东西连接,它的连接在硅片内部很深。
  • 最后一项是PCI总线本身。这是最后一个条目,因为该总线的端点是CPU。

2
@Tim机柜在物理上,电气上和协议栈的较低级别上在IDE和USB存储之间转换。IDE和USB存储设备均使用SCSI作为数据交换协议(或非常接近的变体)。您的第一个问题有些棘手;系统会在不同级别看到不同的内容(您可以说它在块设备级别看到硬盘,在SCSI级别看到硬盘,在USB级别看到机箱)。从软件看不到USB电缆。
吉尔(Gilles)'所以

2
@Tim这些级别都是OS设计人员创建的所有抽象。这些抽象中的大多数对应于某个硬件的某些视图(可能不是所有单独的组件,并且在物理上单件的硬件中可以有多个组件),这些抽象和硬件之间的对应关系为接近但并不总是完美的。
吉尔斯(Gilles)'所以

1
@Tim Hmmm,我想您只有在两面都编写了驱动程序代码时才真正理解这些事情(我从未做过)。您可以从Wikipedia开始,并且有关于该主题的书籍(我不知道推荐什么),并且您可以阅读标准(有些是免费提供的,有些需要付费,有时只有中级水平的人才能支付大量费用) -大型组织)。
吉尔(Gilles)'所以

1
@Tim就像您可以通过以太网,PPP或蓝牙等获得IP。并且可以拥有基于HTTP的基于IP的HTTP上的Ajax。您可以通过SCSI,IDE,USB等获得SCSI命令。PCI总线可以中继所有这些命令。
吉尔(Gilles)'所以

1
@Tim 1)用USB存储器替换IDE ,机箱在两者之间转换。2)SCSI命令SCSI
吉尔斯'SO-停止邪恶'
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.