ナビゲーションリンクをスキップ | |
印刷ビューの終了 | |
デバイスドライバの記述 Oracle Solaris 11.1 Information Library (日本語) |
パート I Oracle Solaris プラットフォーム用デバイスドライバの設計
2. Oracle Solaris カーネルとデバイスツリー
_init() エントリポイント (SCSI HBA ドライバ)
_fini() エントリポイント (SCSI HBA ドライバ)
attach() エントリポイント (SCSI HBA ドライバ)
detach() エントリポイント (SCSI HBA ドライバ)
22. ドライバのコンパイル、ロード、パッケージ化、およびテスト
23. デバイスドライバのデバッグ、テスト、およびチューニング
このセクションでは、SCSI HBA ドライバに固有の問題について説明します。
SCSI HBA ドライバはリーフドライバと同様の方法でインストールされます。第 22 章ドライバのコンパイル、ロード、パッケージ化、およびテストを参照してください。両者の相違点は、add_drv(1M) コマンドではドライバクラスを SCSI として指定する必要があることです。次に例を示します。
# add_drv -m" * 0666 root root" -i'"pci1077,1020"' -c scsi isp
HBA デバイスのインスタンスへの接続時に、scsi_hba_attach_setup(9F) はその HBA インスタンス用の SCSI 構成プロパティーをいくつか作成します。特定のプロパティーが作成されるのは、HBA インスタンスにすでに接続されている同じ名前の既存のプロパティーがない場合のみです。この制限により、HBA 構成ファイル内のデフォルトのプロパティー値が上書きされなくなります。
HBA ドライバは、ddi_prop_get_int(9F) を使用して各プロパティーを取得します。次に、HBA ドライバはプロパティーのデフォルト値の変更または受け入れを行って、HBA ドライバに固有の操作を構成します。
scsi-reset-delay プロパティーは、SCSI バスまたは SCSI デバイスによるリセット遅延の回復時間をミリ秒単位で指定する整数です。
scsi-options プロパティーは、個別に定義されたビットを通じていくつかのオプションを指定する整数です。
SCSI_OPTIONS_DR (0x008) – 設定しない場合、HBA はターゲットデバイスに切り離しの特権を与えません。
SCSI_OPTIONS_LINK (0x010) – 設定しない場合、HBA はリンクされたコマンドを有効にしません。
SCSI_OPTIONS_SYNC (0x020) – 設定しない場合、HBA ドライバは同期データ転送のネゴシエーションを行いません。ドライバは、ターゲットによって開始された同期データ転送のネゴシエーションの試みを拒否します。
SCSI_OPTIONS_PARITY (0x040) – 設定しない場合、HBA はパリティーなしで SCSI バスを実行します。
SCSI_OPTIONS_TAG (0x080) – 設定しない場合、HBA はタグ付きコマンドキューイングモードで動作しません。
SCSI_OPTIONS_FAST (0x100) – 設定しない場合、HBA はバスを FAST SCSI モードで操作してはいけません。
SCSI_OPTIONS_WIDE (0x200) – 設定しない場合、HBA はバスを WIDE SCSI モードで操作してはいけません。
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
cmdk ディスク用のドライバなど、一部の x86 SCSI ターゲットドライバは、次の構成プロパティーを使用します。
disk
queue
flow_control
cmdk サンプルドライバを使用して x86 プラットフォーム用の HBA ドライバを作成する場合は、適切なプロパティーをすべて driver.conf(4) ファイルで定義する必要があります。
注 - これらのプロパティー定義は、HBA ドライバの driver.conf(4) ファイルにしか表示されません。HBA ドライバ自身は、これらのプロパティーを調べたり、解釈しようとしたりすることは決してありません。これらのプロパティーは助言にすぎず、cmdk ドライバの付属物として機能します。これらのプロパティーは決して信頼できるものではありません。これらのプロパティー定義は、将来のリリースで使用できない可能性があります。
disk プロパティーは、cmdk によってサポートされるディスクの種類を定義するために使用できます。SCSI HBA の場合、disk プロパティーに指定できるのは次の値のみです。
disk="scdk" – ディスクの種類は SCSI ディスクです
queue プロパティーは、strategy(9E) の実行中にディスクドライバが受信要求のキューをソートする方法を定義します。指定できる値は、次の 2 つがあります。
queue="qsort" – disksort(9F) が提供する、一方向のエレベータキューイングモデルです
queue="qfifo" – FIFO、つまり先入れ先出しのキューイングモデルです
flow_control プロパティーは、コマンドが HBA ドライバにトランスポートされる方法を定義します。指定できる値は、次の 3 つがあります。
flow_control="dsngl" – 1 つの HBA ドライバにつき 1 つのコマンド
flow_control="dmult" – 1 つの HBA ドライバにつき複数のコマンド。HBA キューが満杯になると、ドライバは TRAN_BUSY を返します。
flow_control="duplx" – HBA はキューごとに複数のコマンドを収容できる個別の読み取りキューと書き込みキューをサポートできます。書き込みキューには FIFO の順序付けが使用されます。読み取りキューに使用されるキューイングモデルは、queue プロパティーによって記述されます。HBA キューが満杯になると、ドライバは TRAN_BUSY を返します
次の例は、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;