この節は導入されている SCSI ホストアダプターと SCSI デバイスに 情報を渡すための起動時引き数の説明を行います。
中位のドライバはディスクや CD-ROM、テープなどをホスト アダプタのなかに立ち入ることなしに取り扱います。
SCSI デバイスは各々いくつかの「下位のデバイス」を内蔵することが できます。一番いい例は、複数のディスクを一度に使える最近の SCSI CD-ROM です。各々の CD は そのデバイスの "Logical Unit Number" (LUN) で識別されます。しかしハードディスク やテープドライブのようなあたりまえのデバイスは、一つしか内部に デバイスを持っておらず、LUN として 0 を割り当てています。
問題はいかれたファームウェアを持っている単一 LUN のデバイスを使うときに おきます。あまり良くない設計の(古い奴と、不幸なことに新しい奴も含めた) SCSI デバイスは 0 以外の LUN で検出されることに耐えられません。 こんな場合、動作停止とか、SCSI バスのダウンなどに陥ってしまいます。
新しいカーネルは検出を行うときの最大 LUN を設定できるように オプションを持っています。既定の状態では、上の問題を避けるために LUN は 0 だけを検出するようになっています。
検出を行う LUN を起動時に指定するために "max_scsi_luns=n" を起動時 ひきすうとして与えます。ここで n は 1 から 8 までの数です。上で 説明した問題を避けるためには、n=1 として、いかれたデバイスによる ごたごたを回避します。
SCSI テープドライバの起動時設定には、以下のようにして行える ものもあります。
st=buf_size[,write_threshold[,max_bufs]]
最初の二つの数は kB を単位として指定できます。省略時の buf_size
の
値は 32kB です。また、指定できる最大の値は 16384kB です。
write_threshold
はバッファがテープに渡される時の
値で、省略時は 30kB です。バッファーの数は検出された
ドライブの数によります。初期値は 2 です。使用例は :
st=32,30,2
となります。詳細はカーネルソースツリーの SCSI
ディレクトリ
の README.st
に書いてあります。
この節での表記法について。
iobase
-- SCSI ホストが占有する最初の I/O ポート
16進数で表記され、通常は 0x200
から 0x3ff
の
範囲にある。
irq
-- カードが使用するように構成されているハードウェア割り込み。
有効な値は問題になっているカードに依存するが、普通は 5、7、9、10、11、
12、15 である。その他の値は普通は IDE ハードディスクやフロッピー、
シリアルポートなどの広く使われている周辺機器に使われている。
dma
-- カードが使用する DMA ( Direct Memory Access ) チャネル。
普通はバスマスタリングカードだけが使用する。PCI や VLB カードは普通は
バスマスターです。が、ISA は普通はバスマスターではありません。
scsi-id
-- SCSI バス上でのホストアダプターの ID です。殆どの
アダプターは内部でこの値を固定してしまっていますので、この値を
変えることのできるアダプターはあまりありません。普通、省略時の値は
7 です。しかし Seagate と Futre Domain TMC-950 は 6 を使っています。
parity
-- SCSI ホストアダプターが、接続されているデバイスは
すべての場合においてパリティーを計算していると考えていいのかどうかを
指定します。1 を指定するとパリティー検査が行われ、0 の時には
行われません。この起動時引き数もすべてのホストアダプターで
使えるわけではありません。
ahaで始まる名前はカードの名前を表わし、aic で始まる名前は 基板の上の実際の SCSI チップの名前を表わします。後者には Soundblaster-16 SCSI などがあります。
これらの SCSI ホスト用の検出用コードは、BIOS が導入されて いるかどうかを調べます。もしもない場合には、カードを探す ことはできません。その場合、起動時引き数を使わなければ ならないでしょう。その書式は、
aha152x=iobase[,irq[,scsi-id[,reconnect[,parity]]]]
です。
ドライバーがデバッグ対応にコンパイルされているなら、6 番目の 値はデバッグレベルの設定に使えます。
パラメータはこの節の頭で説明したとおりです。また、reconnect
の
値はデバイスにディスコネクト/リコネクトを許すかどうか指定します。
0 以外の値は許します。以下に例を示します。
aha152x=0x340,11,7,1
引き数は順番通りに書かなければなりません。ということは、パリティー 設定を指定したければ、iobase、irq、scsi-id、reconnect も指定 しなければならないということです。
このドライバは aha154x シリーズカード用です。aha1542 シリーズのカードは i82077 フロッピーコントローラを内蔵していますが、aha1540 シリーズは持って いません。このシリーズはバスマスターカードで、引数には他のデバイスとどれだ け 「公平」にバスを共有するか指示するためのものがあります。起動時引数は 以下のような感じです。
aha1542=iobase[,buson,busoff[,dmaspeed]]
iobase
は、普通 0x130、0x134、0x230、0x234、0x330、0x334
の何れかです。クローンカードの場合は他の値も許すかもしれません。
buson、busoff の値はカードが ISA バスを占有する時間をマイクロ秒で指定します 。 無指定時は、11uS の間オン、4uS の間オフです。これにより、他の( ISA LANCE Ethernet カードの様な )デバイスが ISA バスを使用することができます。
dmaspeed の値は DMA ( Direct Memory Access ) の転送速度を MB/S で 指定します。無指定時は 5MB/S です。最近のカードはこの値をソフトで 設定できますが、古い物の場合はジャンパーで設定します。マザーボードの 性能にもよりますが、この値は最大 10MB/S まで指定できます。5MB/S 以上を 指定するときには、注意深く実験して下さい。
これらのボードは以下の引数を受け付けます。
aic7xxx=extended,no_reset
extended の値が非 0 の時には、大容量ディスクのための拡張変換が有効 になります。no_rest の値が非0の時には、起動時のホストアダプタの 設定時に SCSI バスをリセットしません。
AdvanSys ドライバは AdvanSys SCSI カードを検出するための i/o アドレスを
4つまで受け付けます。なお、これらの値を使用しても EISA や PCI のカード
の検出には影響を与えません。ISA および VLB 版のみが影響を受けます。
加えて、ドライバがデバッグ用にコンパイルされている場合、デバッグ出力
レベルの指定を 0xdeb
他の SCSI ホストアダプターの起動時引数と違って、IN2000 ドライバーは ほとんどの整数引数の前に ASCII による前置文字列を置きます
ioport:addr -- addr はカード(普通は ROM なし)のIOアドレスです。
noreset -- 後に続く引数はありません。起動時にSCSIバスをリセットしないよ うにします。
nosync:x - x はビットマスクで、下位の 7 ビットが SCSI の可能な7つの デバイスに対応します( bit 0 がデバイス #0 です)。セットされたビットは デバイスとの同期ネゴシエーションを禁止します。省略すると、 ドライバはすべてのデバイスのネゴシエーションを禁止します。
period:ns -- ns は SCSI データ転送周期の最小値で、単位は nS です。 省略時の値は 500、許される値は 250 から 1000 です。
disconnect:x -- x = 0 の時にはディスコネクトを許しません。2 ならば常に許します。 x = 1 は、適応的にディスコネクトを行います。これは省略時の動作で、 普通は一番いい選択です。
debug:x -- "DEBUGGING_ON"が定義されている場合は、 x は、どのような デバッグ出力を表示するかを表すビットマップになります。in2000.h の DB_xxx の定義を見てください。
proc:x -- "PROC_INTERFACE" が定義されている場合は、x は /proc インター フェースがどのように働くか、また、どんなものかを定義するビット マップになります。in2000.h の PR_xxx の定義を見てください。
以下にいくつか例を示します。
in2000=ioport:0x220,noreset in2000=period:250,disconnect:2,nosync:0x03 in2000=debug:0x1e in2000=proc:3
他のデバイスとは異なり、このドライバは i/o、IRQ、DMA チャネル などのと通信に起動時引数を使いません(なぜかというと AM53C974 が PCI デバイスであるためで、これらのことを知らせる必要がない ためです)。その代わりに、引数はホストとターゲットデバイスの間の 転送モードや速度を指定するために使用します。これらは例で説明する のが一番わかりやすいでしょう。
AM53C974=7,2,8,15
これは以下のように解釈されます。「 SCSI-ID が 7 であるコントローラと
SCSI-ID が 2 であるデバイスの間は、同期転送モードにより転送速度
8MHz、最大 15 バイトのオフセットをとるようネゴシエーションする」。
より突っ込んだ論議に関しては、
linux/drivers/scsi/README.AM53C974
を参照して下さい。
古いカーネルを使用している場合は、buslogicドライバーは
引数を一つだけとります。これは I/O ベースを教えるために使います。
値は以下のうちの1つを指定します:
0x130, 0x134, 0x230, 0x234, 0x330, 0x334
v2.x カーネル用の BusLogic ドライバーは、たくさんの引数を 受け付けます( B と L が大文字になっていることに気をつけてくだ さい!)。以下の説明は、v2.0 カーネルに入っている Leonard N Zubkoff の ドライバーから持ってきたものです。
BusLogic driver 用のコマンドライン指定は、"BusLogic=" という識別子 のあとに続くコンマで分かたれた整数とコンマで分かたれた文字列の並び からなります。複数の BusLogic ホストアダプタがある場合は、それぞれ のカード用に指定を行います。
最初の整数は、ホストアダプタがおかれている I/O アドレスを 指定します。無指定の場合は 0 となり、これは組み込まれている 検出手続きにしたがって最初に見つかった BusLogic アダプタを 示します。何らかの I/O アドレスがコマンドラインで与えられた 場合には、組み込まれている検出手続きは実行されません。
2番目の整数はタグ付きキューイングに対応しているターゲット デバイス用のタグ付きキューの長さを指定します。キューの 長さは、並行的に実行するよう提示することが許されている SCSI コマンドの数です。無指定の場合は 0 となり、この場合 ホストアダプターの総タグ付きキュー長と、検出された ターゲットの数、型、速度、能力からキュー長を決めます。 ISA Bounce Buffer を必要とする ホストアダプタの場合、 タグ付きキュー 長は自動的に BusLogic_TaggedQueueDepth_BB に設定されます。これは DMA Bounce Buffer が過大に 割り当てられることを防ぐためです。 ターゲットデバイスがタグ付きキューを行い場合には、 BusLogic_UntaggedQueueDepth を値として使用します。
3番目の整数はバスのリセット時の待ち時間を秒で表します。これは SCSI バスリセットを伴うホストアダプタのハードリセットを 行ってから、実際に SCSI コマンドを発するまでの総遅延です。 無指定の場合は 0 となり、これは BusLogic_DefaultBusSettleTime を意味します。
4 番目の整数は局所オプションです。無指定の場合は 0 を指定したことになります。局所オプションは当該 ホストアダプタのみに与えられます。
5 番目の整数は、大域オプションです。無指定の場合は、 0 を指定したことになります。大域オプションはすべての ホストアダプタに与えられます。
文字列オプションはタグ付きキュー、誤りからの回復、 ホストアダプタ検出に関しての指定を行います。
タグ付きキューの指定は、"TQ:" から始まり、ターゲット デバイスがタグ付きキューを許しているかどうかを 明示的に指定します。以下の指定が有効です。
TQ:Default -- タグ付きキューはホストアダプタのファームウエア バージョンと、複数コマンドを許す Tagged Queue Depth の 値によって許可、不許可が決められます。
TQ:Enable -- タグ付きキューはこのホストアダプタに接続されている すべてのターゲットデバイスについて許可となります。 ただし、ホストアダプタのファームウェアの版によっては 不許可となります。
TQ:Disable -- タグ付きキューイングはこのホストアダプタに接続されている すべてのターゲットデバイスについて禁止となります。
TQ:<Per-Target-Spec> -- タグ付きキューイングはターゲットデバイス毎に決定されます。 <Per-Target-Spec> は、"Y"、"N"、"X" からなる 列です。"Y" はタグ付きキューイングを許可し、"N" は禁止し ます。"X" はファームウェアの版に基づく決定で、これが 無指定時の値です。最初の文字はターゲットデバイス 0 に ついて指定します。そして、2 文字目が ターゲットデバイス 1 という風になっています。"Y"、"N"、"X" がすべてのターゲット デバイスを網羅しきっていない場合は、指定されていない デバイスには X が割り当てられます。
タグ付きキューイングを明示的に要求すると、問題が起きること に注意して下さい。これは、もともと正しく実装されて いないターゲットデバイスに対して、タグ付きキューイングを 禁止するために提供されている機能です。
誤りからの復帰方法の指定は、"ER:" から始まり、SCSI コマンドが 失敗した場合のリセットコマンドの実行を明示的に指定します。 以下の指定が可能です。
ER:Default -- 誤りからの復帰は、SCSI サブシステムの推奨に基づき、 ハードリセットとバスリセットの何れかから選ばれます。
ER:HardReset -- 誤りからの復帰は SCSI バスリセットを伴う ホストアダプターハードリセットによります。
ER:BusDeviceReset -- 誤りからの回復は、誤りを起こしたターゲットデバイスを初期化する バスデバイスリセットメッセージによります。ターゲットデバイスによって 再度誤りがおきた時に、前回バスデバイスリセットが送られてから正常に 実行されたコマンドがない場合、ハードリセットが行われます。
ER:None -- 誤りからの回復は行われません。これは、SCSI バスリセットや バスデバイスリセットがターゲットデバイスで回復可能な誤り を起こすようなときだけ使用して下さい。
ER:<Per-Target-Spec> -- 誤りからの回復は、ターゲットデバイス毎に独立して指定 されます。<Per-Target-Spec> は 文字"D"、"H"、"B" 、"N"の並びです。"D" は、無指定時の値、"H" はハード リセット、"B" はバスデバイスリセット、"N" はリセット無しです。 最初の文字はターゲットデバイス 0 に ついて指定します。そして、2 文字目が ターゲットデバイス 1 という風になっています。 "D"、"H"、"B"、"N" がすべてのターゲット デバイスを網羅しきっていない場合は、指定されていない デバイスには "D" が割り当てられます。
ホストアダプタ検出指定は、以下の文字列から構成されます。
NoProbe -- 一切の検出を行いません。したがって、BusLogic ホスト アダプタは検出されません。
一切の標準 ISA I/O アドレスを検出しません。したがって、 PCI ホストアダプタのみが検出されます。
NoSortPCI -- PCI ホストアダプタは PCI BIOS が指定する順にならべられます。 AutoSCSI の "Use Bus And Device # for PCI Scanning Seq." オプションによる設定は無視されます。
最新の v2.0 カーネルでは、EATA ドライバーは検出のための I/O アドレスを起動時引数として受け付けることができます。 書式は以下の通りです。
eata=iobase1[,iobase2][,iobase3]...[,iobaseN];
ドライバはアドレスを指定した順番に検査していきます。
これらの SCSI ホスト用の検出コードは、SCSI BIOS が導入 されているか調べ、導入されていなければカードを検出しません。 また、BIOS のシグナチャー文字列が検出されない場合も、 カードを検出しません。これらの場合、起動時引数を 以下の形式で与える必要があります。
tmc8xx=mem_base,irq
mem_base
は、カードが使用するメモリーマップド I/O 領域
のアドレスです。これは普通以下の何れかの値です。
0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
.
ドライバはカードを知られている BIOS ROM シグナチャーに
基づいて検出します。知られている BIOS の版の一覧は、
linux/drivers/scsi/fdomain.c
の先頭にあります。
BIOS が一覧にない場合は、以下の形式で強制することができます。
fdomain=iobase,irq[,scsi_id]
これは、IOMEGA Zip ドライバに組み込まれている Parallel Port SCSI アダプタのためのドライバです。また、 このドライバは IOMEGA PPA3 デバイス用にも動作します。 起動時引数は以下の通りです。
ppa=iobase,speed_high,speed_low,nybble
iobase 以外は省略することができます。これらの値を指定
したい場合には、
linux/drivers/scsi/README.ppa
をご覧になることを、お勧めします。
ボードによって、5380 は i/o マップの場合とメモリーマップの
場合があります( 0x400 以下のアドレスは通常はi/o マッピング
です。しかし、PCI と EISA ハードウェアは 0x3ff より上の
アドレスを使います)。その両方の場合も、アドレス、
IRQ の値、DMA チャンネルの値を指定します。i/o マップの
カードの例は、ncr5380=0x350,5,3
です。カードが割り込み
を使用しない場合は、IRQ の値として
255 (0xff
)
を指定すると、割り込みを禁止します。IRQ に 254 を指定すると
自動検出を行います。より詳細な説明は
linux/drivers/scsi/README.g_NCR5380
を参照して下さい。
53c400 対応は上で説明した 5380 対応と同様に行われます。 起動時引数は上で説明したのと同じで、DMA チャネルは 53c400 では使われていないことだけが異なります。
このドライバは以下の様な起動時引数を使用します。
ncr53c406a=PORTBASE,IRQ,FASTPIO
ここで IRQ と FASTPIO 引数は省略可能です。
割り込みに 0 を指定すると、割り込みを使わなくなります。FASTPIO
引数に 1 を指定すると、単一バイト処理命令
inb
および outb
の替わりに
insl
および outsl
を使用します。このドライバはまた DMA を使用するようコンパイル時に
指定することができます。
PAS16 は NCR5380 SCSI チップを使用しています。また、最近の 機種はジャンパー無しの設定に対応しています。起動時引数の 書式は以下の通りです。
pas16=iobase,irq
異なる点は、IRQ の値に、ドライバを割り込み無しで使用する
ための 255 を指定できる点で、この場合も性能の劣化はありません。
iobase
は普通 0x388
です。
SCSI ホスト用の検出コードは、SCSI BIOS が導入 されているか調べ、導入されていなければカードを検出しません。 また、BIOS のシグナチャー文字列が検出されない場合も、 カードを検出しません。これらの場合、起動時引数を 以下の形式で与える必要があります。
st0x=mem_base,irq
mem_base
は、カードが使用するメモリーマップド I/O 領域
のアドレスです。これは普通以下の何れかの値です。
0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000
.
このカードも NCR5380 チップを使用しています。以下の 形式を受け付けます。
t128=mem_base,irq
mem_base
は以下の値の一つを受け付けます。
0xcc000, 0xc8000, 0xdc000, 0xd8000
.
このカードには別々の二つのドライバがあることに気をつけて下さい。
カーネル構成のときに CONFIG_SCSI_U14_34F
を指定すると
u14-34f.c
が、CONFIG_SCSI_ULTRASTOR
を指定すると
ultrastor.c
が使用されます。u14-34f の方は (v2.0 以降のカーネルで)、
起動時引数を受け付けます
u14-34f=iobase1[,iobase2][,iobase3]...[,iobaseN]
ドライバは列挙された順番でアドレスを見ていきます。
このドライバは wd7000 の BIOS ROM の知られている パターンと、少数の知られている設定を使って検出します。 カードに正しくない値が使用されていない場合や認識できない BIOS の版の場合は、以下の形式の起動時引数を使用することが できます。
wd7000=irq,dma,iobase
現在のところ、以下の SCSI カードは一切の起動時引数を 受け付けません。どうしても必要な場合、ドライバ自身を 編集して値を直接書き込む事ができます。
Adaptec aha1740 (EISA probing), NCR53c7xx,8xx (PCI, both drivers) Qlogic Fast (0x230, 0x330) Qligic ISP (PCI)