Next Previous Contents

4. 载入驱动程序

有两种使用 ALSA 音效模块的方法. 笔者个人比较喜欢使用手动的方法, 也就是在开机 时安插驱动程序. ALSA 驱动程序是以可载入/卸除模块为目标来设计 -- 例如说它们不会在载入后重设音量 -- 所以您可以简单地使用 kerneld 的方法.

(译注: 原文直译为 ALSA 驱动程序设计成可载入/卸除模块, 但译者认为 OSS 也可以 这么做(只差它会重设音量, 对模块使用者来说较不方便, 虽然解决办法是有(见 Sound HOWTO)), 这么翻无法凸显 ALSA 的优点, 故翻成上面的意思. 希望没误解...)

请一定要阅读 向前兼容这节, 如果您想要和以前的程序兼容的话.

4.1 用 modprobe 安插驱动程序

请注意: 如果您有 PnP 声卡, 您首先要设定正确的(或至少是已知的) IO/IRQ/DMA. 请读 Plug-and-Play-HOWTO. 您已经设定过您的 即插即用 声卡了吗? 好, 那么请继续读下去. 主要部份是 "modprobe snd-<soundcard>", 这样应该就可以. 不过并非所有安装套件都把 /sbin 包含在您的 PATH 环境变数下. 如果您得到 "bash: modprobe: command not found" 这样的回应, 可能是由于 modprobe 没有在 path 中. 试著用 "/sbin/modprobe snd-sb16", 或想办法找出 modprobe 公用程序在哪.

对 Crystal 蕊片组的卡来说可能最困难. ALSA 驱动程序不对这些卡进行自动侦测. 更进一步的信息记载在驱动程序目录下的 INSTALL 档中. 接下来笔者举两个例子, 然后接著是个列表:

Gravis UltraSound (GUS) 及兼容卡:

/sbin/modprobe snd-gusclassic
对完全 16 位元的 SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP):
/sbin/modprobe snd-sb16

4.2 那张卡应该用哪个驱动程序?

Gravis UltraSound Extreme

modprobe snd-gusextreme

Gravis UltraSound MAX

modprobe snd-gusmax

ESS AudioDrive

ESS AudioDrive ES-1688 及 ES-688 声卡

modprobe snd-audiodrive1688

Gravis UltraSound PnP

Gravis UltraSound PnP, Dynasonic 3-D/Pro, STB Sound Rage 32 以及其它用 AMD InterWave (tm) 蕊片的声卡.

modprobe snd-interwave

UltraSound 32-Pro

UltraSound 32-Pro (STB 制 Compaq 使用) 及其它使用 AMD InterWave (tm) 蕊片以及用 TEA6330T 电路来做 bass, treble 及主音量控制的卡.

modprobe snd-interwave-stb

Soundblaster

8-bit Soundblaster 卡 (SoundBlaster 1.0, SoundBlaster 2.0, SoundBlaster Pro)

modprobe snd-sb8

Soundblaster 16

16-bit SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP). 请注意本模块不支持 SoundBlaster VibraX16 声卡.

modprobe snd-sb16

Yamaha OPL3-SA2/SA3 声卡

光是 "modprobe snd-opl3sa" 是无效的, 驱动程序不会自动侦测. 请看后面.

S3 SonicVibes

S3 SonicVibes PCI 声卡. (PINE Schubert 32 PCI)

modprobe snd-sonicvibes

Ensoniq/Soundblaster PCI64

Ensoniq AudioPCI ES1370/1371 PCI 声卡. (SoundBlaster PCI 64)

modprobe snd-audiopci

CS4232/4232A

所有使用 CS4232/CS4232A 蕊片的声卡. 光是 "modprobe snd-card-cs4232" 没用, 不自动侦测, 看后面.

4235 以及其后的

所有使用 CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 蕊片的. 光是 "modprobe snd-card-cs4236" 没用, 不自动侦测, 看后面.

4.3 不自动侦测时怎么载入驱动程序

如果您要用的驱动程序不自动侦测, 您必须在让驱动程序运作前先提供额外信息. 更多信息可在驱动程序目录下的 INSTALL 档中找到.

OPL3-SA2 及 OPL3-SA3

