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

2つの違いを見ることができます。

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

メモ:バージョン204を使用してFedora 19で実行されています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

関連情報