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 ホストバスアダプタドライバ

ホストバスアダプタドライバの概要

SCSI インタフェース

SCSA HBA インタフェース

SCSA HBA エントリポイントの概要

SCSA HBA データ構造体

scsi_hba_tran() 構造体

scsi_address 構造体

scsi_device 構造体

scsi_pkt 構造体 (HBA)

ターゲットインスタンスごとのデータ

トランスポート構造体の複製

SCSA HBA 関数

HBA ドライバの依存性と設定に関する問題

宣言と構造体

コマンド別構造体

モジュール初期化用のエントリポイント

_init() エントリポイント (SCSI HBA ドライバ)

_fini() エントリポイント (SCSI HBA ドライバ)

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

attach() エントリポイント (SCSI HBA ドライバ)

detach() エントリポイント (SCSI HBA ドライバ)

SCSA HBA ドライバのエントリポイント

ターゲットドライバインスタンスの初期化

tran_tgt_init() エントリポイント

tran_tgt_probe() エントリポイント

tran_tgt_free() エントリポイント

資源割り当て

tran_init_pkt() エントリポイント

scsi_pkt(9S) 構造体の割り当てと初期化

DMA 資源の割り当て

データ転送のための DMA 資源の再割り当て

tran_destroy_pkt() エントリポイント

tran_sync_pkt() エントリポイント

tran_dmafree() エントリポイント

コマンドのトランスポート

tran_start() エントリポイント

割り込みハンドラとコマンドの完了

タイムアウトハンドラ

機能管理

tran_getcap() エントリポイント

tran_setcap() エントリポイント

中止およびリセット管理

tran_abort() エントリポイント

tran_reset() エントリポイント

tran_bus_reset() エントリポイント

tran_reset_notify() エントリポイント

動的再構成 (DR)

SCSI HBA ドライバに固有の問題

HBA ドライバのインストール

HBA の設定プロパティー

scsi-reset-delay プロパティー

scsi-options プロパティー

ターゲットごとの scsi-options

x86 ターゲットドライバの設定プロパティー

キューイングのサポート

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

20.  USB ドライバ

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

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

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

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

パート IV 付録

A.  ハードウェアの概要

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

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

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

索引

SCSI HBA ドライバに固有の問題

この節では、SCSI HBA ドライバに固有の問題について説明します。

HBA ドライバのインストール

SCSI HBA ドライバはリーフドライバと同様の方法でインストールされます。第 21 章ドライバのコンパイル、ロード、パッケージ化、およびテストを参照してください。両者の相違点は、add_drv(1M) コマンドではドライバクラスを SCSI として指定する必要があることです。次に例を示します。

# add_drv -m" * 0666 root root" -i'"pci1077,1020"' -c scsi isp

HBA の設定プロパティー

HBA デバイスインスタンスへの接続時に、scsi_hba_attach_setup(9F) はその HBA インスタンス用の SCSI 設定プロパティーをいくつか作成します。特定のプロパティーが作成されるのは、HBA インスタンスにすでに接続されている同じ名前の既存のプロパティーがない場合のみです。この制限により、HBA 設定ファイル内のデフォルトのプロパティー値が上書きされなくなります。

HBA ドライバは、ddi_prop_get_int(9F) を使用して各プロパティーを取得します。次に、HBA ドライバはプロパティーのデフォルト値の変更または受け入れを行って、HBA ドライバに固有の操作を設定します。

scsi-reset-delay プロパティー

scsi-reset-delay プロパティーは、SCSI バスまたは SCSI デバイスによるリセット遅延の回復時間をミリ秒単位で指定する整数です。

scsi-options プロパティー

scsi-options プロパティーは、個別に定義されたビットを通じていくつかのオプションを指定する整数です。

ターゲットごとの scsi-options

HBA ドライバは、次の形式でターゲットごとの scsi-options 機能をサポートできます。

target<n>-scsi-options=<hex value>

この例では、<n> はターゲット ID です。ターゲットごとの scsi-options プロパティーが定義されている場合、HBA ドライバは HBA ドライバインスタンスごとの scsi-options プロパティーではなく、この値を使用します。この方法では、特定のターゲットデバイス 1 つだけに対して同期データ転送を無効にする必要がある場合など、より厳密な制御を行うことができます。ターゲットごとの scsi-options プロパティーは、driver.conf(4) ファイルで定義できます。

次の例は、ターゲットデバイス 3 の同期データ転送を無効にするためのターゲットごとの scsi-options プロパティー定義を示しています。

target3-scsi-options=0x2d8

x86 ターゲットドライバの設定プロパティー

cmdk ディスク用のドライバなど、一部の x86 SCSI ターゲットドライバは、次の設定プロパティーを使用します。

cmdk サンプルドライバを使用して x86 プラットフォーム用の HBA ドライバを作成する場合は、適切なプロパティーをすべて driver.conf(4) ファイルで定義する必要があります。


注 - これらのプロパティー定義は、HBA ドライバの driver.conf(4) ファイルにしか表示されません。HBA ドライバ自身は、これらのプロパティーを調べたり、解釈しようとしたりすることは決してありません。これらのプロパティーは助言にすぎず、cmdk ドライバの付属物として機能します。これらのプロパティーは決して信頼できるものではありません。これらのプロパティー定義は、将来のリリースで使用できない可能性があります。


disk プロパティーは、cmdk によってサポートされるディスクの種類を定義するために使用できます。SCSI HBA の場合、disk プロパティーに指定できるのは次の値のみです。

queue プロパティーは、strategy(9E) の実行中にディスクドライバが受信要求のキューをソートする方法を定義します。指定できる値は、次の 2 つがあります。

flow_control プロパティーは、コマンドが HBA ドライバにトランスポートされる方法を定義します。指定できる値は、次の 3 つがあります。

次の例は、cmdk サンプルドライバ用に設計された x86 HBA PCI デバイスで使用する driver.conf(4) ファイルを示しています。

#
# config file for ISP 1020 SCSI HBA driver     
#
       flow_control="dsngl" queue="qsort" disk="scdk"
       scsi-initiator-id=7;