1. FAQ

Q1. 手持ちの IDE CD-ROM ドライブが使えるかどうか知りたいのですが

もちろん、使えます。お手持ちのドライブは、ATAPI/IDE CD-ROM ドライブと 呼ばれるもので、IDE ハードディスク用のインターフェイスを使って CD-ROM を動かす仕組みになっています。このインターフェイスは、現在一般的 なほとんどの家庭用 PC に内蔵されています。Linux では、カーネル 1.1.85 以降、 問題なく利用できます。

Q2. 既に 2 つの IDE ハードディスクを繋いでいるのですが、ATAPI CD-ROM を追加でき ますか?

できます。ただ、IDE インターフェイスカードがもう一枚必要になります (訳注:現在はたいてい初めから 2 枚分のインターフェイスが付いています)。 その場合、残念ながらどんな IDE カードでもいいわけではありません。 2 枚目のインターフェイスカードは、ジャンパによる IRQ とベースアドレスの 切り替え機能が付いているか、もともと 2 枚目用として製造されたものである 必要があります。Data Technologies の model 2183 などは、そうなっています。 だいたい 15 ドルくらいなので、たいした出費にはならないでしょう。インター フェイス付きの Mitsumi のドライブを買ったなら、それを使いましょう。 あるいは、IDE ポートがふたつ付いた E-IDE カードを買うという手もあります。 これには、一枚のカードに IDE/E-IDE インターフェイスがふたつ載っています。 ここしばらく USENET を覗いていないので詳しい情報は知りませんが、 カーネル 1.3.x では E-IDE が完全にサポートされているそうです。

Q3. FX400 用ドライバがカーネルソースに入っていないようなのですが、どこを 探せばいいでしょう?

Mitsumi FX400 「専用」のドライバというのはありません(言い換えると、特定の ドライブ専用のドライバ自体がありません)。必要なのは、カーネルソースに 含まれる汎用の ATAPI CD-ROM ドライバです。これは、カーネル 1.1.85 以降、 正式にソースの一部となっています。このドライバを有効にするには、他のドライバ の場合と同様に、make config でカーネルを設定して、 再構築するだけです。カーネルの再構築はそれだけで一冊の FAQ が必要になる ので、ここでは詳しく述べません。

Q4. どのオプションを有効にすれば、手持ちの ATAPI CD-ROM が使えるようになりますか?

以下は、make config の手続きの一部を抜粋したものです。

  *
  * Please see drivers/block/README.ide for help/info on IDE drives
  *
     Use old disk-only driver for primary i/f (CONFIG_BLK_DEV_HD) [n] n
     Use new IDE driver for primary/secondary i/f (CONFIG_BLK_DEV_IDE) [y] y
     Include support for IDE/ATAPI CDROMs (CONFIG_BLK_DEV_IDECD) [n] y

上記のように、古いハードディスク専用のドライバを無効にし、新しい IDE ドライバを有効にして、ATAPI CD-ROM サポートも有効にしましょう。また、 ISO9660 ファイルシステム(標準の CD-ROM ファイルタイプ)のサポートも必ず 有効にしましょう。そして、カーネルをコンパイルして、出来上がった圧縮 カーネル vmlinuz/usr/src/linux/arch/i386/boot から / に コピーし、System.map も同様にコピーします。古いバージョン の Slackware (2.2 以前) を使っている場合は、簡単なスクリプトを実行して、 セカンダリ・インターフェイス上でふたつのデバイスを動かせるように(/dev ディレクトリに)デバイスノードを作成する必要があります。 このスクリプトは /usr/src/linux/drivers/block に置かれて いる MAKEDEV.ide1 というスクリプトです。そうして、 必要に応じて LILO か loadlin (どちらか好きな方) をアップデートし、マシンを 再起動します。IDE インターフェイスの IRQ が 15 でポートアドレスが 170h-177h であるなら、何の問題もなく動くでしょう。(この IRQ とポートアドレスは、 DTC 2183 のものですが、ドライブのジャンパ設定が正しく出来ているかどうかは、 必ず確認してください。また、よく分からなければ、無茶をせず、分かる人に 聞きましょう。) Linux は問題なくセカンダリインターフェースを認識して、 起動時に例えば次のような表示を出力するはずです。

  hda: WDC AC1210F, 202MB w/64KB Cache, CHS=989/12/35, MaxMult=16
  hdb: Maxtor 7345 AT, 329MB w/64KB Cache, CHS=790/15/57, MaxMult=32
  hdc: FX400_02, ATAPI, CDROM drive
  ide1: secondary interface on irq 15
  ide0: primary interface on irq 14

