Usb了解
了解 udevadm info -a -n /dev/sdb
的輸出
我將外部硬碟插入筆記型電腦。我嘗試通過以下方式查找資訊
$ 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 嗎?
謝謝!
遍歷處理設備的不同軟體組件(驅動程序);這基本上對應於連接到設備所涉及的硬體設備和匯流排。這與設備的物理排列幾乎無關:無論如何,它們中的大多數都在同一個晶片內。
從頂部看這個例子:
- 首先我們有一個塊設備(類似磁碟的設備)。
這是實際的設備,所以它的鍵沒有final
S
(KERNEL
,ATTR
等)。最終S
(KERNELS
,ATTRS
等)被添加到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。