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 ターゲットドライバ

ターゲットデバイスの概要

Sun Common SCSI Architecture の概要

一般的な制御フロー

SCSA 関数

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

宣言とデータ構造体

scsi_device 構造体

scsi_pkt 構造体 (ターゲットドライバ)

SCSI ターゲットドライバの自動構成

probe() エントリポイント (SCSI ターゲットドライバ)

attach() エントリポイント (SCSI ターゲットドライバ)

detach() エントリポイント (SCSI ターゲットドライバ)

getinfo() エントリポイント (SCSI ターゲットドライバ)

資源割り当て

scsi_init_pkt() 関数

scsi_sync_pkt() 関数

scsi_destroy_pkt() 関数

scsi_alloc_consistent_buf() 関数

scsi_free_consistent_buf() 関数

コマンドの構築とトランスポート

コマンドの構築

ターゲット機能の設定

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

同期 scsi_transport() 関数

コマンドの完了

パケットの再利用

自動要求検知モード

ダンプの処理

SCSI オプション

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

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

20.  USB ドライバ

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

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

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

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

パート IV 付録

A.  ハードウェアの概要

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

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

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

索引

Sun Common SCSI Architecture の概要

Sun Common SCSI Architecture は、ターゲットドライバからホストバスアダプタドライバに SCSI コマンドを転送するための Solaris DDI/DKI プログラミングインタフェースです。このインタフェースは、ホストバスアダプタのハードウェアの種類、プラットフォーム、プロセッサのアーキテクチャー、およびインタフェース上でトランスポートされる SCSI コマンドには依存しません。

SCSA に準拠することで、ターゲットドライバはホストバスアダプタのハードウェア実装を認識することなく、SCSI コマンドをターゲットデバイスに渡すことができます。

概念上、SCSA は SCSI コマンドを構築することと、SCSI バスをまたいでデータとともにコマンドをトランスポートすることを区別しています。このアーキテクチャーは、高レベルと低レベルのソフトウェアコンポーネントの間のソフトウェアインタフェースを定義しています。高レベルソフトウェアコンポーネントは、1 つ以上の SCSI ターゲットドライバによって構成されます。このドライバは、I/O 要求を周辺デバイスにとって適切な SCSI コマンドに変換します。次の例に、SCSI のアーキテクチャーを示します。

図 17-1 SCSA ブロック図

image:図は、オペレーティングシステム内での、SCSI ドライバに関連する Sun Common SCSI Architecture の役割を示しています。

下位レベルのソフトウェアコンポーネントは、SCSA インタフェース層と、1 つ以上のホストバスアダプタドライバから構成されています。ターゲットドライバは、必要な機能を実行するために必要とされる適切な SCSI コマンドの生成と、結果の処理を行います。

一般的な制御フロー

トランスポートエラーが発生しないと仮定すると、読み込みまたは書き込み要求の一般的な制御フローは、次に説明するステップのようになります。

  1. ターゲットドライバの read(9E) または write(9E) エントリポイントが呼び出されます。メモリをロックダウンするために physio(9F) が使用され、buf 構造体の準備と strategy ルーチンの呼び出しが行われます。

  2. ターゲットドライバの strategy(9E) ルーチンが要求をチェックします。strategy() は次に、scsi_init_pkt(9F) を使用して、scsi_pkt(9S) を割り当てます。ターゲットドライバはパケットを初期化し、scsi_setup_cdb(9F) 関数を使用して、SCSI コマンド記述子ブロック (CDB) を設定します。ターゲットドライバはタイムアウトも指定します。次に、ドライバはコールバック関数へのポインタを提供します。コールバック関数は、コマンドの完了時にホストバスアダプタドライバによって呼び出されます。buf(9S) ポインタは SCSI パケットのターゲット専用領域に保存される必要があります。

  3. ターゲットドライバは scsi_transport(9F) を使用して、パケットをホストバスアダプタドライバに送信します。これでターゲットドライバは解放され、別の要求を受け入れることができます。ターゲットドライバは、パケットのトランスポート中にパケットにアクセスしてはいけません。ホストバスアダプタドライバまたはターゲットのいずれかがキューイングをサポートしている場合は、パケットのトランスポート中に新しい要求を送信できます。

  4. SCSI が解放され、ターゲットがビジー状態でなくなるとすぐに、ホストバスアダプタドライバはターゲットを選択して CDB を渡します。ターゲットドライバはコマンドを実行します。ターゲットは次に、要求されたデータ転送を実行します。

  5. ターゲットが完了状態を送信してコマンドが完了すると、ホストバスアダプタドライバはそれをターゲットドライバに通知します。通知を実行するため、ホストは SCSI パケットで指定されていた完了関数を呼び出します。この時点で、ホストバスアダプタドライバはパケットの処理を担当しておらず、ターゲットドライバがパケットの所有権を再取得しています。

  6. SCSI パケットの完了ルーチンが、返された情報を分析します。完了ルーチンは次に、SCSI 操作が成功したかどうかを判定します。エラーが発生した場合、ターゲットドライバはもう一度 scsi_transport(9F) を呼び出して、コマンドを再試行します。ホストバスアダプタドライバが要求の自動検知をサポートしていない場合、ターゲットドライバは要求検知パケットを送信して、チェック条件に該当する場合に検知データを取得する必要があります。

  7. 正常に完了したあと、またはコマンドを再試行できない場合、ターゲットドライバは scsi_destroy_pkt(9F) を呼び出します。scsi_destroy_pkt() は、データを同期します。次に scsi_destroy_pkt() はパケットを解放します。パケットを解放する前にターゲットドライバがデータにアクセスする必要がある場合は、scsi_sync_pkt(9F) が呼び出されます。

  8. 最後に、ターゲットドライバは要求元アプリケーションに、読み取りまたは書き込みトランザクションが完了したことを通知します。この通知は、文字デバイスの場合、ドライバ内の read(9E) エントリポイントから通知が返されることによって行われます。それ以外の場合、通知は biodone(9F) を通して間接的に行われます。

SCSA によって、これらの操作の多くをプロセスのさまざまな時点で、オーバーラップとキューイングの両方の方法で実行できます。このモデルでは、ホストバスアダプタドライバでシステムリソースの管理が行われます。ソフトウェアインタフェースによって、さまざまな機能レベルの SCSI バスアダプタを使用して、ホストバスアダプタドライバでターゲットドライバ関数を実行できます。

SCSA 関数

SCSA では、資源の割り当てと解放、制御状態の検知と設定、SCSI コマンドのトランスポートを管理する関数が定義されています。次の表にこれらの関数を示します。

表 17-1 SCSA 標準関数

関数名
カテゴリ
エラー処理
トランスポートの情報と制御
資源管理
ポーリングが行われる入出力
プローブ関数
CDB 初期化関数
コマンドのトランスポート

注 - ドライバで SCSI-1 デバイスを操作する必要がある場合は、makecom(9F) を使用します。