2016年10月7日金曜日

udevとD-Bus

udev(User space DEVice managemnet)というのはLinuxの仕組みです。Linux OSのPCにデバイス(たとえばUSBマウスとか)をつないだとしましょう。すると/sysディレクトリ[1]以下に自動的にデバイス情報が作成されます。その情報を元に、udevd(udevデーモン)が/devディレクトリ以下にデバイスファイルを作成します。このデバイスファイルの作成の際には/etc/udev/rules.d以下の設定ファイルが使用されます。

余談ですが、この設定ファイルを編集すると、そのデバイスを任意の名前で扱うことができるようになります。例えば、つながっているUSBマウスをusbmouceという名前で扱いたいとき、/dev/usbmouceといった感じになります。

なぜ自動的に/sys以下にデバイス情報が作られること、またその/sysのデバイス情報を基に自動的にudevdが/dev以下にデバイスファイルを作ることがまるですごいことのように言われているのでしょうか。

実は、このような仕組みができる前、従来のLinuxでは使用するしないにかかわらず多数のデバイスファイルをあらかじめ/devディレクトリ以下に作っておくという方法を取っていました。また、デバイスが接続されても、もしそのデバイスのデバイスファイルがなかった場合、たとえカーネルがそのデバイスを認識していてもアプリケーションはそのデバイスは使用することができませんでした。

ところが、現在はデバイスのデバイス情報は/sysに自動的に作られますし、デバイスファイルも/dev以下に自動的に作られます。従来に比べればぐっと面倒が減ったわけですね。

この自動的にデバイス情報とデバイスファイルを作ってくれる新しい方式udevでは、D-Bus[2]という仕組みがデバイス情報をアプリケーションに送ります。このD-Busがデバイス情報をアプリケーションに送ることによって、アプリケーションがデバイスを使用することができるようになるわけですね。

[1] /sysディレクトリというのは/procディレクトリのような仮想的なファイルシステム
[2] D-Bus(Desktop Bus)はアプリケーション間でやりとりを行うためのシステム