免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12
最近访问板块 发新帖
楼主: fenglu65
打印 上一主题 下一主题

[FreeBSD] FreeBSD5下的板载声卡问题!郁闷死我了! [复制链接]

论坛徽章:
0
11 [报告]
发表于 2007-03-04 15:26 |只看该作者
这里就提到了options     PNPBIOS





7.2 安装声卡
贡献者 Moses Moore. Enhanced for FreeBSD 5.X by Marc Fonvieille.
7.2.1 配置系统
在开始之前,您应该清楚声卡类型、所用的芯片以及它是 PCI 还是 ISA 卡。 FreeBSD 支持种类繁多的 PCI 和 ISA 卡。检查 Hardware Notes 中支持的音频设备列表看看是否支持您的声卡。这份文档也只论及支持您的声卡的驱动程序。

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

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

csnd_emu10k1_load="YES"
上边实例用于 Creative SoundBlaster? Live! 声卡。其它可装载的模块列在文件/boot/defaults/loader.conf里边。如果不知道应该使用哪个驱动, 您可以尝试加载 snd_driver module:

# kldload snd_driver
这是个 meta 驱动,一次加载了最常见的设备驱动。 这会提高搜索正确驱动的速度。也可以通过 /boot/loader.conf 工具来加载所有的声卡驱动。

如果希望在加载了 snd_driver meta 驱动之后了解到底选择了哪种声卡, 可以通过使用 cat /dev/sndstat 来查询 /dev/sndstat 文件。

注意: 在 FreeBSD 4.X 下,要加载所有的声卡驱动,您必须加载 snd 模块而不是 snd_driver 模块。

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

7.2.1.1 定制内核使其支持声卡
要做的第一件事情就是添加通用音频驱动 sound(4) 到内核中,您需要添加下面这行到内核配置文件中:

device sound
在 FreeBSD 4.X 下,使用下面这行:

device pcm
接下来就是加入对我们所用声卡的支持了。 首先需要确定我们的声卡需要使用哪一个驱动。您可以参考 硬件兼容列表 所列出的音频设备, 以确定您声卡的驱动。 例如, Creative SoundBlaster Live! 声卡由 snd_emu10k1(4) 驱动来支持。 要添加它, 需要在内核编译配置文件中加入下面一行:

device "snd_emu10k1"
一定要阅读驱动的联机手册了解如何使用它们。 关于内核配置文件中声卡驱动的写法, 也可以在 /usr/src/sys/conf/NOTES 文件 (对于 FreeBSD 4.X, 则是 /usr/src/sys/i386/conf/LINT)。

非即插即用的 ISA 卡可能需要您为内核提供一些关于声卡配置的信息 (IRQ、 I/O 端口,等等)。 这项工作可以通过 /boot/device.hints 文件来完成。系统启动时, loader( 将读取这个文件, 并将其中的配置传给内核。 例如, 旧式的 Creative SoundBlaster 16 ISA 非即插即用卡需要使用 snd_sbc(4) 驱动,您可以在内核编译配置文件中增加如下配置:

device snd_sbc












还有下面这些到 /boot/device.hints中:

hint.sbc.0.at="isa"
hint.sbc.0.port="0x220"
hint.sbc.0.irq="5"
hint.sbc.0.drq="1"
hint.sbc.0.flags="0x15"
这样,声卡使用 0x220 I/O 端口和 IRQ 5。

/boot/device.hints 文件的写法会在声卡驱动的联机手册中描述。在 FreeBSD 4.X 上,这些设定直接写进内核配置文件中。 对于我们的 ISA 卡这种情况,我们只要使用这行:

device sbc0 at isa? port 0x220 irq 5 drq 1 flags 0x15
上面所展示的是默认的配置。 有时候, 您可能需要更改 IRQ 或其他配置,以适应声卡的实际情况。 查看 snd_sbc(4) 联机手册了解更多信息。

注意: 在 FreeBSD 4.X 下,一些主板内建声卡设备的系统需要在内核配置文件中配置下面的选项:

options PNPBIOS
7.2.2 测试声卡
用修改过的内核重起,或者加载了需要的模块之后, 声卡将会出现在您的系统消息缓存中 (dmesg(),就像这样:

pcm0: <Intel ICH3 (82801CA)> port 0xdc80-0xdcbf,0xd800-0xd8ff irq 5 at device 31.5 on pci0
pcm0: [GIANT-LOCKED]
pcm0: <Cirrus Logic CS4205 AC97 Codec>
声卡的状态可以通过 /dev/sndstat 文件来查询:

# cat /dev/sndstat
FreeBSD Audio Driver (newpcm)
Installed devices:
pcm0: <Intel ICH3 (82801CA)> at io 0xd800, 0xdc80 irq 5 bufsz 16384
kld snd_ich (1p/2r/0v channels duplex default)
您系统的输出可能与此不同。如果没有看到 pcm 设备,回顾并检查一下前面做的。 重新检查您的内核配置文件并保证选择了正确的设备。常见问题列在第 7.2.2.1 节一节。

如果一切正常,您现在应该拥有一个多功能声卡了。 如果您的 CD-ROM 或者 DVD-ROM 驱动器适当的与声卡相关联, 您可以把 CD 放入驱动器并用 cdcontrol(1) 来播放:

% cdcontrol -f /dev/acd0 play 1
许多应用程序,比如 audio/workman 可以提供一个友好的界面。您可能想要安装一个应用程序比如 audio/mpg123 来听 MP3 音频文件。一个快速的测试声卡正在发送数据到 /dev/dsp 的方式,像这样做:

% cat filename > /dev/dsp
这里 filename 可以是任意文件。这行命令会产生一些噪音,证明声卡果真在工作。

注意: FreeBSD 4.X 用户需要创建声卡设备节点才能使用。如果在消息缓存中展示出来的卡是 pcm0, 您必须以 root 来运行下面这两行:

# cd /dev
# sh MAKEDEV snd0
如果检测的声卡返回 pcm1, 做上面展示的同样的步骤,只是要用 snd1 来取代 snd0。

MAKEDEV 会创建一组设备节点让相关联应用程序的不同声音使用。

声卡混音级别可以通过 mixer( 命令更改。更多细节可以在 mixer( 联机手册中找到。

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 进行检查是否有其它的程序打开了设备。 值得注意的是 esound 和 KDE 提供的声卡支持经常是造成麻烦的祸根。


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

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

使用两条sysctl命令来设置虚拟声道的数目。 如果您是 root 用户, 执行下面的操作:

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

注意: 您不能在使用某个设备的时候改变其虚拟通道数。首先需要关闭所有使用该设备的程序, 如音乐播放器或声音服务。

如果不使用 devfs(5),就必须把应用程序指向 /dev/dsp0.x, 这里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-RELEASE 和更高版本才支持这一功能。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP