当前位置:Linux教程 - Linux - Alsa-sound-mini-HOWTO(四)

Alsa-sound-mini-HOWTO(四)


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

照以下步骤做:

编辑 /etc/conf.modules(後有范例)
执行 ''modprobe snd-card'', 其中 snd-card 是您的音效卡名称 [ 我觉得奇怪, kerneld 应该负责载入它不是吗? VS]
这是 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 美金的)所做的一样. 注意这只是模拟而已.

5. 测试及使用
现在应该是试试驱动程式是不是真能用的时候了. 接者就是使用它.

5.1 /proc 档案系统
您可以在 /proc 目录下找到很多关於您的系统的有用资讯. /proc 是一个""虚拟的""档案系统, 意即它并非真正存在, 而是和您正在执行的各程序间的连结. 要让 /proc 可用, 您需要将它编译进核心. 多数 Linux 安装套件已将它设为预设值, 但如果您重编译并且并没有将 /proc 包进来, 那麽在 /proc 下将什麽也没有.

/proc/modules 记载了关於载入的模组的资讯. 当 ALSA 音效驱动程式载入後, 如果您打入 cat /proc/modules, 应该看到像这样的东西:

snd-pcm1-oss 4 0
snd-sb16 1 1
snd-sb-dsp 4 [snd-sb16] 0
snd-pcm1 4 [snd-pcm1-oss snd-sb-dsp] 0
snd-pcm 3 [snd-pcm1-oss snd-sb16 snd-sb-dsp snd-pcm1] 0
snd-mixer 3 [snd-pcm1-oss snd-sb16 snd-sb-dsp] 1
snd-mpu401-uart 1 [snd-sb16] 0
snd-midi 4 [snd-sb16 snd-sb-dsp snd-mpu401-uart] 0
snd-opl3 1 [snd-sb16] 0
snd-synth 1 [snd-sb16 snd-opl3] 0
snd-timer 1 [snd-opl3] 0
snd 8 [snd-pcm1-oss snd-sb16 snd-sb-dsp snd-pcm1 snd-pcm snd-mixer snd-mpu401-uart snd-midi snd-opl3 snd-synth snd-timer] 0

如果在安装驱动程式时有哪步搞错了, 您仍能看到一堆 ""snd"" 设备, 但没有音效支援.
例如说(请千万不要照着下面下命令, cs4236 驱动程式需要参数):

win3:~# modprobe snd-card-cs4236
/lib/modules/2.0.35/misc/snd-card-cs4236.o: init_module: Device or resource busy
snd-mixer: Device or resource busy
win3:~# cat /proc/modules
snd-cs4236 2 0
snd-cs4231 3 [snd-cs4236] 0
snd-timer 1 [snd-cs4231] 0
snd-pcm1 4 [snd-cs4236 snd-cs4231] 0
snd-mixer 3 [snd-cs4236 snd-cs4231] 0
snd-pcm 3 [snd-cs4236 snd-cs4231 snd-pcm1] 0
snd-mpu401-uart 1 0
snd-midi 4 [snd-mpu401-uart] 0
snd-opl3 1 0
snd-synth 1 [snd-opl3] 0
snd-timer 1 [snd-cs4231 snd-opl3] 0
snd 8 [snd-cs4231 snd-timer snd-pcm1 snd-mixer snd-pcm] 0

您可藉由看 /proc/asound/cards 内容来看音效卡是否存在. 例如:

bash$ cat /proc/asound/cards
0 [card1 : SB16 - Sound Blaster 16
Sound Blaster 16 at 0x220, irq 5, dma 1&5

在刚刚的例子中(就是我忘了加参数的), 输出会是像:
win3:~# cat /proc/asound/cards
--- no soundcards ---

若 CS4236 卡能用, 将有以下输出
0 [card1 ]: CS4236 - CS4237B
CS4237B at 0x534, irq 7, dma 1&0

如果您再三检查您的设定正确後, 仍然找不到音效卡, 那麽去看看问题解决那节.
/proc/asound/ 虚拟目录显示了关於此驱动程式的许多资讯. 请注意 /proc/asound 在您载入第一个 ALSA 模组後才会出现. 如果没有 /proc/asound, 那麽就是 ""snd"" 模组没有正确安装好. 您可以在 /proc/asound/cards 档中找到安装好的卡, 然後在 /proc/asound/0 找到关於 0 号卡, /proc/asound/1 中关於 1 号卡的资讯.

如果 cat /proc/asound/ 显示像

ES1370 DAC2/ADC
Playback isn''t active.
Record isn''t active.

这是说您的驱动程式一切都很好, 但目前并没有事做(所以一切正常).
还有第三种找音效设备的方法, 就是如果您有 OSS 相容驱动程式, 那麽就有 /dev/sndstat 设备档. ALSA 驱动程式会体贴的提醒您不要依赖这些资讯, 它只是为跟 OSS 相容而做的. 由 /proc/asound 可以简单的得到更好的资讯.