EN JA
CAM(4)
CAM(4) FreeBSD Kernel Interfaces Manual CAM(4)

名称

CAM共通アクセスメソッド (Common Access Method) SCSI/ATA サブシステム

書式

device scbus
device ada
device cd
device ch
device da
device pass
device pt
device sa
options CAMDEBUG
options CAM_DEBUG_BUS=-1
options CAM_DEBUG_TARGET=-1
options CAM_DEBUG_LUN=-1
options CAM_DEBUG_COMPILE=CAM_DEBUG_INFO|CAM_DEBUG_CDB|CAM_DEBUG_PROBE
options CAM_DEBUG_FLAGS=CAM_DEBUG_INFO|CAM_DEBUG_CDB
options CAM_MAX_HIGHPOWER=4
options SCSI_NO_SENSE_STRINGS
options SCSI_NO_OP_STRINGS
options SCSI_DELAY=8000

解説

CAM サブシステムは、さまざまな SCSI と ATA デバイスを制御して、ホストアダプタドライバを通して異なる SCSI と ATA ホストアダプタを利用するためのドライバの実装のための均一でモジュール化されたシステムを提供しています。システムがバスをプローブ (調査) するとき、適切なドライバを見つけるどんなデバイスもアタッチします。 pass(4) ドライバがカーネルで設定されているなら、すべてのデバイスをアタッチします。

カーネルの設定

CAM サブシステムのための多くのジェネリックカーネル設定オプションがあります:
CAMDEBUG
このオプションは、すべての CAM デバッグの printf コードをコンパイルします。それ自体が含まれているときでも、実際になんのデバッグ情報も印刷しません。詳細に関して下記を参照してください。
CAM_MAX_HIGHPOWER=4
これは、同時 (並列) "high power"コマンドの最大許容数を設定します。 "high power"コマンドは、より多くの電力を必要とするコマンドです。この例は、 SCSI START UNIT コマンドです。ディスクを始動すると、しばしば通常の操作より多くの電力を必要とします。 SCSI ディスクの始動には、通常のディスクの操作よりかなり多くの電力をしばしば必要とします。このオプションで、コンピュータの電源の供給の負荷なしで同時にどのくらいの high power コマンドが発行できるかユーザが指定できるようにします。
SCSI_NO_SENSE_STRINGS
これは、それぞれの SCSI Additional Sense Code と Additional Sense Code Qualifier の組のテキスト記述を削除します。これがかなり大きいテキストデータベースであるので、それを削除するとカーネルのサイズは、いくらか減少します。これは、主としてブートフロッピと他の低ディスク空間か低メモリ空間環境で必要です。多くの場合、 SCSI エラーメッセージの解釈を促進するので、これは、有効にされるべきです。利用者は、"カーネル膨張"熱狂者にならないようにしてください -- 利用者のカーネルにおけるセンス (sense) 記述を残してください!
SCSI_NO_OP_STRINGS
これは、それぞれの SCSI オペコード (opcode) のテキスト記述を無効にします。上記のセンス (sense) 文字列オプションのように、このオプションは、主としてカーネルサイズが重要であるブートフロッピのような環境で役に立ちます。 SCSI 問題のデバッグを遅くするので、通常の使用のためにこのオプションを有効にするのは、推奨されません。
SCSI_DELAY=8000
これは、 SCSI "バスが安定するまでの遅延 (bus settle delay)"です。 CAM では、それは、古い SCSI レイヤで使われていたような秒単位ではなく、 ミリ秒 単位で指定されます。カーネルのブート時に、転送交渉と他の設定のデフォルト設定にそれ自体をリセットするように各デバイスに通知するために、それぞれの SCSI バスにバスリセットを送ります。ほとんどの SCSI デバイスは、バスリセットから復帰するのにいくらかの時間を必要とします。新しいディスクは、100ms くらい少ない時間しか必要としないかもしれませんが、古く遅いデバイスは、もっと長い時間を必要とするかもしれません。 SCSI_DELAY が指定されないなら、デフォルトは、2 秒です。 SCSI_DELAY のための最小許容値は、"100"、つまり 100ms です。 1 つの特別なケースは、 SCSI_DELAY が 0 に設定された場合、"可能な最も低い値"を意味してそれを受け取ります。その場合、 SCSI_DELAY は、100ms にリセットされます。

すべてのデバイスとバスは、動的な割り付けをサポートするので、デバイスとコントローラの上位の番号は、設定する必要はありません。 device da は、いくつものディスクドライバに十分です。

デバイスは、特定のデバイスユニットとして現れる wired (配線された) か、次の利用可能な未使用のユニットとして現れる counted (数えれた) のいずれかです。

ユニットは、カーネル環境ヒントを設定することによって配線ダウンされます。 (訳注: 配線ダウン, 意味不明。) これは、通常、 loader(8) から対話形式で行うか、または /boot/device.hints ファイルによって自動的に行われます。基本的な構文は、次の通りです:

hint.device.unit.property="value"

個々の CAM バス番号は、次と同様の設定行がある特定のコントローラに配線ダウンすることができます:

hint.scbus.0.at="ahd1"

