udev: Linuxカーネルのデバイス管理ツール
udevは、
Linuxカーネルにおいてデバイス管理の中核を担うツールです。主に`/dev`
ディレクトリ以下のデバイスノードを動的に管理するために利用されます。従来の
UNIXシステムでは、デバイスノードは`/dev`
ディレクトリに静的に作成されていましたが、udevはシステムに接続されているデバイスのみを動的に供給することで、より柔軟なデバイス管理を実現しています。
歴史
udevは
Linuxカーネルバージョン2.5で初めて登場しました。カーネルバージョン2.6.13からはuevent(イベントの一種)インターフェースの新しい版が導入され、udevも更新されました。このため、比較的新しいバージョンのudevを使用するシステムでは、カーネルバージョン2.6.13より古いカーネルでは起動できなくなっています。古いカーネルではudevを無効化し、従来の静的な`/dev`ノードを使用する必要があります。
概要
従来の
UNIXシステムでは、`/dev`
ディレクトリに静的にデバイスノードが作成されていましたが、
Linuxのudevはシステムに接続されているデバイスのみを動的に供給します。かつては`devfs`も同様の機能を提供していましたが、udevはその実装においていくつかの点で優れているとされています。
永続的なデバイス名: udevは、システムに接続された順番に依存しない永続的なデバイス名をサポートします。ストレージデバイスは、ファイルシステム固有のIDや、ディスクの名称、接続されているハードウェア上の物理的な位置(ATAのプライマリ/セカンダリ、マスター/スレーブなど)によって識別されます。
ユーザー空間での処理: `devfs`がカーネル空間で実行されるのに対し、udevの処理はユーザー空間で完結します。これにより、udevはカーネルの外で命名規則を定義でき、デバイスノード生成前にデバイスの特性からデバイス名を構成するプログラムを実行できます。
操作
udevは
Linuxシステム上でデーモンとして動作します。新しいデバイスがシステムに接続または初期化された場合、あるいはデバイスがシステムから取り外された場合、カーネルはnetlinkソケット経由でueventをudevに送信します。udevはこれを受信し、システムが提供するルールファイル(rulesファイル)に基づいて、イベント条件と発見されたデバイスの特性を照合します。ルールが一致した場合、デバイス名が決定され、デバイスノードが作成され、デバイスのセットアップが行われます。
ルールファイルは、カーネルサブシステム、カーネルデバイス名、デバイスの物理的な配置、またはデバイスの
シリアル番号などの特性に基づいてマッチングルールを構成します。また、ルールファイルを使用して、外部プログラムに情報を要求し、デバイス名を付けたり、システムが検出したデバイスの順序を無視して常に同じ名前を割り当てたりすることもできます。
かつて、udevはソケット経由でHALへイベントを送信し、デバイス固有の処理を実行していました。例えば、HALは
D-Bus IPCを通じてブロードキャストメッセージを送信し、新しいハードウェアが接続されたことを他のソフトウェアに通知していました。これにより、GNOMEや
KDEのような
デスクトップ環境では、USBフラッシュドライブやSDカードが挿入されると、自動的にファイルブラウザが起動し、デバイス内のファイルを開くことができました。
しかし、2011年頃から、
KDE、GNOME、Xfceなどの
デスクトップ環境を採用する
Linuxディストリビューションは、HALの採用を段階的に廃止し、
D-Busとの連携に移行しました。HALの機能はudev自体に統合されつつあり、一部は`udisks`や`upower`などの別のソフトウェアに分離されています。
アーキテクチャ
udevは以下の3つの部分で構成されています。
libudev: デバイスの情報にアクセスするためのライブラリ
udevd: ユーザー空間で動作し、仮想的な`/dev`を管理するデーモン
*
udevadm: 診断情報を出力するための管理コマンド
udevはnetlinkソケット経由でカーネルからの呼び出しを受けます。初期のバージョンでは、hotplugを使用していましたが、現在はudev自身へのリンクを追加しています。
開発者
udevはGreg Kroah-HartmanとKay Sieversによって開発されました。また、Dan Stekloffをはじめとする多くの貢献者が開発に参加しています。
脚注
kernel.orgのudev公式ページ
gitリポジトリ上の最新ソースコード
ケイ・シェバースによるudev開発状況
udevのrulesファイルについて
udevのrulesファイル作成の紹介
グレッグ・クロー=ハートマンによる論文「devfsのユーザー空間における実装」
PySDMストレージ管理ツールとrulesファイル作成ツール
デバイス管理入門
devtmpfsに関するLWN.netの記事
Gentoo udev ガイド
Arch Linuxのドキュメント
SourceForge.JP Magazine 掲載記事
HotPlug
udevとdevfs
udevの概要
libsysfs
最近のudev事情
sysfs再び