上記はちょっとややこしいかもしれないので、説明します。一行目は、著者の 第一ドライブ(/dev/hda)が Western Digital 202MB ハードドライブであることを示しています。二行目は、Maxtor 329MB ドライブです。 hda は、プライマリインターフェイス上の第一ドライブの ことであり、hdb は、プライマリインターフェイス上の 第二ドライブのことで、hdc が、セカンダリインターフェイス 上の第一ドライブ、hdd (これは著者のシステム上ではまだ 使われていません)が、セカンダリインターフェイス上の第二ドライブです。それゆえ、 三行目が示しているのは、FX400 ATAPI CD-ROM が、セカンダリインターフェイス上の 第一ドライブにあるということです。最後の二行は、ふたつの IDE インターフェイス がそれぞれ IRQ 15 と IRQ 14 にあることを示しています。読者とはドライブ名が異 なるかもしれませんが、書式は同じです。CD-ROM が認識されたデバイスファイルから、 /dev/cdrom へとシンボリックリンクを張るのを忘れないように しましょう。次のようにタイプします(どのディレクトリで実行しても構いません)。

  ln -s /dev/hdc /dev/cdrom

起動が完了したら、適当な Slackware の CD-ROM をドライブのトレイに挿入して、 次のように mount します。

  mount /dev/cdrom /mnt

非常に簡単ですよね?

場合によっては、次の行を /etc/lilo.conf か loadlin の スクリプト(両者のうち読者が使っている方)に追加する必要があるかもしれません。

  append="hdc=cdrom"    <--- for lilo.conf
  hdc=cdrom	        <--- from the lilo "boot:" prompt

Q5. CD-ROM ドライブのジャンパを SLAVE/SINGLE にして、セカンダリインタフェイスに ひとつだけ繋いだのですが認識されません。何がおかしいのでしょうか?

全然だめです。率直なところ、99.99% の ATAPI CD-ROM ドライブは、SLAVE か SINGLE にジャンパ設定されて出荷されますが、そのままでは Linux 上で 動きません。IDE の規格上、あるインターフェイスにひとつだけドライブを 繋ぐ場合は、ジャンパを MASTER に設定しなければなりません。IDE の規格では、 SINGLE という仕様は存在せず、そういう設定はあってはならないのです。 CD-ROM の裏側にあるジャンパを MASTER に変更して、Q4 の手順を踏めば、 きちんと動くようになるはずです。

Q6. ATAPI CD-ROM と IDE ハードディスクを同じ IDE インターフェイスに繋ぐと ハードディスクが遅くなるという話を聞きました。本当ですか?

著者の経験(およびこの問題にコメントしてくれた他の人たちの経験)からすると、 CD-ROM と HDD とを同じインターフェイスに繋ぐと速度が低下するというのは根拠の ない噂でしかなく、真実ではありません。この噂によると、メディア転送速度(Media Transfer Rate)は、ひとつの IDE インターフェイスに繋がれた遅いほうのデバイスの 速度に合わせて設定されるらしいですが、これは誤りです。真相は、命令転送速度 (Instruction Transfer Rate)が、IDE インターフェイスに繋がれた遅いほうの デバイス速度に合わせて設定されるというものです。命令は、回転するメディア上 ではなく、ファームウェア(ドライブのコントロールボード上にあるロジックチップ) 内で処理されるので、特定のデバイス上で命令転送速度が遅くなる場合、その唯一の 原因はデバイス製造元の設計の杜撰さにあります。ただ、ある種の IDE/E-IDE コントローラボードを使っている場合は、この噂は本当であるかもしれないので、 その辺は場合によりけりです。もし CD-ROM と HDD を同一の IDE インターフェイス に繋いだ際に速度の低下が認められるようなら、そのコントローラのブランドと モデル名を著者にメールで知らせて下さい。この文書に記載します。

