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

3. SB AWE サウンドサポートのインストール方法

3.1 あなたがするべきこと

以下は、Linux の下で SB AWE をサポートするための条件です:

PnP カードの場合は下記のものも必要です。

これらのプログラムをどこから入手するかは ソース の項をご覧下さい。

Debian GNU/Linux システムの場合、これは kernel-source-<version>, awe-drv そしてたぶん isapnptools のパッケージが必要であることを意味します。 不可欠ではないけど他の awe-* パッケージも欲しくなるでしょう。 カーネルのコンパイルとインストールを簡単に行うために、 kernel-package を使うことを強く推奨します。

3.2 ことはじめ

あなたはカードをマザーボードに正しく取り付け、たぶんすでに DOS あるいは Windows 環境下でテスト済みであるものと見做します。

PnP カードの場合、次のステップはブート時にカードを初期化することです。 isapnptools をソースパッケージのドキュメントに従って、コンパイルしイン ストールします。 (または Debian バイナリパッケージを使うだけです)

【訳注】 Slackware 3.4.0 の場合、ディスクセット diska5 の中に pnp という パッケージ名で isapnptools-1.10 というバイナリパッケージが入って います。なお、最新バージョンは1998年5月末現在、1.15 です。
【訳注終り】

そして root 権限で次のようにします。

# pnpdump > /etc/isapnp.conf

これはうまくいけば適切な PnP カード用の設定ファイルを作ってくれますが、 全てのデバイスはコメントアウトされます。このファイルを注意深く編集して 可能であれば DOS あるいは Windows 環境下でのカードの DMA チャネル、I/O ベースアドレス、割り込み(IRQ)の設定値と比べてみて下さい。(Win95 の場合 デバイスマネージャのリソースの所でカードが使っているリソースをご覧下さい) 問題がある場合は、isapnptools のドキュメントを読んで下さい。

注: isapnptools は SB AWE ウェーブテーブルデバイスの3つの I/O ポート の検出に失敗することがよくあります。この HOWTO の最後に示した例と 比べながらあなたの isapnp.conf ファイルの WaveTable の entry を 注意深く見て下さい。必要に応じて I/O ベースアドレスを調整して下さい。

注: isapnp-faq によると、たまに isapnp 論理デバイスの番号をプログラムする のに失敗することがあります。以下のようなエラーメッセージが出た場合:

Error occurred executing request 'LD 2' on or around line...

isapnp.conf の先頭に (VERIFYLD N) を追加してみて下さい。これを動かすには 少なくともバージョン 1.10 以上を使う必要があります。バージョン 1.10 以上 を使うことができない場合、論理デバイスの番号を直接 POKE することもできま す。このアプローチに関するより詳しい情報は isapnp-faq をご覧下さい。 これがうまくいかないときは私(そして isapnp の人達も興味があると私は思い ます)に連絡して下さい。

注: pnpdump の古いバージョンでは、最後の行 (WAITFORKEY)が書き落とされて いる場合がありますから要注意です。

PnP カードが一つ(サウンドカード)だけの isapnp.conf のサンプルが、 このドキュメントの最後にあります。 ( isapnp.conf のサンプルの項をご覧下さい)

Debian システムの場合、これ以上の調整は必要ありません。以下のスクリプト コードの断片をブートスクリプトの中にインクルードしておけば /etc/init.d/boot の中の isapnp がブート時にスタートします。


# Configure the isa plug and play boards before loading
# modules. Need to do this before loading modules to get
# a chance of configuring and starting PnP boards before
# the drivers mess all this up.
#
if [ -x /etc/init.d/isapnp ]
then
  /etc/init.d/isapnp start
fi

/etc/init.d/isapnp は下記のようにします。


#! /bin/sh
# /etc/init.d/isapnp: configure Plug and Play boards
test -x /sbin/isapnp || exit 0
/sbin/isapnp /etc/isapnp.conf
exit 0

他の Linux ディストリビューションの場合は別です。私はどうすればよいか 知りません。(だれか、より具体的な情報を提供してくれませんか?) isapnp はモジュールがロードされる前にスタートしなければならないという 点に注意して下さい。(以下をご覧下さい)

【訳注】 Linux の起動時、システムの初期化と設定は Slackware の場合、 /etc/rc.d/rc.S と /etc/rc.d/rc.M スクリプトに書かれた内容に従って 次のような順序で行われます。(主なものだけを順に列記しました)

