LPIC-2 - 201試験 - 203:ファイルシステムとデバイス - 203.4 udevでのデバイス管理

Last Update : September 18 2014 21:34:18

     

a. udevの概要

udev(userspace device management)とは、カーネルがパソコンへの接続を検出したデバイスに対して、動的に「デバイス・ファイル」を作成して割り当てるための仕組みです。
udev では、udevdというデーモンがカーネルの内部情報を監視しており、カーネルが新たな周辺機器を検知すれば、その機器に応じたデバイスファイルを動的に作成することができます。最近のLinuxではこの仕組みを用いて、あらかじめすべてのデバイスファイルを用意するのではなく、実際に接続されてカーネルが認識している周辺機器用のデバイスファイルのみを動的に生成できるようになっています。

Linuxは、システムに存在するあらゆるリソースをファイルとして扱うという特徴を持っています。デバイス・ファイルとは、周辺機器などのデバイスをファイルとして扱えるようにしたもので、/devディレクトリの下に格納されています。

例えばマウスなら、/dev/input/miceといった名前のデバイス・ファイルが用意されています。デバイス・ファイルもファイルの一種なので、基本的に通常のファイルと同じように扱えます。ファイルの中身を表示するcatコマンドを使えば、マウスから入力された情報が画面に表示されるという具合です。逆に、デバイス・ファイルに対して書き込みをすることで、周辺機器を操作することも可能です。

最近は、USB機器のように、ユーザーがシステム起動後に任意のタイミングで抜き挿し可能なタイプのデバイスが増えています。昔のLinuxでは、接続したい機器に対して、あらかじめデバイス・ファイルを用意しておくなどの作業が必要でした。udevを利用すれば、こうした煩わしさから開放され、周辺機器をより柔軟に利用可能になります。

udevを使うには、どの周辺機器が接続されたら(カーネルから通知があったら)、どんなデバイス・ファイルを作るかという「対応付けルール」(udev rules)を定めた設定ファイルを作成する必要があります。設定ファイルは、/etc/udev/rules.d以下などに、「50-udev.rules」という形式のファイル名で保存されています。
udevの挙動を設定するには、/etc/udev/rules.d/以下にユーザー定義のルール記述ファイルを作成します。

最近のLinuxでは、デバイスの存在を認識したり、 デバイスがなくなったりしたときに、netlink を介して、 ユーザにその旨を通知してくれるようになりました。
udev は、そのカーネルからのメッセージを受けて、 デバイスファイルを作成したり消去したりします。 今までのように手動で作成する必要がなくなります。
今までは、使用する可能性のあるデバイスファイルが、 /dev の下に全部存在していましたが、udev が導入されてからは、 実在するデバイスだけが /dev の下に存在します。 今現在コンピュータに接続されているデバイスが簡単にわかります。
ちなみに、これらの処理を、udevd というデーモンが行います。

$ ps -C udevd PID TTY TIME CMD 358 ? 00:00:00 udevd

udevd は、/etc/udev/rules.d/ の下にある設定ファイルにしたがって、 デバイスファイルを作成したり、必要なコマンドを実行したりします。

このルール記述ファイルは、「こんなデバイスをこんな名前のデバイス・ファイルとして/dev/以下で扱えるようにします」という割り当てが記述されています。

udevは新しいデバイスの接続を認識すると、/etc/udev/rules.d/というフォルダと/lib/udev/rules.d/というフォルダ(後者にはシステム定義のルール記述ファイルが格納されている)の中のルール記述ファイルを調べていき、「こんなデバイス」という条件に合致したら、そのルールにしたがってデバイス・ファイル名をデバイスに割り当てます。
そのとき、このルール記述ファイルを調べていく順番は、辞書順である。つまり、50-〇〇.rulesというファイルよりも10-〇〇.rulesというファイルのほうが先にチェックされる。ユーザー定義のルールは先に適応されてほしいことが多いため、若い番号をルールファイルの名前の先頭に記述します。また、.rulesという拡張子を付けておかないと、ルールファイルと認識されません。


b. udevのルール設定

udevのルールファイルは/etc/udev/rules.dディレクトリにまとめられています。
udevのルールファイルはこのように先頭に2ケタの数字を付けたファイル名になっており、番号の小さいファイルのルールから順に適用されるようになっています。 udevのルールは後述する"last_rule" オプションなどを指定しない限りすべてのルールが適用されるようになっており、1つの周辺機器に対して異なるルールファイルがそれぞれ別のデバイスファイルを作成することもあります。
それでは実際のファイルを眺めてみましょう。

# cat -n /etc/udev/rules.d/05-udev-early.rules
# do not edit this file, it will be overwritten on update # sysfs is populated after the event is sent ACTION=="add", KERNEL=="[0-9]*:[0-9]*", SUBSYSTEM=="scsi", WAIT_FOR_SYSFS="ioerr_cnt"

udevのルールファイルも他の多くの設定ファイル同様、#から行末まではコメントと見なされるので、05-udev-early.rulesの実際のルールは最後の1行だけです。

udevのルールファイルは‘==’で条件を記述し、‘=’で条件に記述した際の動作を記述するようになっています。複数の条件を並べるとそれらが順に適用され、より細かい条件に絞り込むことも可能です。

ACTION, KERNEL, SUBSYSTEMというのはカーネルから通知される情報に対する条件で、ACTION が周辺機器の着脱について、KERNEL がカーネルが認識している周辺機器の名前について、SUBSYSTEM がカーネル内部のサブシステムの部位について、それぞれ一致するかどうかをチェックします。

上記の例では「周辺機器が新しく接続(カーネルに認識)された際(ACTION=="add")」、「その機器の名前をカーネルが0から9までの数字とコロン(:)のみで認識し(KERNEL=="[0-9]*:[0-9]*")」、「その機器を扱うのがSCSIサブシステムならば(SUBSYSTEM=="scsi")」、「その機器用に定義されているioerr_cntのタイミング分、SYSFS の動作待ちをする(WAIT_FOR_SYSFS="ioerr_cnt")」という意味になります。このルールはカーネルに認識されたSCSIデバイスが反応を返すようになるまでの時間待ち用です。


z. 出題範囲概要

●主要な知識範囲
udevルール
カーネルのインターフェイス
●重要なファイル、用語、ユーティリティ
udevmonitor /etc/udev


  [ 例題 ] 
  1. 201:203.4 問01  udev
  2. 201:203.4 問02  udev


     

www.it-shikaku.jp