ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 10 8/11 Information Library (日本語) |
ドライバのインストールの前に次の手順があります。
ドライバをコンパイルします。
必要に応じて設定ファイルを作成します。
次のいずれかの方法で、システムでドライバモジュールが識別されるようにします。
ドライバの名前を、デバイスノードの名前と一致させます。
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 ネットワークドライバの場合、ドライバ名が次の制約を満たしている必要があります。
英数字 (a-z、A-Z、0-9) と下線 ('_') のみを使用できます。
名前の最初と最後の文字はどちらも数字にすることができません。
名前の長さは 16 文字を超えることはできません。推奨される名前の長さは 3 文字から 8 文字の範囲です。
ドライバで、異なる名前を持つ 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 はプロパティーの初期値です。設定ファイルを使うアプローチでは、プロパティー値を変更することでデバイスの設定が可能です。