1. /etc/rc.d/rc.S # システム初期化スクリプト SysVinit (つまり Debian, RedHat, Caldera) の場合は /etc/rc.d/rc.sysinit が、これに相当します。

       (/sbin/kerneld)
       /etc/rc.d/rc.modules   (モジュール)
       /etc/rc.d/rc.pcmcia    (PCMCIA)
       /etc/rc.d/rc.serial    (シリアル)
  
2. /etc/rc.d/rc.M # マルチユーザモードスクリプト
       Screen blanks の設定
       /etc/rc.d/rc.cdrom     (CDROM)
       crond の起動
       HOSTNAME の設定
       NET subsystem の初期化 (/etc/rc.d/rc.inet1 と /etc/rc.d/rc.inet2)
       /etc/rc.d/rc.font      (カスタム・スクリーンフォントのロード)
       /etc/rc.d/rc.ibcs2     (インテル・バイナリ互換仕様)
       /etc/rc.d/rc.keymap    (カスタム・キーマップ)
       /etc/rc.d/rc.local     (ローカル設定)
  
トラブルを避けるために、ネットワークの設定の前 (/etc/rc.d/rc.M ではホスト 名のセットの後)に isapnp を走らせた方が良いかも知れません。 また、sound.o をモジュールにして /etc/rc.d/rc.modules から組み込む場合、 isapnp は rc.modules の呼ばれる前に組み込む方が問題が少ないと思われるため /etc/rc.d/rc.S の中で rc.modules が呼ばれる前に
/sbin/isapnp /etc/isapnp.conf
(または /usr/local/bin/isapnp /etc/isapnp.conf)
等とするのがよいでしょう。 なお、RedHat系(isapnp配布元)の場合は、rc.serialの前に rc.sysinit の中で 動かすのが普通です。

参考: JF の PnP-FAQ (Linux Plug-and-Play FAQ)
【訳注終り】

3.3 カーネルのコンパイル

カーネルのコンパイルをする前に、サウンドドライバに対して AWE Driver Extension を適用する必要があります。カーネルソースツリーの中に既に awedrv extension が入っている (これは /usr/src/linux/drivers/sound/lowlevel/ を確認して下さい) 場合でも awedrv ソフトウェアをアップグレードすることが できます。awedrv ソースディレクトリの中のインストール方法に従って下さい。 要するにカーネルソースにパッチをあてるインストール・スクリプトを実行する 必要があるのです。

インストール・スクリプトを実行した後でカーネルソースツリーをアップグレー ドした場合は注意して下さい。 このインストール・スクリプトはファイルが存在するかをチェックするだけで、 必要なパッチをあてることはしません。

【訳注】 このスクリプトは、ある特定のファイルが存在するかどうかをチェック して(それを手がかりに)動作するので、もしそのファイルがすでに存在して(しま って)いると必要なファイルにパッチが当てられない、という意味です。
【訳注終り】

カーネルソースをアップグレードした後、スクリプトを実行する前に drivers/sound/lowlevel/awe_wav.c ファイルを削除するようアドバイス します。

次に、サウンドサポートのためにカーネルの構築をする必要があります。あなたが カーネルの構築に関して少しだけ知っていることを期待しますが、詳しくは Sound HOWTO と Kernel HOWTO をご覧下さい。カーネルソースのディレクトリ(例えば /usr/src/linux) に移動し、次のようにします。

# make config

または make menuconfig あるいは make xconfig とします。次に通常通りカーネ ルの設定をします。特別にあなたのシステムに合わせた、小さくて且つ強力なカー ネルをメイクするためにこの機会を使いましょう。 サウンドドライバをローダブルモジュールとしてインストールしたい (PnPカード の場合は必須です)なら、(きっとあなたはそうするでしょうけど) "Enable loadable module support" で必ず Y と答えてください。

あるところでサウンドカードをサポートするか(したいか)どうかを質問されます。 PnP カードではない場合は、Y または M の何れを答えても構いません。 PnP カードの場合は、モジュールにするために M と答える必要があります。 PnP カードの場合は、サウンドカードサポートをモジュールとしてコンパイルする 必要がありますが、これは、PnP カードはモジュールがロードされる前に初期化 されなければならないからです。

下記の質問には Y と答え、それ以外には全て N と答える必要があります。


