Udev

udevとは、Linuxカーネル用のデバイス管理ツールである。主に/devディレクトリ以下のデバイスノードを管理するために利用する。以前/devディレクトリの管理を担っていた"devfsd"()と、ホットスワップやファームウェアのロードなどユーザー空間におけるデバイスのアクション全てを担っていた"hotplug"の後継ツールである。
歴史.
udevはLinuxカーネルバージョン2.5にて初めて登場した。
カーネルバージョン2.6.13からはuevent(イベントの一種)インタフェースの新しい版が導入され、更新された。このため、比較的新しいバージョンのudevを使用するシステムでは、バージョン2.6.13より古いカーネルではもはや起動できない。古いカーネルにおいてはudevを無効化し、古めかしい静的な/devノードを使用する必要がある。
概要.
/devディレクトリに静的にデバイスノードを作成する伝統的なUNIXシステムとは違い、Linuxのudevは実際にシステムに接続されているデバイスのノードのみを動的に供給する。devfsもかつて似たような機能を提供していたが、udevの支持者はdevfsよりも実装で優れているいくつかの理由に言及している:
操作.
udevは一般的なカーネルデバイス管理ツールである。Linuxシステム上のデーモンとして動作する。新しいデバイスがシステムに装着され初期化された場合、またはデバイスがシステムから接続を解除された場合、カーネルはソケット経由でueventsをudevに送信し、udevはこれを受信する。システムはイベント条件と発見したデバイスの特性に対しマッチするルール一式(rulesファイル)を供給する。マッチングルールにより、うまくいけばデバイス名が決定され、デバイスノードが実際に作成される。そして、プログラムとデバイスのセットアップを行う。
udevのrulesファイルはカーネルサブシステム、カーネルデバイス名、デバイスの物理的配置、またはデバイスのシリアル番号のような特性などによるマッチングルールで構成される。また、rulesファイルにより、デバイス名を付けたり、またはシステムによって発見されたデバイスの順番を無視し、常に同一の名前になるよう特別なデバイス名を付ける目的で、外部のプログラムに情報を要求することも可能である。
かつて、Linuxシステムにおけるudevは通常、よりデバイス固有の処理を実行する目的で、ソケット経由でHALへイベントを送信する方法を採用していた（以前はへもイベント送信可能であった）。例えば、HALはD-Bus IPCによるブロードキャストメッセージを関連するすべてのプロセスに送信することで、新しいハードウェアが装着されたことをシステムで稼働中の他のソフトウェアに通知する。この方法により、GNOMEやKDEのようなデスクトップ環境では、システムに新たにUSBフラッシュドライブやSDカードを装着すると、ファイルブラウズのためのソフトウェアが自動的に起動し、デバイスに存在するファイルをオープンすることができた。
2011年中盤頃から、とりわけKDE、GNOME、Xfce各デスクトップ環境を採用しているLinuxディストリビューションはHALの採用を段階的に廃止しD-Busとの連携のみとなっている。以前から存在したHALの機能はudev自身への統合を進めており、一部は"udisks"や"upower"など別のソフトウェアに分離されている。
アーキテクチャー.
udevは3つの部分から構成される:
udevはnetlinkソケット経由でカーネルからの呼び出しを受ける。初期のバージョンでは、hotplugを使用し、その目的で/etc/hotplug.d/defaultにudev自身へのリンクを追加していた。
作者.
udevはグレッグ・クロー＝ハートマン(Greg Kroah-Hartman)とケイ・シェバース(Kay Sievers)によって開発され、その他多くの貢献者、中でもDan Stekloffによる多くの貢献が含まれている。