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

ドキュメントの情報

はじめに

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

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

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

3.  マルチスレッド

4.  プロパティー

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

6.  ドライバの自動構成

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

8.  割り込みハンドラ

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

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

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

12.  電源管理

13.  Oracle Solaris ドライバの強化

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

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

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

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

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

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

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

20.  USB ドライバ

21.  SR-IOV ドライバ

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

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

ドライバ開発のサマリー

ドライバコードの配置

ヘッダーファイル

ソースファイル

構成ファイル

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

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

モジュールの依存関係

ハードウェア構成ファイルの記述

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

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

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

ドライバ情報の更新

ドライバの削除

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

ドライバのパッケージ化

デバイステストの条件

構成のテスト

機能テスト

エラー処理

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

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

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

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

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

テープドライバのテスト

ディスクドライバのテスト

非同期通信ドライバ

ネットワークドライバのテスト

SR-IOV ドライバのテスト

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

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

パート IV 付録

A.  ハードウェアの概要

B.  Oracle Solaris DDI/DKI サービスのサマリー

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

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

E.  pci.conf ファイル

索引

ドキュメントの品質向上のためのご意見をください
簡潔すぎた
読みづらかった、または難し過ぎた
重要な情報が欠けていた
内容が間違っていた
翻訳版が必要
その他
Your rating has been updated
貴重なご意見を有り難うございました!

あなたの貴重なご意見はより良いドキュメント作成の手助けとなります 内容の品質向上と追加コメントのためのアンケートに参加されますか?

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

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

  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 コマンドでも、インストールされているデバイスドライバの別名を変更できます。

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

ドライバのソースファイルをそれぞれコンパイルし、得られたオブジェクトファイルをドライバモジュール内にリンクする必要があります。Oracle Solaris OS は Oracle Solaris Studio C コンパイラ、および Free Software Foundation, Inc. の GNU C コンパイラの両方と互換性があります。このセクションの例では、特に記載している場合を除いて、Oracle Solaris Studio C コンパイラを使用しています。Oracle Solaris Studio C コンパイラについては、『Oracle Solaris Studio 12.3: C ユーザーガイド』および Oracle Solaris Studio Documentation を参照してください。コンパイルおよびリンクオプションの詳細については、Oracle Solaris Studio 12.3 Command-Line Reference ドキュメントを参照してください。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) に対するすべての呼び出しを有効にすることができます。

表 22-1 SPARC および x86 64 ビットアーキテクチャーのコンパイラオプション

コンパイラ
SPARC 64
x86 64
Studio 9
cc -D_KERNEL -xarch=v9 -c xx.c
サポートされていません
Studio 10
cc -D_KERNEL -xarch=v9 -c xx.c
cc -D_KERNEL -xarch=amd64 -xmodel=kernel -c xx.c
Studio 11
cc -D_KERNEL -xarch=v9 -c xx.c
cc -D_KERNEL -xarch=amd64 -xmodel=kernel -c xx.c
Oracle Solaris Studio 12
cc -D_KERNEL -m64 -c xx.c
cc -D_KERNEL -m64 -xmodel=kernel -c xx.c

注 - Oracle Solaris Studio 12.2 またはそれより古いコンパイラを使って 32 ビットまたは 64 ビット x86 アーキテクチャー向けのコンパイルを行う場合は、デフォルト値が SSE2 なので、-xarch=sse2a を追加しないでください。



注意

注意 - x86 カーネルでは MMX 命令はサポートされません。MMX 命令を使用するとカーネルパニックが発生するため、使用しないようにしてください。


ドライバが安定したら、最適化フラグを追加して本稼働品質のドライバをビルドできます。Oracle Solaris Studio C コンパイラでの最適化に関する具体的な情報については、Oracle Solaris Studio 12.3 Command-Line Referencecc(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 にする必要があります。

x86 プラットフォームでは、ブートシステムによってデバイス情報が提供されるようになりました。非自己識別デバイスであっても、ハードウェア構成ファイルは不要となりました。

ハードウェア構成ファイルの詳細については、driver.conf(4)pseudo(4)sbus(4)scsi_free_consistent_buf(9F)、および update_drv(1M) のマニュアルページを参照してください。

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