根据 INSTALL 档, 您需要提供驱动程序一切信息. 如果您用 isapnp-tools 来初始化您的卡, 也许可以在 /etc/isapnp.conf 档中看到像下面的值:

snd_port - control port # for OPL3-SA chip
snd_wss_port - WSS port # for OPL3-SA chip (0x530,0xe80,0xf40,0x604)
snd_midi_port - port # for MPU-401 UART (0x300,0x330), -1 = disable
snd_fm_port - FM port # for OPL3-SA chip (0x388), -1 = disable
snd_irq - IRQ # for OPL3-SA chip (5,7,9,10)
snd_dma1 - first DMA # for Yamaha OPL3-SA chip (0,1,3)
snd_dma1_size - max first DMA size in kB (4-64kB)
snd_dma2 - second DMA # for Yamaha OPL3-SA chip (0,1,3), -1 = disable
snd_dma2_size - max second DMA size in kB (4-64kB)

您要用 "modprobe snd-opl3sa snd_port=0xNNN snd_wss_port=0x530 snd_midi_port=-1 snd_fm_port=0x388 snd_irq=5 snd_dma1=0 snd_dma1_size=NN snd_dma2=1 snd_dma2_size=NN" 命令来载入驱动程序(没有 midi 支持, 我仍然相信如果您有合成器之类想连上 Linux 主机, 您需要它. 如果只是听 MIDI 档就不必了.)

上例的 "NN" 值您要给真正的值, 我不晓得合理值是多少, 所以才这么写. 我不晓得 dma 大小的参数是不是非要不可.

CS4232/CS4232A 蕊片

根据 INSTALL 档所言, 对这些卡您要提供 midi port 的信息. 注意对下面例中的卡, 它使用给 3235/6/7/8/9 的驱动程序, 我给了所有信息(除了 DMA 大小), 不然它不会动. 所以您也许就用这整段命令列来载 入驱动程序吧! 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看到这些值:

snd_port - port # for CS4232 chip (PnP setup - 0x534)
snd_cport - control port # for CS4232 chip (PnP setup - 0x120)
snd_mpu_port - port # for MPU-401 UART (PnP setup - 0x300), -1 = disable
snd_fm_port - FM port # for CS4232 chip (PnP setup - 0x388), -1 = disable
snd_jport - joystick port for CS4232 chip (PnP setup - 0x200), -1 =
disable
snd_irq - IRQ # for CS4232 chip (5,7,9,11,12,15)
snd_mpu_irq - IRQ # for MPU-401 UART (9,11,12,15)
snd_dma1 - first DMA # for CS4232 chip (0,1,3)
snd_dma1_size - max first DMA size in kB (4-64kB)
snd_dma2 - second DMA # for Yamaha CS4232 chip (0,1,3), -1 = disable
snd_dma2_size - max second DMA size in kB (4-64kB)

对标准设定值的卡, 您要用 "modprobe snd-card-cs4232 snd_port=0x534 snd_cport=0x120 snd_mpu_port=-1 snd_fm_port=0x388 snd_jport=-1 snd_irq=5 snd_dma1=0 snd_dma1_size=NN snd_dma2=1 snd_dma2_size=NN" 命令来载入驱动程序(没有 midi 支持, 请看 Yamaha OPL-3 的注意事项, 又, 没有支持摇杆). 如果您的 /etc/isapnp.conf 中的值不同, 那么这里的值也该变一下. (用用您的头脑想想比较好 ;)

上例的 "NN" 值您要给真正的值, 我不晓得合理值是多少, 所以才这么写. 我不晓得 dma 大小的参数是不是非要不可.

CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 chips

根据 INSTALL 档所言, 对这些卡您要提供 midi port 以及 control port 的信息. 注意对 CS4237B 的卡, 我给了所有信息(除了 DMA 大小), 不然它不会动. 所以您也许就用这整段命令列来载 入驱动程序, 不只是有 snd_port 及 snd_cport 而已. 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看到这些值:

