デバイスファイル
デバイスファイルは、通常のファイルと同じようにファイルシステム上に現れる、デバイスドライバに対するインターフェースです。このファイルのおかげで、ソフトウェアはデバイスドライバと相互作用することできます。これらのファイルは /dev ディレクトリ内にあります。
/dev ディレクトリ
多くの Linux ユーザは、/dev/sda1 はカーネルが認識した最初のディスクの最初のパーティションを指す最短の手段だということを知っています。これはとても平易でしょう。
しかし、USB や IEEE 1394、ホットスワップ可能な PCI などのホットプラグ対応デバイスを考えてみてください。最初のデバイスというのはこれらのうちどれのことでしょう? そして、いつまで最初のデバイスといえるのでしょう? 最初のデバイスが消えたとき、他のデバイスは何と名付けられるのでしょうか? それは進行中の処理に影響するでしょうか? 誰かが(たまたま最初のプリンターになっていた)レーザープリンターのプラグを引っこ抜いたというだけの理由で、印刷ジョブが高性能なレーザープリンターからほとんど壊れかけのマトリックスプリンターに突然移ってしまったとしたら、笑ってしまいませんか?
デバイスマネージャに入ってみましょう。今どきのデバイスマネージャならば必ず:
- ユーザスペースで動作します。
- 動的にデバイスファイルが生成されたり削除されたりします。
- 一貫したデバイス命名を行います。
- ユーザスペースのアプリケーション・プログラム・インターフェイス (API) を提供します。
デバイスの構造に変化が生じるたびにカーネルは uevent を発行し、デバイスマネージャがそれを受け取ります。それから、デバイスマネージャは /etc/udev/rules.d 、 /run/udev/rules.d および /lib/udev/rules.d ディレクトリで定義されたルールに従います。uevent 内に含まれている情報を元に実行する必要があるルール(群)を探し必要なアクションを行います。これらのアクションにはデバイスファイルの作成・削除も含まれており、また特定のファームウェアファイルのカーネルメモリへの読み込みも実行します。
インストール
Gentoo でのデバイスファイルは udev によって管理され、これは必要なあらゆるファイルのインストールを担っています。
udev の代替には以下のものがあります:
使い方
作成
それぞれの (内部または周辺機器の) デバイスは、対応するデバイスファイルを持っています。カーネルブート中に、カーネルはデバイスを検出して、仮想 devtmpfs ファイルシステムにデバイスファイルを作成します。その後、udev がデバイスファイルを奪い、/dev に保管します。それ以降は、udev が新しいデバイスファイルの作成と利用できなくなったデバイスファイルの削除を担当します。
udevadm を使用して情報を得ることができます:
udevadm info に続いてデバイスパスを指定すると、デバイスの情報を取得できます。
user $
udevadm info -p /devices/pci0000:00/0000:00:1d.7
パーミッション
他のファイルと同様に、デバイスファイルへのアクセスはファイルシステムのパーミッションによって制限されています。ユーザにデバイスファイルへのアクセス権を与えるには、以下が必要です:
- 対象のユーザを、デバイスファイルが属するグループに追加してください。
シンボリックリンク
udev は一部のデバイスクラスに対して、追加のシンボリックリンクを作成します。デバイスファイル /dev/cdrom (1 番目の CD-ROM ドライブ) と /dev/dvd (1 番目の DVD ドライブ) は、デバイスファイル /dev/sr0 (1 番目の光学ドライブ) への単なるシンボリックリンクです。これらのシンボリックリンクは、プログラムや設定ファイルの中で、他の通常のデバイスファイルとまったく同じように使用することができます。他の例を挙げると、入力デバイスのための /dev/input や、ストレージデバイスのための /dev/disk があります。
外部資料
- Managing Device Files - On Linux Sea by Sven Vermeulen
- K1SS — replace eudev with the device manager of your choosing