Sound Blaster (SB, SBPro, SB16, clones) support (CONFIG_SB) [Y/n/?]
Generic OPL2/OPL3 FM synthesizer support (CONFIG_ADLIB) [Y/n/?]
/dev/dsp and /dev/audio support (CONFIG_AUDIO) [Y/n/?]
MIDI interface support (CONFIG_MIDI) [Y/n/?]
FM synthesizer (YM3812/OPL-3) support (CONFIG_YM3812) [Y/n/?]
lowlevel sound driver support [Y/n/?]
AWE32 support (CONFIG_AWE32_SYNTH) [Y/n/?]

最後のものだけが実際に Wave Table シンセのためのものです。それ以外は OSS/Free サウンドドライバからの SB 16 オプションです。

さらにサウンドカードの I/O ポートを設定する必要があります。ヒントとして isapnp.conf ファイルがあるならそれを見て下さい。私の場合は下記のデフォル ト値で OK でした。カーネルコンフィグレーションスクリプトからのデフォルト 値はだめなので注意して下さい。(特に SBC_IRQ と SB_MPU_BASE の値は、ほと んどのカードには不適当と思われます)


I/O base for SB Check from manual of the card (SBC_BASE) [220]
Sound Blaster IRQ Check from manual of the card (SBC_IRQ) [5]
Sound Blaster DMA 0, 1 or 3 (SBC_DMA) [1]
Sound Blaster 16 bit DMA (_REQUIRED_for SB16, Jazz16, SMW) 5, 6 or 7
(use 1 for 8 bit cards) (SB_DMA2) [5]
MPU401 I/O base of SB16, Jazz16 and ES1688 Check from manual of the card
(SB_MPU_BASE) [330]
SB MPU401 IRQ (Jazz16, SM Wave and ES1688) Use -1 with SB16 (SB_MPU_IRQ) [-1]

それではカーネルの再構築をしましょう。Debian のユーザは kernel-package を使うべきです。このパッケージは、Debian パッケージをインストールするのと 同じくらい簡単にカーネルのコンパイルができます。/usr/doc/kernel-package/ のドキュメントをご覧下さい。ここにはヒントがあります:

# make-kpkg clean
# make-kpkg -revision custom.1.0 kernel_image

そして次のようにします。

# dpkg -i /usr/src/kernel-image-2.0.29_custom.1.0_i386.d

他の Linux ディストリビューションの場合は、新しいカーネルをコンパイルする 標準的な方法に従って下さい。また、下記の2つも忘れずに。

# make modules
# make modules_install

【訳注】Slackware の場合、# make config (または menuconfig , xconfig) の あと次のようにします。

# cd /usr/src/linux
# make dep
# make clean
# make
# make zlilo (カーネルのインストール。LILO を使っている場合)
# make modules
# make modules_install
# depmod -a
【訳注終り】

詳しくは Sound HOWTO とKernel HOWTO をご覧下さい。

3.4 リブート

新しいカーネルをインストールした後はリブートする必要があります。(手元に 動作するブートディスクを用意しておくこと) 起動することを祈りましょう。

PnP カードの場合は、(前述のように)ブートスクリプトの中で、あるいは手動で isapnp を起動すること。

# /sbin/isapnp /etc/isapnp.conf
Board 1 has Identity 74 00 00 e3 10 48 00 8c 0e:  CTL0048 Serial No 58128
[checksum 74]

サウンドドライバをモジュールとしてコンパイルしたのであれば、次のように してインストールできます。

# modprobe -a sound
AWE32 Sound Driver v0.3.3e (DRAM 2048k)

メモリの検出が正しくないと考えるなら(ある人から報告を受けたのですが、その人の AWE64 は 4096KB のメモリを積んでいるにもかかわらず、28672KB と『検出された』 そうです) awedrv ソフトウェアのアップグレードをするか、または下記のように /usr/src/linux/drivers/sound/lowlevel/awe_config.h ファイルにメモリの量を定義 するかの何れかを試してみて下さい。

#define AWE_DEFAULT_MEM_SIZE  4096   /* kbytes */

申し訳ないけど、カーネルを再コンパイルする必要があります。(たぶんモジュー ルのコンパイルだけで十分だとは思いますが、確かではありません)

これが動いたら、サウンドモジュールを自動的にロードしたいと思うでしょう。 kerneld を使う (これがなぜ良くないか 2.4項 で説明しました) か、または /etc/modules に(Debian の場合) sound という 1行を追加するか、あるいは起動スクリプトに /sbin/modprobe -a sound という追加します。


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