この節では、導入されている SCSI ホストアダプタと SCSI デバイスに 情報を渡すための起動時引数の説明を行います。
中位のドライバはディスクや CD-ROM、テープなどをホスト アダプタ固有の事情に立ち入ることなしに取り扱います。
SCSI デバイスは、それぞれいくつかの「下位のデバイス」を持つことが できます。もっとも良くある例は複数の CD を同時に使える最近の 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 として、いかれたデバイスによるごたごたを回避します。
0 以外の値をこの起動時引数に与えると、全てのSCSI イベント(error, scan,
mlqueue, mlcomplete, llqueue, llcomplete, hlqueue, hlcomplete)の
ロギングが行われるようになります。/proc/
ファイルシステムのア
クセスが可能になる前に起こるイベントに興味がないのであれば、
/proc/scsi/scsi
インタフェースを使うとログに残されるイベント
をもっと細かく制御できることを知っておくとよいでしょう。
いくつかの 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 が導入されて いるかどうかを調べます。もしも 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 イーサネットカード等の)デバイスも 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[0-f]
パラメータによって指示できます。
0-f
の値によってどれだけ詳細な出力を行うかを 16 段階で指示します。
他の SCSI ホストアダプタの起動時引数と違って、IN2000 ドライバは ほとんどの整数型引数の前に ASCII による前置文字列を置きます。対応して いる引数のリストを以下に示します:
ioport:addr -- addr はカード(普通は ROM なし)の I/O アドレスです。
noreset -- 後に続く引数はありません。起動時に SCSI バスをリセットしないようにします。
nosync:x -- x はビットマスクで、下位の 7 ビットが使用可能な 7 つの SCSI デバイスに 対応します(ビット 0 がデバイス #0 です)。あるビットを立てると、 そのデバイスとの同期ネゴシエーションが禁止されます。デフォルトの 動作では、ドライバは全てのデバイスの同期を無効にしています。
period:ns -- ns は SCSI データ転送周期の最小値で、単位はナノ秒です。 デフォルト値は 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
バージョン 2.x のカーネルでは、BusLogic ドライバはたくさんの引数を受け
付けます。(前節のドライバとは大文字と小文字が違うので注意。こちらは
B, L が大文字です!!!) 引数が多すぎて、ここでは説明できません。
完全な説明はドライバ linux/drivers/scsi/BusLogic.c
の中に書か
れており、BusLogic=
という文字列を検索すれば見つかります。
最新の 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 ドライバに組み込まれているパラレルポート用 SCSI ア ダプタのためのドライバです。また、 このドライバは、オリジナルの IOMEGA PPA3 デバイス用でも動作します。 このドライバの起動時引数は以下の通りです:
ppa=iobase,speed_high,speed_low,nybble
iobase 以外は省略できます。3 つの省略可能なパラメータのどれ
かの値を変更したければ、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 への対応と同様に 行われます。起動時引数は前述の説明とほぼ同じですが、53c400 では DMA チャネルが使われない点だけが異なります。
このドライバは以下の様な起動時引数を使用します:
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 の方は (バージョン 2.0 の最近
のカーネルでは)、以下の形式の起動時引数を受け付けます:
u14-34f=iobase1[,iobase2][,iobase3]...[,iobaseN]
ドライバは列挙された順番でアドレスを見ていきます。
このドライバの wd7000 検出ルーチンは、分かっている BIOS ROM のパターン を探します。また、標準的な設定をいくつか知っています。カードに正しくな い値が設定されている場合や認識できないバージョンの BIOS を使っている場 合は、以下の形式の起動時引数を使用できます:
wd7000=irq,dma,iobase
現在のところ、以下の SCSI カードは起動時引数を全く使いません。場合によっ ては、必要ならばドライバそのものを編集して値を直接書き込むことが できます。
Adaptec aha1740 (EISA の検出), NCR53c7xx,8xx (PCI, 両方のドライバとも) Qlogic Fast (0x230, 0x330) Qlogic ISP (PCI)