購入した新しいUSBデバイスのudevルールを追加するように求められました。これがなぜ必要で価値があるのかについての非常に簡単な説明はないようです。常にデバイスを同じパスにマッピングしますか?たとえば、常にデバイスを/dev/ttyUSB1
または/dev/sda4
?
存在する/etc/udev/rules.d/99-totalphase.rules
:
# This file causes the mode of all Total Phase usb devices to be made
# writable for any user.
# Aardvark I2C/SPI Host Adapter
ACTION=="add", SUBSYSTEM=="usb_device", SYSFS{idVendor}=="0403", SYSFS{idProduct}=="e0d0", MODE="0666"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="0403", ATTR{idProduct}=="e0d0", MODE="0666"
# Beagle Protocol Analyzers
ACTION=="add", SUBSYSTEM=="usb_device", SYSFS{idVendor}=="1679", SYSFS{idProduct}=="2001", MODE="0666"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", MODE="0666"
答え1
実際、特定のデバイスを常に同じ場所にマッピングすることは、udevの一般的な用途の1つです。デバイスは複数の場所にあってもかまいません。たとえば、ディスクパーティションは、/dev/sda1
自動番号(たとえば)だけでなく、ファイルシステムのラベル()、/dev/disk/by-label/*
ファイルシステムのUUID(/dev/disk/by-uuid/*
)、およびディスクデバイスのシリアル番号アクセス(/dev/disk/by-id/*
)です。デバイスがいつ接続されているのか、どのポートに接続されているのか気にせずに特定のデバイスにアクセスしたい場合は、最も明確な方法は、特定のハードウェアデバイスに一致するudevルールを追加し、意味のある名前のエントリを作成すること/dev
です。
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", \
SERIAL=="123456", MODE="0666", SYMLINK+="analyzer-foo"
ACTION=="add", SUBSYSTEM=="usb", ATTR{idVendor}=="1679", ATTR{idProduct}=="2001", \
SERIAL=="123789", MODE="0666", SYMLINK+="analyzer-bar"
udevルールのもう1つの一般的な目的は、デバイスノードへの権限を制御して、通常は特定のデーモンがアクセスできるようにすることです。これが正しいOWNER
、GROUP
およびディレクティブの目的MODE
ですSECLABEL
。
3番目の理由カテゴリは、デバイスが接続されたときに特定のアクションをトリガーすることです。たとえば、ファームウェアをデバイスにアップロードしたり、デバイスの使用モードを選択したり、システムの特定の部分に新しいネットワーク接続またはプリンタを使用できることを知らせる必要があります。