たとえば、デバイス/ dev/sdbがあります。それがudevサブシステムであることを確認するにはどうすればよいですか?
$ 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':
@seperoの答えは、リーフノードのUDEVデバイスに関する情報のみを示しています。
$ udevadm info -q all -n /dev/sda > udevadm_info_1.txt
私の答えは、デバイスの/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
注:udevadm
のバージョン204を使用して、Fedora 19で実行しています:
$ udevadm --version
204
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
これは、KEY=VALUE
という形式のデバイスプロパティ値を出力します。これは、udevルールでENV{KEY}=="VALUE"
として使用できます。
デバイスに/dev
エントリがない場合は、代わりに/sys
の下のパスを使用して参照できます。
udevadm info -a -p /sys/block/sdb
(この場合は便利な例ではありません。これは、カテゴリが一般的ではなく、/dev
の下にまだエントリがないデバイスに役立ちます)。
Udevルールを変更すると、それらは自動的に読み込まれます。ただし、これらは、後でシステムに接続されるデバイスにのみ適用されます。既に接続されているデバイスに新しいルールを適用するには、udevadm trigger
を使用します(アプリケーションを特定のデバイスに制限するオプションを使用)。
$ udevadm info -q all -n /dev/sdb