これは、 CAM バス番号 0 を ahd1 ドライバインスタンスに割り当てます。 1 つ以上のバスをサポートしているコントローラについては、次のように特定のバスを割り当てることができます:

hint.scbus.0.at="ahc1" 
hint.scbus.0.bus="1"

これは、 CAM バス番号 0 を ahc0 上のバス 1 インスタンスに割り当てます。周辺機器ドライバは、次のように特定のバス、ターゲットおよび lun に配線ダウンすることができます:

hint.da.0.at="scbus0" 
hint.da.0.target="0" 
hint.da.0.unit="0"

これは、 da0 をターゲット 0、scbus 0 のユニット (lun) 0 に割り当てます。ターゲットかユニットのヒントを省略することは、ワイルドカードとしてそれらを取り扱うように CAM に指示して、最初のそれぞれの counted インスタンスを使用します。これらの例は、周辺機器が任意の特定のコントローラ、バス、ターゲット、そして/または、ユニットインスタンスに配線されるのを許すために一緒に結合することができます。

利用者が配線ダウンと counted デバイスの混合物を持っているとき、 counting は、特定のタイプのために最初の非配線ダウンユニットで始まります。すなわち、利用者が device da1 としてディスクの配線ダウンを持っているなら、最初の非配線ディスクは、 da2 として認識されることになります。

アダプタ

システムでは、共通のデバイスドライバは、多くの異なったタイプのアダプタで動作できます。アダプタは、上側のレイヤから要求を受け取って、 SCSI または ATA バスとシステムの間ですべての IO を行ないます。転送の最大サイズは、アダプタによって決定されます。ほとんどのアダプタは、1 つの操作で 64KB を転送できますが、多くのものは、よりはるかに多く転送できます。

ターゲットモード

いくつかのアダプタは、システムが別のシステムによって開始された操作に応じて、デバイスとして作動することができる ターゲットモード をサポートします。タゲットモードは、いくつかのアダプタのためにサポートされますが、 CAM SCSI サブシステムのこのバージョンにはまだ完全ではありません。

関連ファイル

他の CAM デバイスエントリを参照してください。

診断

XPT_DEBUG CCB は、カーネルにコンパイルされたオプションのリストからあらゆる特定のバス/デバイスでさまざまな量のトレース情報を有効にするために使用することができます。現在、コンパイルされ、使用される 7 つのデバッグフラグがあります:
CAM_DEBUG_INFO
このフラグは、問題となっているデバイスまたは複数のデバイスのための一般的な情報の printf を有効にします。
CAM_DEBUG_TRACE
このフラグは、関数レベルのコマンドのフロートレースを有効にします。すなわち、カーネルの printf は、さまざまな関数の入口と出口で起こります。
CAM_DEBUG_SUBTRACE
このフラグは、さまざまな関数への内部のデバッグ出力を有効にします。
CAM_DEBUG_CDB
このフラグによって、カーネルは、特定のデバイスまたは複数のデバイスに送られた ATA と SCSI コマンドをすべて印刷します。
CAM_DEBUG_XPT
このフラグは、コマンドのスケジューラトレースを有効にします。
CAM_DEBUG_PERIPH
このフラグは、周辺機器のドライバのメッセージを有効にします。
CAM_DEBUG_PROBE
このフラグは、デバイスプローブプロセスのトレースを有効にします。

これらのフラグのいくつか、中でも注目すべきは CAM_DEBUG_TRACECAM_DEBUG_SUBTRACE は、EXTREME 番号のカーネルの printf を作成します。

ユーザは、次のカーネル設定オプションを使用することによって、それらのカーネル設定ファイルからデバッグを有効にすることができます:

CAMDEBUG
これは、すべての可能な CAM デバッグをカーネルに構築します。
CAM_DEBUG_COMPILE
これによって、上に記述したデバッグフラグがカーネルに構築されるべきサポートを指定できます。ユーザが複数のデバッグレベルのための printf を見たいなら、フラグは、ともに論理和 (OR) することができます。
CAM_DEBUG_FLAGS
これによって、カーネル設定ファイルからのさまざまなデバッグフラグを設定することができます。
CAM_DEBUG_BUS
デバッグするバスを指定します。すべてのバスをデバッグするためには、これを -1 に設定します。
CAM_DEBUG_TARGET
デバッグするターゲットを指定します。すべてのターゲットをデバッグするためには、これを -1 に設定します。
CAM_DEBUG_LUN
デバッグする lun (論理ユニット番号) を指定します。すべての lun をデバッグするためには、これを -1 に設定します。

また、ユーザは、カーネルに必要なオプションを構築するなら、 camcontrol(8) ユーティリティを使用することによって、急いでデバッグを有効にすることができます。詳細については、 camcontrol(8) を参照して下さい。

歴史

CAM SCSI サブシステムは、 FreeBSD 3.0 ではじめて登場しました。 CAM ATA サポートは、 FreeBSD 8.0 で追加されました。

作者

CAM SCSI サブシステムは、 Justin GibbsKenneth Merry によって書かれました。 CAM ATA サポートは、 Alexander Motin <mav@FreeBSD.org>によって追加されました。
June 7, 2012 FreeBSD