総合手引 | セクション 4 | English | オプション |
SCSI チェンジャをシステムに組み込む前に、SCSI アダプタを別途組み込んで おく必要があります。
ブート時に SCSI アダプタをプローブしているときに、 SCSI バスを走査しデバイスを探します。`Changer' タイプであると応答するデバイスが 見つかると、それらは ch ドライバに「アタッチ」されます。 2.1 より前のリリースの FreeBSD では、最初に見つかったデバイスが ch0 にアタッチされ、以後見つかったデバイスは順次、 ch1 などにアタッチされます。 2.1 から、あるデバイスがどの ch ユニットとして接続すべきかを指定 できるようになりました。このためのカーネル設定については、 scsi(4) を参照して下さい。
CHET_MT | |
メディア移動エレメント (ピッカ) | |
CHET_ST | |
ストレージエレメント (スロット) | |
CHET_IE | |
持ち込み/持ち出しエレメント (ポータル) | |
CHET_DT | |
データ転送エレメント (ドライブ) | |
次に示す ioctl(2) 呼び出しがチェンジャに適用されます。これらはヘッダファイル < sys/chio.h> で定義されます。
CHIOMOVE |
(struct changer_move)
これは、現在のピッカを用いて、メディアをあるエレメントから別の
エレメントに移動させます (MOVE MEDIUM)。移動元と移動先の
エレメントは、changer_move 構造体の中で指定します。この構造体は、
少なくとも次に示すフィールドを持ちます。
u_int cm_fromtype; /* 移動元エレメントのタイプ */ u_int cm_fromunit; /* 移動元エレメントの論理ユニット */ u_int cm_totype; /* 移動先エレメントのタイプ */ u_int cm_tounit; /* 移動先エレメントの論理ユニット */ u_int cm_flags; /* その他フラグ */cm_flags フィールドの CM_INVERT が設定されている場合、 メディアチェンジャは移動中にメディアを反転させるように指示されます。 |
CHIOEXCHANGE | |
(struct changer_exchange)
これは、移動元エレメントにあるメディアを最初の移動先エレメントに移動させ、
最初の移動先エレメントにあったメディアを 2 番目の移動先エレメントに
移動させます。単純な交換の場合、移動元と 2 番目の移動先とは同じである
必要があります。この操作の遂行に際し現在のピッカが用いられます。影響を
受けるエレメントのアドレスは、changer_exchange 構造体に含めて
ioctl に対して指定します。この構造体は少なくとも次の要素を持ちます。
u_int ce_srctype; /* 移動元エレメントのタイプ */ u_int ce_srcunit; /* 移動元の論理ユニット */ u_int ce_fdsttype; /* 最初の移動先エレメントのタイプ */ u_int ce_fdstunit; /* 最初の移動先の論理ユニット */ u_int ce_sdsttype; /* 2番目の移動先エレメントのタイプ */ u_int ce_sdstunit; /* 2番目の移動先の論理ユニット */ u_int ce_flags; /* その他フラグ */ce_flags の中で、CM_INVERT1 と CM_INVERT2 を設定 でき、これらはそれぞれ、最初のメディアと 2 番目のメディアを移動中に 反転させます。 この機能はテストしていません。 | |
CHIOPOSITION | |
(struct changer_position)
これは、現在のピッカを移動させ指定したエレメントの前に置きます。
エレメントは changer_position 構造体で指定します。これは少なくとも
次の要素を持ちます。
u_int cp_type; /* エレメントのタイプ */ u_int cp_unit; /* エレメントの論理ユニット */ u_int cp_flags; /* その他フラグ */cp_flags フィールドで CP_INVERT を設定でき、これは 移動中にピッカを反転させます。 | |
CHIOGPICKER | (int) これは、現在のピッカの論理アドレスを返します。 |
CHIOSPICKER | (int) これは、与えた論理アドレスが指すピッカを選択します。 |
CHIOGPARAMS |
(struct changer_params)
これは、メディアチェンジャの設定パラメータを返します。この ioctl は、
ユーザが渡した changer_params 構造体の、
少なくとも以下のフィールドを埋めます。
u_int cp_npickers; /* ピッカの数 */ u_int cp_nslots; /* スロットの数 */ u_int cp_nportals; /* 持ち込み/持ち出しポータルの数 */ u_int cp_ndrives; /* ドライブの数 */アプリケーションが CHIGSTATUS ioctl を用いてジュークボックスの 状態を調べるに先だって、ジュークボックスの諸元を問い合わせる際に、この 呼び出しを使用できます。 |
CHIOIELEM | これは、メディアチェンジャデバイスに対し、INITIALIZE ELEMENT STATUS 呼び出しを行ないます。これにより、メディアチェンジャは、ロードしている メディアに関する内部状態情報を更新させられます。チェンジャがラベルリーダを 持つ場合、バーコードラベルの走査もあわせて行ないます。この呼び出しでは、 ch ドライバの状態は影響を受けません。 |
CHIOGSTATUS |
(struct changer_element_status_request)
これは、メディアチェンジャデバイスに対し、READ ELEMENT STATUS
呼び出しを行ないます。この呼び出しはメディアチェンジャの
エレメント状態情報を読み込み、それを changer_element_status
構造体の配列に変換します。
CHIOGSTATUS の呼び出しごとに、あるタイプの 1 つ以上のエレメントの状態が 問い合わされます。 アプリケーションは changer_element_status_request 構造体を ch ドライバに渡します。この構造体は次に示すフィールドを持ちます。 u_int cesr_element_type; u_int cesr_element_base; u_int cesr_element_count; u_int cesr_flags; struct changer_element_status *cesr_element_status;ドライバはこの構造体を読み込み、タイプ、論理ベースアドレス、エレメント数 を決定し、cesr_element_status フィールドが指す changer_element_status 構造体の配列にどの情報を返すかを知ります。アプリケーションは、 cesr_element_count 個の状態構造体 (次を見て下さい) を保持するのに 十分な大きさのメモリを割り当てる必要があります。cesr_flags にオプションで CESR_VOLTAGS を設定し、ボリュームタグ (バーコード) 情報をジュークボックスから 読み込んで返す必要があることを通知できます。 cesr_element_base フィールドと cesr_element_count フィールドは、 チェンジャの物理的構成に照らして正当な値でなければなりません。もし 正当な値でない場合、 CHIOGSTATUS ioctl は EINVAL エラーコードを返します。 エレメントについての情報は、changer_element_status 構造体の配列の中に 返されます。この構造体は少なくとも次に示すフィールドを持ちます。 u_int ces_addr; /* メディアチェンジャのエレメントアドレス */ u_char ces_flags; /* 以下の CESTATUS の定義を参照 */ u_char ces_sensecode; /* エレメントの追加センスコード */ u_char ces_sensequal; /* 追加センスコード修飾子 */ u_char ces_invert; /* 反転ビット */ u_char ces_svalid; /* 移動元アドレス (ces_source) が有効 */ u_short ces_source; /* メディアの移動元アドレス */ changer_voltag_t ces_pvoltag; /* プライマリボリュームタグ */ changer_voltag_t ces_avoltag; /* 代替ボリュームタグ */ u_char ces_idvalid; /* ces_scsi_id が有効 */ u_char ces_scsi_id; /* エレメントの SCSI id (ces_idvalid が非 0 の場合) */ u_char ces_lunvalid; /* ces_scsi_lun が有効 */ u_char ces_scsi_lun; /* エレメントの SCSI lun (ces_lunvalid が非 0 の場合) */ces_addr フィールドは、メディアチェンジャの座標系で表した エレメントのアドレスを保持します。ドライバはこれを使用しません。 診断目的のみで使用して下さい。 ces_flags フィールドに対し、次に示すフラグが定義されます。 |
CESTATUS_FULL | メディアが存在します。 |
CESTATUS_IMPEXP | |
メディアを置いたのはオペレータです (ピッカが置いたものではありません)。 | |
CESTATUS_EXCEPT | |
そのエレメントは例外的状態 (例えば、バーコードラベルが不当な値、 バーコードがまだ走査されていない) にあります。 | |
CESTATUS_ACCESS | |
そのエレメントはピッカによってアクセス可能な状態です。 | |
CESTATUS_EXENAB | |
そのエレメントはメディア持ち出しをサポートしています。 | |
CESTATUS_INENAB | |
そのエレメントはメディア持ち込みをサポートしています。 | |
すべてのエレメントタイプに対しすべてのフラグが有効とは限らないことに 注意して下さい。
テストに利用できたデバイスが必要なコマンドをサポートしていないという 事実により、 ch ドライバがサポートする機能の多くは、完全にテストできていません。これは、 代替ボリュームタグ、メディア反転、エレメントの持ち込み/持ち出し操作、 複数ピッカ操作、その他の機能があります。
/dev/ch[0-9] | |
デバイスエントリ | |
FreeBSD | CH (4) | May 14, 1998 |
総合手引 | セクション 4 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.
“ | Never write it in C if you can do it in `awk'; Never do it in `awk' if `sed' can handle it; Never use `sed' when `tr' can do the job; Never invoke `tr' when `cat' is sufficient; Avoid using `cat' whenever possible. |
” |
— Taylor's Laws of Programming |