次のページ 前のページ 目次へ

6. SCSI 機器用の起動時引数

この節では、導入されている SCSI ホストアダプタと SCSI デバイスに 情報を渡すための起動時引数の説明を行います。

6.1 中位のドライバのための引数

中位のドライバはディスクや CD-ROM、テープなどをホスト アダプタ固有の事情に立ち入ることなしに取り扱います。

LUN の最大検出数 (`max_scsi_luns=')

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 として、いかれたデバイスによるごたごたを回避します。

SCSI ロギング (`scsi_logging=')

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 に書いてあります。

6.2 SCSI ホストアダプタ用の引数

この節での表記法について:

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 の時には行われません。 繰り返しになりますが、必ずしも全てのアダプタにおいて起動時にパリティの 振舞いを選択できるとは限りません。

Adaptec aha151x, aha152x, aic6260, aic6360, SB16-SCSI (`aha152x=')

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 も指定しなければなりません。

Adaptec aha154x (`aha1542=')

これらは 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 以上を指定するときには、注意深く実験してください。

Adaptec aha274x, aha284x, aic7xxx (`aic7xxx=')

これらのボードは以下の引数を受け付けます:


        aic7xxx=extended,no_reset

extended が 0 でない値の時には、大容量ディスクのための拡張変換が 有効になります。no_rest が 0 でない値の時には、起動時のホストアダ プタの設定時に SCSI バスがリセットされません。

AdvanSys SCSI ホストアダプタ (`advansys=')

AdvanSys ドライバは AdvanSys SCSI カードを検出するための I/O アドレスを 4 つまで受け付けます。なお、これらの値を使用しても EISA や PCI のカード の検出には影響を与えません。ISA および VLB のカードのみが影響を受けます。 加えて、ドライバがデバッグ用にコンパイルされている場合、デバッグ出力 レベルの指定を 0xdeb[0-f] パラメータによって指示できます。 0-f の値によってどれだけ詳細な出力を行うかを 16 段階で指示します。

Always IN2000 ホストアダプタ (`in2000=')

他の 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

AMD AM53C974 ベースのハードウェア (`AM53C974=')

他のデバイスとは異なり、このドライバは I/O、IRQ、DMA チャネル での通信に起動時引数を使いません(なぜかというと AM53C974 は PCI デバイスであるためで、これらを使う必要がないからです)。 その代わりに、引数はホストとターゲットデバイスの間の 転送モードや速度を指定するために使用します。これらは例で説明する のが一番わかりやすいでしょう:


        AM53C974=7,2,8,15

これは以下のように解釈されます。「SCSI-ID が 7 であるコントローラと SCSI-ID が 2 であるデバイスの間は、同期転送モードにより転送速度 8MHz、最大 15 バイトのオフセットをとるようネゴシエーションする」。 より突っ込んだ説明については linux/drivers/scsi/README.AM53C974 ファイルを参照してください。

v1.2 カーネル用 BusLogic SCSI ホストドライバ (`buslogic=')

古いカーネルを使用している場合は、buslogicドライバは 引数を一つだけとります。これは I/O ベース値を教えるために使います。 値としては以下のうちの 1 つを指定します: 0x130, 0x134, 0x230, 0x234, 0x330, 0x334

v2.x カーネル用 BusLogic SCSI ホストドライバ (`BusLogic=')

バージョン 2.x のカーネルでは、BusLogic ドライバはたくさんの引数を受け 付けます。(前節のドライバとは大文字と小文字が違うので注意。こちらは B, L が大文字です!!!) 引数が多すぎて、ここでは説明できません。 完全な説明はドライバ linux/drivers/scsi/BusLogic.c の中に書か れており、BusLogic= という文字列を検索すれば見つかります。

EATA SCSI カード (`eata=')

最新の v2.0 カーネルの時点では、EATA ドライバは検出のための I/O ベースアドレスを起動時引数として受け付けます。 書式は以下の通りです:


        eata=iobase1[,iobase2][,iobase3]...[,iobaseN]

このドライバは、指定した順番でアドレスを検査していきます。

Future Domain TMC-8xx, TMC-950 (`tmc8xx=')

これらの SCSI ホスト用の検出コードは、SCSI BIOS がインストール されているか調べ、インストールされていなければカードを検出しません。 また、BIOS のシグネチャ文字列が識別できなくてもカードを検出しません。 これらの場合、起動時引数を以下の形式で与える必要があります:


        tmc8xx=mem_base,irq

mem_base 値は、カードが使用するメモリマップド I/O 領域 のアドレスです。これは普通、以下値のうちのいずれかです: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000

Future Domain TMC-16xx, TMC-3260, AHA-2920 (`fdomain=')

このドライバは、既知の BIOS ROM シグネチャのリストに基づいてカードを検 出します。既知の BIOS の版の完全なリストについては、 linux/drivers/scsi/fdomain.c を見てください。というのも、この ファイルの先頭に詳しい情報が載っているからです。BIOS がリストに載って いない場合は、以下の形式で上書き指定できます:


        fdomain=iobase,irq[,scsi_id]

IOMEGA パラレルポート / ZIP ドライブ (`ppa=')

これは、IOMEGA Zip ドライバに組み込まれているパラレルポート用 SCSI ア ダプタのためのドライバです。また、 このドライバは、オリジナルの IOMEGA PPA3 デバイス用でも動作します。 このドライバの起動時引数は以下の通りです:


        ppa=iobase,speed_high,speed_low,nybble

iobase 以外は省略できます。3 つの省略可能なパラメータのどれ かの値を変更したければ、linux/drivers/scsi/README.ppa を見て、このパラメータが何を制御するのかを調べることをお勧めします。

NCR5380 ベースのコントローラ (`ncr5380=')

ボードによって、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 を参照してください。

NCR53c400 ベースのコントローラ (`ncr53c400=')

一般的な 53c400 への対応は、上で説明した一般的な 5380 への対応と同様に 行われます。起動時引数は前述の説明とほぼ同じですが、53c400 では DMA チャネルが使われない点だけが異なります。

NCR53c406a ベースのコントローラ (`ncr53c406a=')

このドライバは以下の様な起動時引数を使用します:


        ncr53c406a=PORTBASE,IRQ,FASTPIO

ここで IRQ と FASTPIO 引数は省略可能です。 割り込みに 0 を指定すると、割り込みを使わなくなります。FASTPIO 引数に 1 を指定すると、単一バイト処理命令 inb および outb の代わりに insl および outsl が使われるようになります。また、このドライバは DMA を使用するようコン パイル時に指定できます。

Pro Audio Spectrum (`pas16=')

PAS16 は NCR5380 SCSI チップを使用しています。また、最近の 機種はジャンパ無しの設定に対応しています。起動時引数の 書式は以下の通りです:


        pas16=iobase,irq

唯一異なる点は、IRQ の値として 255 を指定できる点です。これは 割り込み無しでドライバを使用することを指定しますが、この場合も性能の劣 化はありません。iobase は普通、0x388 です。

Seagate ST-0x (`st0x=')

SCSI ホスト用の検出コードは、SCSI BIOS がインストールされているかを調 べ、導入されていなければカードを検出しません。また、BIOS のシグネチャ 文字列が識別できない場合もカードを検出しません。これらの場合、起動時引 数を以下の形式で与える必要があります:


        st0x=mem_base,irq

mem_base は、カードが使用するメモリマップド I/O 領域 のアドレスです。これは普通、以下の値のいずれかです: 0xc8000, 0xca000, 0xcc000, 0xce000, 0xdc000, 0xde000.

Trantor T128 (`t128=')

このカードも NCR5380 チップを使用しています。以下の オプションを受け付けます。


        t128=mem_base,irq

mem_base に対して有効な値を以下に示します: 0xcc000, 0xc8000, 0xdc000, 0xd8000

Ultrastor SCSI カード (`u14-34f=')

このカードには別々の二つのドライバがあることに気をつけてください。 カーネルの設定の際に CONFIG_SCSI_U14_34F を指定すると u14-34f.c が使用され、CONFIG_SCSI_ULTRASTOR を指定すると ultrastor.c が使用されます。u14-34f の方は (バージョン 2.0 の最近 のカーネルでは)、以下の形式の起動時引数を受け付けます:


        u14-34f=iobase1[,iobase2][,iobase3]...[,iobaseN]

ドライバは列挙された順番でアドレスを見ていきます。

Western Digital WD7000 カード (`wd7000=')

このドライバの wd7000 検出ルーチンは、分かっている BIOS ROM のパターン を探します。また、標準的な設定をいくつか知っています。カードに正しくな い値が設定されている場合や認識できないバージョンの BIOS を使っている場 合は、以下の形式の起動時引数を使用できます:


        wd7000=irq,dma,iobase

6.3 起動時引数を取らない SCSI ホストアダプタ

現在のところ、以下の SCSI カードは起動時引数を全く使いません。場合によっ ては、必要ならばドライバそのものを編集して値を直接書き込むことが できます。

        Adaptec aha1740 (EISA の検出),
        NCR53c7xx,8xx (PCI, 両方のドライバとも)
        Qlogic Fast (0x230, 0x330)
        Qlogic ISP (PCI)


次のページ 前のページ 目次へ