アスタリスク インフラTECH wiki

udev

最終更新:

ootaka

- view
メンバー限定 登録/ログイン
かつては、利用される可能性のある数千のデバイスファイルを/dev以下にあらかじめ用意しておく必要が
あったが、現在では、必要に応じてudevがsysfsと連携して、動的にデバイスファイルを管理するようになっている。

ハードウェアが接続されると、カーネルがそれを検知し、カーネル情報を監視しているudevdデーモンが必要なデバイスファイルを
動的に作成する。つまり、実際にカーネルが認識しているハードウェアに対応するデバイスファイルのみが用意されることになる。

udevはユーザ空間で動作するプロセスである。ユーザ空間とカーネル空間は分離されているので、アプリケーションはカーネル内部の情報に
直接アクセスできない。そこでudevはsysfsから情報を得ている。susfsは、カーネル内部情報をファイルシステムの形で投影する仕組みで、
/sysディレクトリ以下から、システムに接続されているデバイスの情報を得ることができる。
そういった用途には従来procfsが使われてきたが、もともとprocfsはプロセス情報を管理する仕組みなので、今後はカーネル情報についてはsysfsに移行していくだろう。

新しいデバイスをカーネルが認識すると、udevdはsysfsの情報を元に、必要なデバイスファイルを作成する。
その際に参照される設定ファイルは/etc/udev/rules.dディレクトリ以下にある。

$ ls /etc/udev/rules.d
05-udev-early.rules   60-pcmcia.ules  90-dm.rules
40-multipath.rules    60-raw.rules    90-hal.rules
50-udev.rules         60-wacom.rules  95-pam-console.rules

ファイル名が数字で始まっているが、番号の若い者から順に適用されることになっている。
ファイルの内容は以下のとおり。

■/etc/udev/rules.d/50-udev.rulesの例
KERNEL=="tty",             NAME="%k",    GROUP="tty",   MODE="0666",
OPTIONS="last_rule"

これはカーネルが「tty」というデバイス名を認識した場合、所有グループをtty、パーミッションを0666としてデバイスファイルを作成する、というルールである。
「last_rule」は、ほかにも条件にマッチするルールが見つかっても、そちらのルールは適用しない、という意味である。
%kはカーネルから伝えられた名前に置き換えられる。

■/etc/udev/rules.d/50-udev.rulesの例2
KERNEL=="mice", NAME="input/%k"
KERNEL=="mouse*",     NAME="input/%k" 

これは、カーネルの認識したデバイス名が「mice」「mouse*」であれば、デバイスファイルは/dev/input/mice などで作成する、というルールである。

■/etc/udev/rules.d/50-udev.rulesの例3
KERNEL=="ram1", SYMLINK+="ram"

これは、/dev/ramは/dev/ram1のシンボリックリンクとるする、というルールである。
KERNELなどに指定するパラメータ、つまりsysfsがどのようにデバイスを扱っているかと言う情報は、udevinfoコマンドで調べることが出来る。
人気記事ランキング
目安箱バナー