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

ドキュメントの情報

はじめに

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

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

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.  ドライバのコンパイル、ロード、パッケージ化、およびテスト

ドライバ開発の概要

ドライバコードの配置

ヘッダーファイル

ソースファイル

設定ファイル

ドライバインストールの準備

ドライバのコンパイルとリンク

モジュールの依存関係

ハードウェア設定ファイルの記述

ドライバのインストール、更新、および削除

モジュールディレクトリへのドライバのコピー

add_drv を使用したドライバのインストール

ドライバ情報の更新

ドライバの削除

ドライバのロードとアンロード

ドライバのパッケージ化

パッケージのインストール後処理

パッケージの削除前処理

デバイステストの条件

設定のテスト

機能テスト

エラー処理

ロードとアンロードのテスト

ストレス、パフォーマンス、および相互運用性のテスト

DDI/DKI コンプライアンスのテスト

インストールとパッケージ化のテスト

特定の種類のドライバのテスト

テープドライバ

ディスクドライバ

非同期通信ドライバ

ネットワークドライバ

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

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

パート IV 付録

A.  ハードウェアの概要

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

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

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

索引

ドライバインストールの準備

ドライバのインストールの前に次の手順があります。

  1. ドライバをコンパイルします。

  2. 必要に応じて設定ファイルを作成します。

  3. 次のいずれかの方法で、システムでドライバモジュールが識別されるようにします。

    • ドライバの名前を、デバイスノードの名前と一致させます。

    • add_drv(1M) または update_drv(1M) を使用して、システムにモジュール名を通知します。

システムは、ドライバモジュールの名前と dev_info ノードの名前の間に 1 対 1 の関連付けを維持します。たとえば、mydevice という名前のデバイスの dev_info ノードについて考えます。デバイス mydevice は、同様に mydevice という名前のドライバモジュールによって処理されます。mydevice モジュールは、モジュールのパス内にある drv という名前のサブディレクトリに置かれます。32 ビットカーネルを使用している場合、モジュールは drv/mydevice 内にあります。64 ビット SPARC カーネルを使用している場合、モジュールは drv/sparcv9/mydevice 内にあります。64 ビット x86 カーネルを使用している場合、モジュールは drv/amd64/mydevice 内にあります。

STREAMS ネットワークドライバの場合、ドライバ名が次の制約を満たしている必要があります。

ドライバで、異なる名前を持つ dev_info ノードを管理する必要がある場合は、add_drv(1M) ユーティリティーで別名を作成できます。-i フラグでは、ドライバで処理するほかの dev_info ノードの名前を指定します。update_drv コマンドでも、インストールされているデバイスドライバの別名を変更できます。

ドライバのコンパイルとリンク

ドライバのソースファイルをそれぞれコンパイルし、得られたオブジェクトファイルをドライバモジュール内にリンクする必要があります。Solaris OS は Sun Studio C コンパイラ、および Free Software Foundation, Inc. の GNU C コンパイラの両方と互換性があります。この節の例では、特に記載している場合を除いて、Sun Studio C コンパイラを使用しています。Sun Studio C コンパイラについては、Sun Developer Network Web サイトで、『Sun Studio 12: C ユーザーズガイド』と、Sun Studio のドキュメントを参照してください。コンパイルとリンクのオプションの詳細については、『Sun Studio Man Pages 』を参照してください。GNU C コンパイラは /usr/sfw ディレクトリにあります。GNU C コンパイラについては、http://gcc.gnu.org/ を参照するか、/usr/sfw/man のマニュアルページを調べてください。

下の例は、2 つの C ソースファイルを持つ xx という名前のドライバを示しています。xx という名前のドライバモジュールが生成されます。この例で作成されるドライバは 32 ビットカーネル用です。ドライバが持つオブジェクトモジュールが 1 つだけであっても ld -r を使用する必要があります。

% cc -D_KERNEL -c xx1.c
% cc -D_KERNEL -c xx2.c
% ld -r -o xx xx1.o xx2.o

このコードがカーネルモジュールを定義していることを示すため、_KERNEL シンボルが定義されている必要があります。ドライバの private シンボルを除き、ほかのシンボルが定義されていてはいけません。DEBUG シンボルを定義すると、ASSERT(9F) に対するすべての呼び出しを有効にすることができます。

Sun Studio 9、Sun Studio 10、または Sun Studio 11 を使用して 64 ビット SPARC アーキテクチャー向けにコンパイルする場合は、-xarch=v9 オプションを使用します。

% cc -D_KERNEL -xarch=v9 -c xx.c

Sun Studio 12 を使用して 64 ビット SPARC アーキテクチャー向けにコンパイルする場合は、-m64 オプションを使用します。

% cc -D_KERNEL -m64 -c xx.c

Sun Studio 10 または Sun Studio 11 を使用して 64 ビット x86 アーキテクチャー向けにコンパイルする場合は、-xarch=amd64 オプションと -xmodel=kernel オプションの両方を使用します。

% cc -D_KERNEL -xarch=amd64 -xmodel=kernel -c xx.c

Sun Studio 12 を使用して 64 ビット x86 アーキテクチャー向けにコンパイルする場合は、-m64 オプション、-xarch=sse2a オプション、および -xmodel=kernel オプションを使用します。

% cc -D_KERNEL -m64 -xarch=sse2a -xmodel=kernel -c xx.c

注 - Sun Studio 9 は 64 ビット x86 アーキテクチャーをサポートしていません。64 ビット x86 アーキテクチャー用ドライバのコンパイルとデバッグを行うには、Sun Studio 10、Sun Studio 11、または Sun Studio 12 を使用します。


ドライバが安定したら、最適化フラグを追加して本稼働品質のドライバをビルドできます。Sun Studio C コンパイラでの最適化の具体的な情報については、『Sun Studio Man Pages 』cc(1) のマニュアルページを参照してください。

グローバル変数は、デバイスドライバ内では volatile として処理する必要があります。volatile タグについては、「変数の volatile 宣言」で詳細に説明します。このフラグの用途はプラットフォームに応じて異なります。マニュアルページを参照してください。

モジュールの依存関係

ドライバモジュールが別のカーネルモジュールによってエクスポートされたシンボルに依存している場合、ローダー ld(1)-dy および -N オプションによって依存関係を指定できます。ドライバが misc/mySymbol によってエクスポートされたシンボルに依存している場合、下の例を使用してドライババイナリを作成する必要があります。

% ld -dy -r -o xx xx1.o xx2.o -N misc/mySymbol

ハードウェア設定ファイルの記述

デバイスが自己識別型でない場合、カーネルのために、そのデバイスのハードウェア設定ファイルが必要です。ドライバの名前が xx の場合、ドライバのハードウェア設定ファイルの名前は xx .conf にする必要があります。ハードウェア設定ファイルの詳細については、driver.conf(4)pseudo(4)sbus(4)scsi_free_consistent_buf(9F)、および update_drv(1M) のマニュアルページを参照してください。

ハードウェア設定ファイルでは任意のプロパティーを定義できます。設定ファイル内のエントリは、property= value という形式です。property はプロパティー名で、value はプロパティーの初期値です。設定ファイルを使うアプローチでは、プロパティー値を変更することでデバイスの設定が可能です。