Udev-デバイスがどのサブシステムに属しているかを調べるにはどうすればよいですか?


19

たとえば、デバイス/ dev / sdbがあります。udevサブシステムを見つけるにはどうすればよいですか?

回答:


12
$ 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デバイスに関連する情報を表示することです。

Seperoの答え

$ 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

注:私はFedora 19で実行しています。バージョン204を使用していudevadmます:

$ udevadm --version
204

なぜこの複雑なコマンドではなくudevadm info -a -n /dev/sdb
ジル 'SO-悪であるのをやめる' 14

@Gilles-これは、すべての親ノードのすべてのATTRSをダンプします。
slm

私もそうです—出力は同じです。
ジル「SO-悪であるのをやめる」

ジル-あなたはDebianですか?udevadmのバージョン 上記の2つのコマンドを実行すると、これらの2つのファイルが取得されます。単一udevadm出力ネストされたudevadm出力。出力を見ると、単一のコマンドはすべての親のすべての出力を組み合わせているだけで、私のバージョンではどの親がATTRSの派生元であるかを示していると思います。
slm

pastebin.com/NHg9pydAは、udevadm info -q allではなくからの出力udevadm info -aです。の-a近道だと思います-q all --attribute-walk。または、これはあなたのバージョンで違いますか?この変更を覚えていませんが、何年もFedoraを使用していません(しかし、なぜこれにパッチを適用するのでしょうか?)。
ジル 'SO-悪であるのをやめる' 14

5

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(アプリケーションを特定のデバイスに制限するオプションを使用して)を使用します。


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

このアプローチと私のb / wの違いは、これが/sysforのリーフノードのみを表示することです/dev/sdb。もう1つのアプローチでは、リーフノードのツリー階層全体とブランチを表示します。
slm
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.