SCSI はコマンドの集まりと、そのコマンドの集まりを伝達するハードウェア バスの集まりとみなすことができます。これらのハードウェアバスは専用の SCSI (例えば ultra wide 用)として使われるもの、他のプロトコル(例えば USB や IEEE 1394)と共用されるもの、種々の SCSI 規格では定義されていないもの等に分けられ ます。最後のカテゴリには、ATAPI CD ライター、PC パラレルバス ZIP ドライブ などの興味深い例があります。 このようなデバイスは、SCSI ではないバスで SCSI コマンドセット(もしくは非常に 近いもの)を利用します。
このセクションでは、様々な擬似低レベルドライバをざっと見ていきます。 これらは、他の Linux サブシステムが制御しているデバイスに対して SCSI コマンド セットを送るため、必然的にそのサブシステムとやり取りすることになります。 この事が、主導権をどちらが握るのかという問題を引き起こす場合があり、これが ユーザを混乱させ、結果的にメンテナーに数多くの質問が来ることになっています。
IDE-SCSI. 設定の点からすると、ide-scsi は、「ネイティブの」ドライバ(ide-cd や ide-tape 等)が割り当てられていない ATA(別称 IDE)デバイスのすべてを取り込み、 制御しようとします。例えば ide-cd と ide-scsi 両方がカーネルに組み込まれて コンパイルしてあり、そのシステムに ATAPI CD-ROM があれば、ide-cd が制御を握る でしょう。ide-scsi だけが組み込まれていると、ide-scsi がそのデバイスを握り ます。カーネルブート時に、どのドライバがどのデバイスを制御するのか指定する パラメタもいくつかあります。
IDE サブシステムの選び方は、下記のカーネルブート時パラメタで上書き 可能です(このサブシステムにとって、最初のものが最も重要でしょう)。
hdx=ide-scsi
hdx=ide-cdrom
hdx=ide-floppy
ドライバが動いていると、デバイスは SCSI デバイス (/dev/sda や /dev/sr0 等)を使って アクセスでき、そのデバイスに対応する /dev/hdx を使って はアクセスできません。 その場合でも /dev/hdx デバイスは利用可能ですが、設定用のみです。
一般的な IDE の設定パラメタ(DMA の有効・無効、32 ビット I/O、unmasking IRQ 等) はすべて、/dev/hdx デバイスが使えます。 例えば DMA を有効にするには下記のようにします。 [1]
hdparm -d1 /dev/hdx |
bios_cyl
bios_head
bios_sect
transform
log
0 ビット目: sg ドライバから発生していないコマンドの変換の 有効(1)もしくは無効(0)。
1 ビット目: sg ドライブを使って発行したコマンドの変換の有効 もしくは無効。
echo "log:1" > /proc/ide/hdx/settings |
echo "using_dma:0" > /proc/ide/hdx/settings |
PPA + IMM. IOMEGA の ZIP ドライブは、パラレルポート、SCSI、ATAPI といった さまざまな種類が売られています。パラレルポートタイプは、古い方が ppa ドライバ で、新しい方が imm ドライバで動作します。
パラレルポートの ZIP ドライブは、実は SCSI デバイスです。VPIO(古い)と VPI2(新しい)というインタフェースを使って、パラレルポートをトンネルし、 SCSI コマンドを流します。ppa ドライバは、VPIO ホストの実装、imm はVPI2 ホストで実装です。
HBA が ZIP ドライブ内部に搭載されて動作するので、ホスト・アダプタ と周辺機器が同一筐体にあることになります。
PPSCSI. パラレルポートケーブルを利用して SCSI を使用するアーキテクチャに ppscsi が あります。これは、まだ本体には統合されていない、新しいアーキテクチャです。 ppscsi モジュールはコードが定型化されているので、別のインタフェース向けの 実装を書くのも簡単です。
各 ppscsi のプロトコルモジュールは、自分自身を ppscsi モジュールと共に登録 し、プロトコル・ドライバすべてに共通する様々な操作のエントリーポイントを リストとして渡します。
ppscsi のアーキテクチャでは、ppa と imm ドライバとプロトコルモジュールが 統合される予定になっています。いまのところ VPI0 だけが書かれています。 www.torque.net/parport/ppscsi.html を見て ください。
USB. USB はあるデバイスのグループを「大容量記憶装置」(例えばディスク)として分類し、 それらと SCSI コマンドセットを使ってやり取りします。モジュール名は、 「usb-storage」です。 www.one-eyed-alien.net/~mdharm/linux-usb を 見てください。
Microtek X6 USB スキャナーを制御する usb/microtek ドライバもあります。 設定されると、SANE アプリケーションは sg ドライバを使って SCSI コマンドを USB を通じて送り、このスキャナーを制御します。
I2O. カーネルソースの /usr/src/linux/drivers/i2o/io2_scsi.c ファイルを見てください。
IEEE 1394. SBP-2 プロトコルを使っている IEEE 1394 デバイスが、つい最近利用可能 になりました(Linux カーネル 2.4.7)。後のセクション の IEEE 1394 の段落にさらに詳しい情報があります。
iSCSI. iSCSI が IETF のドラフトとしてまとまりつつあります。iSCSI は、SCSI コマンド セットを TCP のネットワークコネクションを通じて送ります。iSCSI は、一気に普及 しそうに見えますし、Linux でも複数の実装が行われつつあります。 sourceforge.net/projects/intel-iscsi/ に そのような実装の 1 つがあります。 お好みの検索エンジンを使って、他のプロジェクトも捜してみてください。
[1] | ディストリビューションによっては、hdparm コマンドが失敗するという報告が 挙がっています。そのような場合は "echo ... > /proc/ide/hdx/settings" 方式 を使ってください。 |