Linuxのデバイス周りの仕組みに関して

 カーネル・デバイスファイル・ドライバの関係がよくわからないため状況の整理のためにまとめてみました。

カーネルモジュールとしてのデバイスドライバ

 Linux上でデバイス(モニタ・ドライバ・マウスなど)を用いるには、デバイスドライバ(デバイスを利用するのに必要な制御プログラム)が必要となる。デバイスドライバカーネルモジュールとして提供される(蛇足だが、Linuxカーネルソースの多くはデバイスドライバであるらしい)。

 そのため新しいデバイス(例えば新しいNICなど)を用いる場合は、ここのようにデバイスドライバコンパイルしてカーネルモジュールを作成し、カーネルにそれをロードする必要がある。

Linuxのデバイスファイル

 デバイスにアクセスする際にはハードウェアを直接操作するのではなく、デバイスファイルを介してアクセスする。デバイスファイルへの書き込みは出力を、読み込みはデバイスからの出力に相当する。 

 プログラムからこれらのファイルに対してopen()などのシステム・コールを用いてアクセスすると、、カーネル内に組み込まれたデバイス・ドライバが呼び出され、ファイルの替わりにデバイスにアクセスします。