snd_port - port # for CS4232 chip (PnP setup - 0x534)
snd_cport - control port # for CS4232 chip (PnP setup - 0x120)
snd_mpu_port - port # for MPU-401 UART (PnP setup - 0x300), -1 = disable
snd_fm_port - FM port # for CS4232 chip (PnP setup - 0x388), -1 = disable
snd_jport - joystick port for CS4232 chip (PnP setup - 0x200), -1 = disable
snd_irq - IRQ # for CS4232 chip (5,7,9,11,12,15)
snd_mpu_irq - IRQ # for MPU-401 UART (9,11,12,15)
snd_dma1 - first DMA # for CS4232 chip (0,1,3)
snd_dma1_size - max first DMA size in kB (4-64kB)
snd_dma2 - second DMA # for Yamaha CS4232 chip (0,1,3), -1 = disable
snd_dma2_size - max second DMA size in kB (4-64kB)

您要用 "modprobe snd-card-cs4232 snd_port=0x534 snd_cport=0x120 snd_mpu_port=-1 snd_fm_port=0x388 snd_jport=-1 snd_irq=5 snd_dma1=0 snd_dma1_size=NN snd_dma2=1 snd_dma2_size=NN" 命令来载入驱动程序(没有 midi 支持, 请看 Yamaha OPL-3 的注意事项, 又, 没有支持摇杆).

注意事项:

4.4 使用 kerneld 来载入

kerneld 是个在需要时插入模块, 并在不再使用时卸除它们的服务程序(daemon). 由于笔者没用过 kerneld, 不晓得下 面的信息准不准确. 以下信息来自 ALSA 驱动程序套件的 INSTALL 档. 关于 kerneld 的详尽信息可在 kerneld-mini-HOWTO 中找到.

照以下步骤做:

这是 Gravis UltraSound PnP 声卡的 /etc/conf.modules 范例:
alias char-major-14 snd
alias snd-minor-oss-0 snd-interwave
alias snd-minor-oss-3 snd-pcm1-oss
alias snd-minor-oss-4 snd-pcm1-oss
alias snd-minor-oss-5 snd-pcm1-oss
alias snd-minor-oss-12 snd-pcm1-oss
alias snd-card-0 snd-interwave
options snd snd_major=14 snd_cards_limit=1
options snd-interwave snd_index=1 snd_id="guspnp" snd_port=0x220 snd_irq=5
snd_dma1=5 snd_dma2=6

如果您想插更多卡, 这儿有范例(是同时有 Gravis UltraSound Classic 及 Sound Blaster 16 的情形)

alias char-major-14 snd
alias snd-minor-oss-0 snd-mixer
alias snd-minor-oss-3 snd-pcm1-oss
alias snd-minor-oss-4 snd-pcm1-oss
alias snd-minor-oss-5 snd-pcm1-oss
alias snd-minor-oss-12 snd-pcm1-oss
alias snd-card-0 snd-sb16
alias snd-card-1 snd-gusclassic
options snd snd_major=14 snd_cards_limit=2
options snd-sb16 snd_index=1 snd_port=0x220 snd_irq=5 snd_dma8=1 snd_dma16=5
options snd-gusclassic snd_index=2 snd_irq=11 snd_dma1=6 snd_dma2=7

如果有两片 Gravis UltraSound Classic 声卡, 就像下例:

alias char-major-14 snd
alias snd-minor-oss-0 snd-mixer
alias snd-minor-oss-3 snd-pcm1-oss
alias snd-minor-oss-4 snd-pcm1-oss
alias snd-minor-oss-5 snd-pcm1-oss
alias snd-minor-oss-12 snd-pcm1-oss
alias snd-card-0 snd-gusclassic
alias snd-card-1 snd-gusclassic
options snd snd_major=14 snd_cards_limit=2
options snd-gusclassic snd_index=1,2 snd_port=0x220,0x260 snd_irq=5,11
snd_dma1=5,6 snd_dma2=7,3

4.5 向前兼容

如果您想保留 OSS/Free 或 OSS/Linux 的兼容性, 您还要再加一个驱动程序: snd-pcm1-oss 驱动程序, 提供 OSS 兼容性. 下

modprobe snd-pcm1-oss
命令. 这将提供 /dev/audio 及 /dev/dsp 的支持, 就像 OSS/Free (核心)驱动程序及 OSS/Linux (要 25 美金的)所做的一样. 注意这只是模拟而已.


Next Previous Contents