JavaScript is required to for searching.
ナビゲーションリンクをスキップ
印刷ビューの終了
デバイスドライバの記述     Oracle Solaris 10 8/11 Information Library (日本語)
search filter icon
search icon

ドキュメントの情報

はじめに

パート I Solaris プラットフォーム用デバイスドライバの設計

1.  Solaris デバイスドライバの概要

デバイスドライバの基本

デバイスドライバとは

デバイスドライバのエントリポイントとは

デバイスドライバのエントリポイント

すべてのドライバに共通のエントリポイント

デバイスアクセスのエントリポイント

ロード可能なモジュールのエントリポイント

自動設定のエントリポイント

カーネル統計情報のエントリポイント

電源管理のエントリポイント

共通のエントリポイントのまとめ

ブロックデバイスドライバ用のエントリポイント

文字デバイスドライバ用のエントリポイント

STREAMS デバイスドライバ用のエントリポイント

メモリーマッピングされたデバイス用のエントリポイント

ネットワークデバイスドライバ用のエントリポイント

SCSI HBA ドライバ用のエントリポイント

PC カードドライバ用のエントリポイント

デバイスドライバの設計上の考慮事項

DDI/DKI の機能

デバイス ID

デバイスプロパティー

割り込み処理

コールバック関数

ソフトウェアの状態管理

プログラム式入出力デバイスアクセス

ダイレクトメモリーアクセス (DMA)

階層化ドライバインタフェース

ドライバコンテキスト

エラーの出力

動的メモリー割り当て

ホットプラグによる取り付け

2.  Solaris カーネルとデバイスツリー

3.  マルチスレッド

4.  プロパティー

5.  イベントの管理とタスクのキュー

6.  ドライバの自動設定

7.  デバイスアクセス: プログラム式入出力

8.  割り込みハンドラ

9.  ダイレクトメモリーアクセス (DMA)

10.  デバイスメモリーおよびカーネルメモリーのマッピング

11.  デバイスコンテキスト管理

12.  電源管理

13.  Solaris ドライバの強化

14.  階層化ドライバインタフェース (LDI)

パート II 特定の種類のデバイスドライバの設計

15.  文字デバイスのドライバ

16.  ブロックデバイスのドライバ

17.  SCSI ターゲットドライバ

18.  SCSI ホストバスアダプタドライバ

19.  ネットワークデバイスのドライバ

20.  USB ドライバ

パート III デバイスドライバの構築

21.  ドライバのコンパイル、ロード、パッケージ化、およびテスト

22.  デバイスドライバのデバッグ、テスト、およびチューニング

23.  推奨されるコーティング方法

パート IV 付録

A.  ハードウェアの概要

B.  Solaris DDI/DKI サービスの概要

C.  64 ビットデバイスドライバの準備

D.  コンソールフレームバッファードライバ

索引

デバイスドライバの基本

ここでは、Solaris プラットフォームでのデバイスドライバとそのエントリポイントについて説明します。

デバイスドライバとは

デバイスドライバとは、ハードウェアデバイスの低レベルの入出力操作を管理するカーネルモジュールのことです。デバイスドライバは、カーネルがデバイスとのインタフェースを取るために呼び出すことのできる標準的なインタフェースで書かれています。また、デバイスドライバをソフトウェア専用にして、RAM ディスク、バス、擬似端末など、ソフトウェアでのみ存在するデバイスをエミュレートすることもできます。

デバイスドライバには、デバイスとの通信に必要なデバイス固有のすべてのコードが含まれています。このコードには、システムの残りの部分へのインタフェースの標準セットが含まれています。このインタフェースは、システムコールインタフェースがアプリケーションプログラムをプラットフォーム固有の詳細から保護するように、カーネルをデバイス固有の詳細から遮蔽します。アプリケーションプログラムやカーネルの残りの部分では、デバイスに対応するためのデバイス固有のコードがたとえあったとしても、ほとんど必要ありません。このような点で、デバイスドライバはシステムの移植性を高め、システムの保守を容易にします。

Solaris オペレーティングシステム (Solaris OS) が初期化されると、デバイスは自らを識別し、デバイスの階層であるデバイスツリーに編成されます。実際には、デバイスツリーはカーネルのハードウェアモデルです。ツリー内では、個々のデバイスドライバは子を持たないノードで表されます。このようなノードは、リーフドライバと呼ばれます。ほかのドライバにサービスを提供するドライバはバスネクサスドライバと呼ばれ、子を持つノードで表されます。ブートプロセスの一環として、物理デバイスがツリー内のドライバにマップされるため、必要なときにそれらのドライバを特定できるようになります。Solaris OS によるデバイスへの対応の仕方についての詳細は、第 2 章Solaris カーネルとデバイスツリーを参照してください。

デバイスドライバは、入出力の処理方法によって分類されます。次の 3 つのカテゴリに大きく分けられます。

デバイスドライバのエントリポイントとは

エントリポイントとは、なんらかのドライバ機能を利用したり、デバイスを操作したりするために外部エンティティーから呼び出すことができるデバイスドライバ内の関数のことです。各デバイスドライバには、エントリポイントとして関数の標準セットが用意されています。すべてのドライバタイプ用のエントリポイントの一覧については、Intro(9E) のマニュアルページを参照してください。Solaris カーネルでは、次の一般的なタスク領域でエントリポイントを使用します。

各種デバイスのドライバには、デバイスが実行する処理の種類に応じてさまざまなエントリポイントのセットがあります。たとえば、メモリーマッピングされた文字処理型のデバイスは devmap(9E) エントリポイントをサポートしますが、ブロックドライバはこのエントリをサポートしません。

ドライバ関数に一意の名前を付けるには、ドライバの名前に基づく接頭辞を使用します。通常、この接頭辞はドライバの名前になります。たとえば、xx_open() はドライバ xxopen(9E) ルーチンを表しています。詳細は、「一意の接頭辞を使用してカーネルシンボルの衝突を回避する」を参照してください。このマニュアルの以降の例では、xx をドライバ接頭辞として使用します。