4.2 デバイスドライバ
Linux Essentials Online Text | 2021/07/14

デバイスを利用するには、デバイスドライバが必要です。デバイスドライバとは、システムがそのデバイスを使用できるようにするための制御プログラムです。Linuxでは、カーネルモジュールとしてカーネルに組み込まれており、必要に応じてロードされ(読み込まれて)使用できるようになります。
デバイスドライバは、デバイスを動作させるためのOS用の説明書のようなもの、と思ってもらえればよいかと思います。

udev

Linuxにはudevという機能があります。udevはデバイス管理ツールで、/devのデバイスの管理を行なっており、カーネルが新しいデバイスを検知すると、そのデバイスに応じて適切なデバイスファイルを動的に作成します。

Linuxでデバイスを増設して使用するには、/devディレクトリにデバイスファイルを作成する必要があります。カーネルがデバイスを認識していたとしても、デバイスファイルが存在しなければOS上の各種アプリケーションはそのデバイスを扱うことができません。

udevは、/devディレクトリにデバイスファイルを作成するプログラムです。
コンピュータにデバイスを接続すると、カーネルが検知して/sysディレクトリにデバイス情報を作成します。udevは、/sysディレクトリへのアクセス権が無いため、/sysの中を確認することができませんが、仮想的に作成されたsysfsを通して /sysディレクトリを監視することができます。これによりudevは、/sysディレクトリに作成されたデバイス情報を元に、/devディレクトリにデバイスファイルを作成します。

なお、デバイスの情報はD-bus(Desktop bus)と呼ばれる機能によってアプリケーションに伝えられ、アプリケーションがそのデバイスを使用できるようになります。

ちなみに、udev動作は、/etc/udev/rules.dディレクトリにある設定ファイルによって制御されています。

USBデバイスの認識

udevはUSBデバイスのようなホットプラグやプラグアンドプレイに対応した機器にうってつけの機能です。

USB機器には、キーボードやマウス、光学ドライブや外付け記憶媒体(HDDやUSBメモリ等)、様々な周辺機器が存在しますが、これらのデバイスもOS上で動作させるには本来、デバイスドライバが必要です。

しかし、USBデバイスには特定のデバイス固有のデバイスドライバは必要ありません。

USB接続機器には「種別」があります。例えば、マウスやキーボードは「HID(Human Interface Devices)」、HDDやUSBメモリなら「MSC(Mass Storage Class)」というように、種別ごとにクラス分けされています。これを、USBデバイスクラスといいます。

この大別されたデバイスは挙動が似通っているため、汎用ドライバで動作させることができます。LinuxOSはUSBにおけるデバイスクラス毎に汎用ドライバが保持しているため、システムが接続した機器を認識して、デバイスクラスが判明した段階で自動的にクラスドライバが読み込こまれ、使用できるようになります。

つまり、USB機器が、コンピュータに接続すると勝手に認識して、勝手に使えるようになるのはUSBの汎用性もありますが、LinuxOS上でudevが動作していることが大きく影響しています。

<主なUSBデバイスクラス>

デバイスクラス名説明
AUDIOヘッドセット、モバイル機器、ドック、ゲーム機器、VR機器等
HID(Human Interface Devices)マウス、キーボード、ゲームコントローラ等。
MSC(Mass Storage Class)HDD、USBメモリ、CD/DVDデバイス
ACM(Comunication Device Class)モデム、TA等
PAGE TOP