Home -- Michael's Blog :: Just Do IT -- Manuals

7.2. 安装声卡

贡献者 Moses Moore.

7.2.1. 选择正确的设备

在开始之前,你应该清楚声卡类型、所用的芯片以及它是PCI还是ISA卡。FreeBSD支持大量的PCI卡和ISA卡。如果你在下面的列表中没有找到你的声卡类型,那么你可以去pcm(4)看看。虽然下面的列表不全,不过也包括大部份最常见的声卡类型。

要使用声卡,你就应装载正确的驱动程序。完成的方式有两种:最简单的是使用命令kldload(8)来装载一个内核模块,在命令行输入

# kldload snd_emu10k1.ko

或者在文件/boot/loader.conf里加入一行,内容如下

snd_emu10k1_load="YES"

上边实例用于Creative SoundBlaster Live!声卡。其它可装载的模块列在文件/boot/defaults/loader.conf里边。 如果不知道应该使用哪个驱动, 您可以尝试加载 snd_driver, 这是一个“元驱动”, 它会自动加载绝大多数常见的设备驱动, 这有助于帮您快速找到合适的驱动。

另外,你也可以把支持你声卡的代码静态地编译到内核里去。下面的部份就采用这种方式支持硬件给出提示。关于重新编译内核,请参考第 8 章

7.2.1.1. Creative, Advance, and ESS 声卡

如果你有上面的某一种声卡的话,就请增加:

device pcm

到内核配置文件里去。如果你的是即插即用的ISA卡,就请再加入:

device sbc

对于非即插即用的ISA卡,加入:

device pcm
device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15

到内核配置文件里去。上面给出的设置都是默认的。你可能要改变IRQ或其它的设置来符合你的声卡。参看sbc(4)页面获取更多信息。

注: Sound Blaster Live声卡在FreeBSD 4.0以下没有补丁是不被支持的,而关于补丁本章并不涉及。因此如果你要用这种声卡的话,建议你升级系统到最新的稳定版(STABLE)。

7.2.1.2. Gravis UltraSound Cards

如果是即插即用的ISA卡,请增加:

device pcm
device gusc

到内核配置文件里去。如果是即插即用的ISA卡,就请增加:

device pcm
device gus0 at isa? port 0x220 irq 5 drq 1 flags 0x13

到内核配置文件里去。你可能要改变IRQ或其它的设置来符合你的声卡。参看gusc(4) 页面获取更多信息。

7.2.1.3. Crystal Sound Cards

对于Crystal声卡,请增加:

device pcm
device csa

到内核配置文件里去。

7.2.1.4. 一般性支持

如果是即插即用的ISA卡或PCI卡,请增加:

device pcm

到内核配置文件里去。如果是非即插即用的ISA卡并且又没有桥路驱动器(bridge driver)的话,就请增加:

device pcm0 at isa? irq 10 drq 1 flags 0x0

到内核配置文件里去。你可能要改变IRQ或其它的设置来符合你的声卡。

7.2.1.5. 集成声卡

一些集成声卡的计算机可能需要在内核配置文件中做如下设置:

options PNPBIOS

注: 如果你正在运行FreeBSD 5.0 或更新版本,那么就不需要PNPBIOS选项了。这个选项已经被移除,而其功能现在是一直是有效的。

7.2.2. 创建和测试设备结点

重启后,登入系统,检查文件/var/run/dmesg.boot中的设备,如下所示:

# grep pcm /var/run/dmesg.boot
pcm0: <SB16 DSP 4.11> on sbc0

输出结果可能与你的系统有所不同。如果没有pcm设备显示正常,则说明先前什么地方出了错。如果真的出了错,就请再回到内核配置文件中检查一下,确信是否选对了设备。一般性的问题列在第 7.2.2.1 节中。

注: 如果你用的是FreeBSD 5.0或更新,你可以放心略过剩下部份不看。这些版本都使用了devfs(5)来自动创建设备结点。

如果先前的命令返回pcm0,你必须以用户root运行下边的命令:

# cd /dev
# sh MAKEDEV snd0

如果先前的命令返回pcm1,执行上边同样的命令,记得把snd0换成snd1

注: 上边的命令不会创建 /dev/snd 设备!

MAKEDEV能创建一组设备结点,其中包括:

设备 描述
/dev/audio Sparc®兼容的音频设备
/dev/dsp 数字声音设备
/dev/dspW /dev/dsp一样,只是采样率是16位(bit)
/dev/midi 存取 Raw 和 midi 设备
/dev/mixer 控制端口混音设备
/dev/music 2阶音序接口
/dev/sequencer 音序设备
/dev/pss 可编程设备接口

如果一切顺利,你的声卡应该能发声了。如果你的CD-ROM或者DVD-ROM光驱连接到了声卡,你现在就可以放一张CD到光驱里使用cdcontrol(1)命令来播放了:

% cdcontrol -f /dev/acd0c play 1

程序各不相同,如audio/workman提供了很好的界面。或许你会想安装一个像audio/mpg123一样的程序来听MP3。

7.2.2.1. 常见问题

错误信息 解决方法
``unsupported subdevice XX''

一个或多个设备结点没有正确地建立。重复上面的步骤。

``sb_dspwr(XX) timed out''

I/O端口没有设置正确。

``bad irq XX''

IRQ设置不正确。确信设定的IRQ和声卡的IRQ是一样的。

``xxx: gus pcm not attached, out of memory''

没有足够的内存空间供设置使用。

``xxx: can't open /dev/dsp!''

使用命令fstat | grep dsp进行检查是否有其它的程序打开了设备。值得注意的是esoundKDE提供的声卡支持造成麻烦。

7.2.3. 利用多个声源

贡献者Munish Chopra.

同时有多个声源的声音在播放,这是完全可能的,例如当esound或者artsd不支持与其它程序共享音频设备时。

FreeBSD可以通过虚拟声道(Virtual Sound Channels)来达到,具体设置用工具sysctl(8)。虚拟的声道可以能过在内核里混合声音来混合声卡里播放的声道。

使用两条sysctl命令来设置虚拟声道的数目。如果你是root用户,照此做:

# sysctl hw.snd.pcm0.vchans=4
# sysctl hw.snd.maxautovchans=4

上面的实例设定了4个虚拟声道,这也是实际上所使用的数目。hw.snd.pcm0.vchanspcm0的虚拟声道数,一当链接上一个设备它就可配置了。 hw.snd.maxautovchans是分配给新的音频设备的虚拟声道数,此时这个设备要用kldload(8)来链接。因为pcm模块可以独立装载许多硬件驱动程序,因此hw.snd.maxautovchans也就可以存储分配给以后链接到的设备的虚拟声道数。

如果不使用devfs(5),你就不得不把你的应用程序指向 /dev/dsp0x,这里x为0到3,因为在上面的例子里hw.snd.pcm.0.vchans被设为了4。在使用devfs(5)的系统里,上边那些会自动分配给用户。

7.2.4. 如何设置混音器通道值

这一节的作者是 Josef El-Rayes.

不同的混音通道的默认音量是硬编码进 pcm(4) 驱动程序的。 同时,也有很多应用或服务程序提供了允许用户直接设置并记住这些值的功能。 不过这并不是一个很好的解决方案, 您可能希望在驱动一级有一个可以设置的默认值。 这可以通过在 /boot/device.hints 定义适当的值来实现。 例如:

hint.pcm.0.vol="100"

pcm(4) 加载时,这一设置将改变音量通道原本是100的默认值。

注: 只有 FreeBSD 5.3 和更高版本才支持这一功能。

Michael's Blog :: Just Do IT -- manuals