Udev-如何找出设备属于哪个子系统?

Udev-如何找出设备属于哪个子系统?

例如,我有设备 /dev/sdb。我如何找到它的 udev 子系统?

答案1

$ udevadm info -q all -a /dev/sdb

笔记:上面的代码在 UDEV 数据库中查询设备信息,info我们正在查询所有信息,并且我们正在遍历与该设备标签相关的-q all所有属性。/sys

摘抄

   --attribute-walk|-a
       Print all sysfs properties of the specified device that can be used 
       in udev rules to match the specified device. It prints all devices
       along the chain, up to the root of sysfs that can be used in udev 
       rules.

例子

这是我的/dev/sda设备。

$ udevadm info -q all -a /dev/sda | grep parent
walks up the chain of parent devices. It prints for every device
and the attributes from one single parent device.
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0/0:0:0:0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0/target0:0:0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1/host0':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2/ata1':
  looking at parent device '/devices/pci0000:00/0000:00:1f.2':
  looking at parent device '/devices/pci0000:00':

这2个命令的区别

@sepero 的答案是显示仅与叶节点上的 UDEV 设备相关的信息。

塞佩罗的回答

$ udevadm info -q all -n /dev/sda > udevadm_info_1.txt

slm 的回答

/sys我的答案显示了它遍历设备的整个链层次结构时的属性。

$ udevadm info -q all -a /dev/sda > udevadm_info_2.txt

你可以看到这两者之间的区别。

$ diff -y udevadm_info_1.txt udevadm_info_2.txt  \
    > udevadm_info_diff.txt

笔记:我在 Fedora 19 上运行,使用版本 204 udevadm

$ udevadm --version
204

答案2

udevadm info提供此类信息。

如果您特别想要该子系统:

udevadm info -n /dev/sdb -q property | sed -n 's/SUBSYSTEM=//p'

当您编写 udev 规则时,最有用的命令是

udevadm info -a -n /dev/sdb

这会打印出可用于匹配 udev 规则中的设备的规则。第一个块与设备本身有关,后续块与设备树中的祖先有关。唯一需要注意的是,您不能混合对应于不同祖先的密钥。例如,给出这段摘录

KERNEL=="sdb"
SUBSYSTEM=="block"
KERNELS=="5:0:0:0"
SUBSYSTEMS=="scsi"
DRIVERS=="sd"
ATTRS{model}=="Yoyodyne Diskinator"
KERNELS=="0000:00:1f.2"
SUBSYSTEMS=="pci"
DRIVERS=="ahci"

那么您可以将此设备与SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator"或匹配SUBSYSTEM=="block", SUBSYSTEMS=="pci", DRIVERS="ahci",但不能与 匹配SUBSYSTEM=="block", SUBSYSTEMS=="scsi", ATTRS{model}="Yoyodyne Diskinator", DRIVERS="ahci"

获取在规则中使用的信息的另一种方法是

udevadm info -q property -n /dev/sdb --export

这会打印您可以在 udev 规则中使用的形式的设备属性值。KEY=VALUEENV{KEY}=="VALUE"

如果您的设备没有/dev条目,您可以使用下面的路径来引用它/sys,例如

udevadm info -a -p /sys/block/sdb

(在这种情况下,这不是一个有用的示例 - 这对于类别不常见且尚未有条目的设备很有用/dev)。

当您更改 udev 规则时,它们会自动读取;但是,它们仅适用于随后插入系统的设备。要将新规则应用到已连接的设备,请使用udevadm trigger(带有将应用程序限制到某些设备的选项)。

答案3

$ udevadm info -q all -n /dev/sdb

相关内容