以下是在 Linux 下支持 SB AWE 的要求
/usr/src/Linux/drivers/sound/Readme
中检查),如果你有一张 PnP 卡,你还需要
请查看 来源 部分,以获取有关在哪里可以获得这些程序的信息。
如果你有一个 Debian GNU/Linux 系统,这意味着你需要 kernel-source-<version>
、awe-drv
软件包,可能还需要 isapnptools
软件包。你可能还需要其他一些 awe-*
软件包,尽管它们不是必需的。我强烈推荐使用 kernel-package
以方便内核编译和安装。
假设你已将声卡正确安装到主板上的插槽中,并且可能已经在 DOS 或 Windows 环境下测试过它。
下一步是在启动时初始化声卡,前提是它是一张 PnP 卡。按照源代码包中的文档编译并安装 isapnptools
(或者直接使用 Debian 二进制软件包),并以
# pnpdump > /etc/isapnp.conf
root 用户身份运行。这将为你的 PnP 卡生成一个希望是正确的配置文件,但所有设备都被注释掉了。请仔细编辑此文件,并将 DMA 通道、I/O 基址和中断的值与 DOS 或 Windows 环境下声卡的配置进行比较(如果可能,在 Win95 中,查看设备管理器中 resources
下声卡使用的资源)。如果你遇到问题,请仔细阅读 isapnptools
附带的文档。
注意: isapnptools
经常无法检测到 SB AWE 波表设备的全部三个 I/O 端口。请仔细检查你的 isapnp.conf
文件中的 WaveTable
条目,并与本 HOWTO 末尾的示例进行比较。如有必要,调整 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
的人员也会感兴趣,我认为)。
注意: 确保最后一行是 (WAITFORKEY)
,旧版本的 pnpdump
有时会省略它。
只有一个 PnP 卡(声卡)的示例 isapnp.conf
可以在文档末尾找到(请参阅 示例 <tt>isapnp.conf</tt> 部分)。
如果你有一个 Debian 系统,则无需进一步调整。 isapnp
将在启动时在 /etc/init.d/boot
中使用以下脚本代码启动,你可能希望将其包含在你的启动脚本中
# 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
在加载模块之前启动(见下文)。
在重新编译内核之前,你必须将 AWE 驱动程序扩展应用到声卡驱动程序。即使你的内核源代码树已经包含了 awedrv
扩展(检查 /drivers/sound/lowlevel/
),你可能也想升级 awedrv
软件。按照 awedrv
源代码目录中的安装说明进行操作。简而言之,你必须运行一个安装脚本,该脚本将补丁应用于内核源代码。
如果你在运行安装脚本后升级了内核源代码树,请务必小心。该脚本仅检查某个文件是否存在 - 如果存在,则不会应用必要的补丁。强烈建议你在升级内核源代码后运行脚本之前删除文件 drivers/sound/lowlevel/awe_wav.c
。
接下来,你必须配置内核以支持声卡。我希望你对内核编译有所了解;有关详细信息,请参阅声卡 HOWTO 和内核 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/?]
只有后者实际上是用于波表合成的。其他都是来自 OSS/Free 声卡驱动程序的 SB 16 选项。
此外,你必须配置声卡 I/O 端口。如果你有 isapnp.conf
文件,请查看该文件以获取提示。对我来说,以下默认值就足够了。请注意,内核配置脚本中的默认值可能是错误的(尤其是 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.deb
。
如果你有另一个 Linux 发行版,请按照标准方式编译新内核。不要忘记 make modules
和 make modules_install
。有关更多信息,请参阅声卡 HOWTO,或许还有内核 HOWTO。
安装新内核后,你应该重启系统(确保手边有一个可用的启动盘)。祈祷一切顺利。
如果你有一张 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)
如果你认为内存检测不正确(我收到一份报告,有人拥有一张 4096k 的 AWE64,但“检测到”了 28672k),请尝试升级 awedrv
软件,或在文件 /usr/src/linux/drivers/sound/lowlevel/awe_config.h
中指定内存量,例如
#define AWE_DEFAULT_MEM_SIZE 4096 /* kbytes */
抱歉,你必须重新编译内核(或许编译模块就足够了,但我不能确定)。
如果它工作正常,你可能希望自动加载声卡模块。你可以使用 kerneld
(为什么这是一个坏主意在第 1.4 节中解释)或将包含 sound
的单行添加到你的 /etc/modules
(在 Debian 中)或将 /sbin/modprobe -a sound
添加到你的启动脚本中。