II-26-1. デバイスドライバの基本機能

組み込みアプリケーションにおける入出力設計の基礎を成すデバイスドライバの基本機能について解説する。デバイスドライバの基本的な構成と動作の概要を示し、プログラムとのインタフェースや割り込みの取り扱いなどを説明する。

【学習の要点】

* デバイスドライバはデバイスの複雑な動作を隠蔽するブラックボックスとして機能し、組み込みアプリケーションの入出力設計と密接に関連する。

* 一般的なUnix系OSにおけるデバイスドライバのAPIはread、write、ioctlなどに統一されている。

* デバイスは入出力のデータの扱いに応じてキャラクタデバイスとブロックデバイスに分類される。

図II-26-1. デバイスドライバの位置づけ

【解説】

1) デバイスドライバの機能と設計

* デバイスドライバは入出力を実行する機能をタスクから独立する形で実装したソフトウェアである。

* デバイスドライバはデバイスの複雑な動作を隠蔽し、アプリケーションから統一的なアクセスができるインタフェースを提供する。

2) デバイスドライバの動作モデル

デバイスドライバの主要な動作は以下に示す通りである。

* デバイスを初期化する。

* OSからのコマンドを解釈する。

* 複数の要求をスケジューリングする。

* データ転送を管理する。

* プロセスの割り込みを受け付ける。

* ドライバとカーネルのデータ構造の統合性を管理する。

3) アプリケーションプログラミングインタフェース(API)

* 近年のオペレーティングシステムでは、open, read, write, ioctl, closeなどのPOSIX(Portable Operating System Interface for UNIX)で定義されているAPIに統一化されていることが多い。

- Linuxの場合、デバイスドライバは/dev以下のファイルシステムに組み込まれているため、アプリケーションはファイルに対してopenなどの命令を発行することでデバイスドライバへの入出力準備を行うことになる。

- openシステムコールの後、デバイスファイルへのreadシステムコールを発行することによりデータを読み込むことができる。

4) Unix系OSにおけるデバイスドライバの分類

入出力の際にデータをどのような形式で扱うかによって、キャラクタデバイス、ブロックデバイスに分類される。

* キャラクタデバイス

- データを1バイトずつシーケンシャルにアクセスする。

- 端末、モデムなどが該当する。 (/dev/console, /dev/ttyS0など)

* ブロックデバイス

- データを固定長でランダムにアクセスする。ファイルシステムを構築できる。

- ブロックデバイス用のドライバは高速化処理などを含めるため、より複雑になる。

- ハードディスク、CD-ROMドライブなどが該当する。

* 他に、eth0, lo0, wlan0などで表現されるネットワークデバイスがある。

OSS Course Naviのコンテンツは IPA OSS モデルカリキュラムを基としています。