「デバイスとモジュールの扱いについて」で説明したように、/dev
内に同一機能を有するデバイスがあったとすると、その検出順は本質的にランダムです。 例えば USB 接続のウェブカメラと TV
チューナーがあったとして、/dev/video0
がウェブカメラを、また
/dev/video1
がチューナーをそれぞれ参照していたとしても、システム起動後はその順が変わることがあります。
サウンドカードやネットワークカードを除いた他のハードウェアであれば、udev
ルールを適切に記述することで、固定的なシンボリックリンクを作り出すことができます。 ネットワークカードについては、別途
「全般的なネットワークの設定」にて説明しています。 またサウンドカードの設定方法は
BLFS にて説明しています。
利用しているデバイスに上の問題の可能性がある場合 (お使いの Linux ディストリビューションではそのような問題がなかったとしても)
/sys/class
ディレクトリや /sys/block
ディレクトリ配下にある対応ディレクトリを探してください。
ビデオデバイスであれば /sys/class/video4linux/video
といったディレクトリです。
そしてそのデバイスを一意に特定する識別情報を確認してください。 (通常はベンダー名、プロダクトID、シリアル番号などです。)
X
udevadm info -a -p /sys/class/video4linux/video0
シンボリックリンクを生成するルールを作ります。
cat > /etc/udev/rules.d/83-duplicate_devs.rules << "EOF"
# Persistent symlinks for webcam and tuner
KERNEL=="video*", ATTRS{idProduct}=="1910", ATTRS{idVendor}=="0d81", SYMLINK+="webcam"
KERNEL=="video*", ATTRS{device}=="0x036f", ATTRS{vendor}=="0x109e", SYMLINK+="tvtuner"
EOF
こうしたとしても /dev/video0
と /dev/video1
はチューナーとウェブカメラのいずれかをランダムに指し示すことに変わりありません。
(したがって直接このデバイス名を使ってはなりません。) しかしシンボリックリンク /dev/tvtuner
と /dev/webcam
は常に正しいデバイスを指し示すようになります。