Q7. カーネルを 1.3.(19-30) にアップグレードしたら ATAPI CD-ROM が動かなく なりました。何故?

カーネルバージョン 1.3.19 から 1.3.30 に渡り IDE/ATAPI ドライバの書き換えが 行われ、その過程でミスがあったのでしょう。見たところ、現在は直っているよう ですから、当時何故動かなかったかという理由を詮索する必要はないんじゃないで しょうか。別の見方をすると、実験用モルモットになるつもりがないなら、 奇数系カーネル(1.1.x, 1.3.x, 1.n.x)は使わないことです。1.2.13 のような 偶数系もしくは安定版カーネルにしておきましょう。

Q8. Mitsumi FX401 ドライバのパフォーマンスが悪いのですが、何故?

Mitsumi の FX400 は、最近('95年8月頃)、FX401 に置き換えられました。 FX401 モデルは、外観こそ同じですが、細かな新機能が付加され、速度も 若干上がりました。ただ、残念なことに、このドライブのタイミングが FX400 とは異なるので、Linux 1.2.* から 1.3.26 までの標準コントローラや一部の E-IDE コントローラとの相性が悪いのです。症状としては、CD-ROM の動作が 止まってしまい、10 秒ほど停止した後で、timeout/reset エラーメッセージを syslog ファイルに吐くというものです。判明している唯一の対処法は、開発版 1.3.28 以上のカーネルにアップグレードするということです。1.3.30 だと、 この新しいコードも安定しています。しかし、このコードは、困ったことに FX401 以外のドライブでは問題が生じたりしています。 <Q7/A7 については、steven.clark@keble.oxford.ac.uk に感謝します>

Q9. Sound Blaster 16 IDE を取り付けたのですが、ATAPI ドライブが認識されません!

このトラブルは、おそらく Sound Blaster の IDE インターフェイスのベース アドレスが原因である可能性が高いと思われます。この Sound Blaster では、IDE インターフェイスが TERTIARY インターフェイスになるよう出荷時に設定されています (つまり、IDE の第三インターフェイスとして設定されているということです。 最近では第三、第四の IDE ポートというのも確かに存在しますが、今のところ、 Linux の安定版カーネルではそれらが使えるようにはなっていません)。Linux に セカンダリ IDE インターフェイスを認識させるには、そのポートがセカンダリ アドレス(0x170-0x177, IRQ 15)になければなりません。そして、安定版カーネルに セカンダリ IDE インターフェイスと ATAPI CD-ROM を認識させる方法は、これしか ありません。あるいは、カーネルソースの ide.c をいじって、第三 IDE インターフェイス用のアドレスと IRQ で セカンダリ IDE インターフェイスを検出させることもできはしますが、あくまで 冒険です。

このトラブルの第二の原因は、Creative Labs が CD-ROM ドライブを製造する際、 MASTER/SLAVE ジャンバを SLAVE 側に入れているということです。おそらく、 その CD-ROM ドライブは Sound Blaster の IDE インターフェイス上の唯一の デバイスとなるはずですが、IDE の規格からすると、インターフェイス上の 単一のデバイスは MASTER 側にジャンパ設定されなければならないことになって います。これは、DOS 等の二流のオペレーティングシステムの場合なら問題 になりません。彼らは、製造元やユーザが混乱しないように対処しようとは思って いないからです。しかし、Linux はコンピュータそのものを理解しているユーザ を対象とするオペレーティングシステムであるため、規格には厳格に従って います。

DOS, Win3.1x, Win 4.x, OS/2 でも ATAPI CD-ROM と SB16IDE を再設定する 必要があるでしょう。アドレスの変更は、これらの(著者が考える)二流の オペレーティングシステムではおそらく認識されないからです。