配置 Linux 以支持声音包括以下步骤
安装声卡。
配置即插即用 (如果适用)。
配置和构建内核以支持声音。
创建设备文件。
启动 Linux 内核并测试安装。
一些 Linux 发行版提供了一个声卡驱动配置实用程序,它可以检测您的声卡并设置所有必要的配置文件,以便为您的声卡加载适当的声音驱动程序。 例如,Red Hat Linux 提供了sndconfig实用程序。 如果您的发行版提供了这样的工具,我建议您尝试使用它。 如果它对您有效,那么您可以跳过本节的其余说明。
如果此方法失败,或者您想遵循手动方法以便更好地理解您正在做什么,那么接下来的章节将详细介绍这些步骤中的每一个。
按照制造商的说明安装硬件,或让您的经销商执行安装。
较旧的声卡通常具有用于 IRQ、DMA 通道等的开关或跳线设置; 记下使用的值。 如果您不确定,请使用出厂默认值。 如果可能,尽量避免与其他设备(例如以太网卡、SCSI 主机适配器、串行和并行端口)冲突。
通常,您应该使用在 DOS 下工作的相同 I/O 端口、IRQ 和 DMA 设置。 但在某些情况下(尤其是对于 PnP 卡),您可能需要使用不同的设置才能在 Linux 下工作。 可能需要进行一些实验。
一些声卡使用 ISA 即插即用协议来配置 i/o 地址、中断和 DMA 通道的设置。 如果您有更新的 PCI 总线类型的声卡,或者使用固定设置或跳线的非常旧的 ISA 声卡,则可以跳过本节。
配置即插即用卡的首选方法是使用 isapnp 工具,该工具随大多数 Linux 发行版一起提供(或者您可以从 Red Hat 的网站 https://#/ 下载它们)。
首先查看您的 Linux 发行版的文档。 它可能已经为您设置了即插即用支持,或者它的工作方式可能与此处描述的略有不同。 如果您需要自己配置它,详细信息可以在 isapnp 工具的手册页中找到。 简而言之,您通常会遵循的流程是
使用pnpdump捕获所有即插即用设备的可能设置,并将结果保存到文件/etc/isapnp.conf.
为声卡选择与系统中任何其他设备不冲突的设置,并在/etc/isapnp.conf中取消注释相应的行。 不要忘记取消注释(ACT Y)命令,该命令靠近末尾。
确保isapnp在系统启动时运行,这通常由启动脚本之一完成。 重新启动系统或手动运行isapnp。
如果由于某种原因您不能或不想使用 isapnp 工具,则还有其他几个选项。 如果您在 Microsoft Windows 95 或 98 下使用该卡,则可以使用设备管理器来设置该卡,然后使用 LOADLIN 程序软启动进入 Linux。 确保 Windows 和 Linux 使用相同的卡设置参数。
如果您在 DOS 下使用该卡,则可以使用icu实用程序,该实用程序随 SoundBlaster16 PnP 卡一起提供,以在 DOS 下对其进行配置,然后使用 LOADLIN 程序软启动进入 Linux。 同样,确保 DOS 和 Linux 使用相同的卡设置参数。
真正的 ISA PnP 支持在 2.4 及更高版本的内核中实现。 现在,一些声卡驱动程序支持自动检测和配置卡,而无需 isapnp 工具。 有关详细信息,请查看卡驱动程序的文档。
您需要内核中存在适用于您声卡的设备驱动程序。 系统上运行的内核可能已经包含您声卡的驱动程序。 在大多数情况下,驱动程序将构建为内核可加载模块。 您可以通过查看/lib/modules目录来检查哪些驱动程序可用作模块。 对于 2.4.4 内核,声音驱动程序通常会出现在/lib/modules/2.4.4/kernel/drivers/sound/中。 如果您看到声卡的驱动程序,您可以尝试使用模块目录并跳过重新编译内核。
如果声音驱动程序尚未构建,您将需要配置和构建一个新的内核。 您可以将声音驱动程序构建到内核中,也可以将其构建为内核可加载模块。 在大多数情况下,首选构建为模块,因为它允许您轻松地尝试加载不同的驱动程序(如果不确定要使用哪个驱动程序),并且驱动程序可以在不需要时卸载,从而释放内存。 如果您不熟悉内核模块并想要更简单的解决方案,则可能需要将驱动程序构建到内核本身中。
应查阅 Linux 内核指南 以获取构建内核的详细信息。 我在这里只提及一些特定于声卡的问题。
如果您以前从未配置过内核以支持声音,那么最好阅读内核声音驱动程序随附的相关文档,特别是特定于您的卡类型的信息。 这些文件可以在内核文档目录中找到,通常安装在/usr/src/linux/Documentation/sound中。 如果缺少此目录,则您可能拥有非常旧的内核版本,或者您尚未安装内核源代码。
按照构建内核的常用程序操作。 当前有三个配置过程的接口。 可以使用make xconfig调用在 X11 下运行的图形用户界面。 仅需要文本显示的基于菜单的系统可作为make menuconfig提供。 原始方法,使用make config,提供了一个简单的基于文本的界面。
配置内核时,将有许多选项用于选择您拥有的声卡类型和要使用的驱动程序选项。 配置工具内的在线帮助应提供每个选项用途的说明。 根据您的知识,选择适当的选项。
配置选项后,您应按照内核指南编译并安装新内核。
为了正常运行,必须为声音设备创建设备文件条目。 这些通常在安装 Linux 系统期间为您创建。 可以使用下面列出的命令进行快速检查。 如果输出如图所示(日期戳会因时间而异),则设备文件几乎肯定没问题。
% ls -l /dev/dsp crw-rw-rw- 1 root root 14, 3 Apr 25 1995 /dev/dsp |
请注意,拥有正确的设备文件本身并不能保证任何事情。 内核驱动程序也必须加载或编译才能使设备工作(稍后会详细介绍)。
在极少数情况下,如果您认为设备文件不正确,则可以重新创建它们。 大多数 Linux 发行版都有一个/dev/MAKEDEV脚本,可用于此目的。
请注意,如果您在 2.4 内核中使用 devfs 文件系统支持,则声音设备文件实际上位于 /dev/sound 中,但会有指向旧设备(例如 /dev/dsp)的符号链接。
您现在应该准备好启动新内核并测试声音驱动程序。 按照您常用的程序安装和重新启动新内核(当然,保留旧内核以防出现问题)。
如果您使用可加载内核模块来支持声音,则需要使用modprobe 命令加载适当的驱动程序,例如,运行命令modprobe sb用于 SoundBlaster 声卡。
启动或加载内核模块后,使用dmesg命令检查类似以下的消息
Soundblaster audio driver Copyright (C) by Hannu Savolainen 1993-1996 sb: Creative SB AWE64 PnP detected sb: ISAPnP reports 'Creative SB AWE64 PnP' at i/o 0x220, irq 5, dma 1, 5 SB 4.16 detected OK (220) sb: 1 Soundblaster PnP card(s) found. Crystal 4280/46xx + AC97 Audio, version 1.22.32, 10:28:40 Apr 28 2001 cs46xx: Card found at 0xf4100000 and 0xf4000000, IRQ 11 cs46xx: Thinkpad 600X/A20/T20 (1014:0153) at 0xf4100000/0xf4000000, IRQ 11 ac97_codec: AC97 Audio codec, id: 0x4352:0x5914 (Cirrus Logic CS4297A rev B) |
该消息应指示已找到声卡,并与您的声卡类型和跳线设置(如果有)匹配。 如果您错误地配置了驱动程序或选择了错误的驱动程序,则驱动程序也可能显示一些错误消息和警告。
本指南的先前版本建议检查 /dev/sndstat 的输出。 这在 2.4 及更高版本的内核中不再受支持。
现在您应该准备好播放一个简单的声音文件。 获取一个声音样本文件,并将其发送到声音设备作为声音输出的基本检查,例如
% cat endoftheworld >/dev/dsp % cat crash.au >/dev/audio |
(确保您不要省略上面命令中的“>”)。
请注意,一般来说,使用cat不是播放音频文件的正确方法,这只是一个快速检查。 您需要获取一个合适的音频播放器程序(稍后描述),它会做得更好。
如果以上命令返回“I/O 错误”,您应该查看使用“dmesg”命令列出的内核消息的末尾。 很可能那里打印了一条错误消息。 最常见的消息是“Sound: DMA (output) timed out - IRQ/DRQ config error?”。 上述消息意味着驱动程序没有从声卡获得预期的中断。 在大多数情况下,这意味着配置给驱动程序的 IRQ 或 DMA 通道不起作用。 使其工作的最佳方法是尝试设备支持的所有可能的 DMA 和 IRQ。
另一种可能的原因是该设备与驱动程序配置的设备不兼容。 当所谓的“SoundBlaster (Pro/16) 兼容”声卡无法与 SoundBlaster 驱动程序一起工作时,几乎肯定是这种情况。 在这种情况下,您应该尝试找出您的声卡兼容的设备(例如,通过发布到 comp.os.linux.hardware 新闻组)。
一些示例声音文件可以从 ftp://tsx-11.mit.edu/pub/linux/packages/sound/snd-data-0.1.tar.Z> 获取
现在您可以验证声音录制。 如果您有声音输入功能,您可以使用如下命令快速测试此功能
# record 4 seconds of audio from microphone % dd bs=8k count=4 </dev/audio >sample.au 4+0 records in 4+0 records out # play back sound % cat sample.au >/dev/audio |
显然,为了使此功能起作用,您需要将麦克风连接到声卡,并且您应该对着麦克风说话。 您可能还需要获取一个混音器程序来将麦克风设置为输入设备并调整录音增益级别。
如果这些测试通过,您可以合理地确信声音 D/A 和 A/D 硬件和软件正在工作。 如果您遇到问题,请参阅本文档的下一节。
如果您在按照本指南中的说明操作后仍然遇到问题,以下是一些需要检查的事项。 检查按复杂程度递增的顺序列出。 如果检查失败,请解决问题,然后再进行到下一个阶段。
您可以检查内核上的日期戳,以查看您是否正在运行使用声音支持编译的内核。 您可以使用uname命令检查类似以下的消息
% uname -a Linux fizzbin 2.2.4 #1 Tue Mar 23 11:23:21 EST 1999 i586 unknown |
或通过显示文件/proc/version:
% cat /proc/version Linux version 2.2.4 (root@fizzbin) (gcc version 2.7.2.3) #1 Tue Mar 23 11:23:21 EST 1999 |
来执行此操作。 如果日期戳似乎与您编译内核的时间不匹配,则您正在运行旧内核。 您真的重新启动了吗? 如果您使用 LILO,您是否重新安装了它(通常通过运行lilo)? 如果从软盘启动,您是否创建了一个新的启动软盘并在启动时使用了它?
如果您使用内核可加载模块,请使用 lsmod 命令确保模块已加载
% /sbin/lsmod Module Size Used by sb 6320 0 (unused) sb_lib 35040 0 [sb] uart401 6544 0 [sb_lib] sound 59888 0 [sb_lib uart401] soundcore 4144 5 [sb_lib sound] isa-pnp 28304 0 [sb] ... |
执行此操作的最简单方法是检查dev/sndstat的输出,如前所述。 如果输出与预期不符,则内核配置或构建出现问题。 再次启动安装过程,从内核的配置和构建开始。
确保内核启动时检测到声卡。 您应该在启动时看到一条消息。 如果消息滚动出屏幕,您通常可以使用dmesg命令检查类似以下的消息
% dmesg |
或
% tail /var/log/messages |
来回忆它们。 如果未找到您的声卡,则说明有问题。 确保它确实已安装。 如果声卡在 DOS 下工作,那么您可以合理地确信硬件工作正常,因此很可能是内核配置问题。 要么您将声卡配置为错误的类型或错误的参数,要么您的声卡与任何 Linux 内核声卡驱动程序都不兼容。
一种可能性是您的声卡是需要 DOS 驱动程序初始化的兼容类型之一。 尝试启动 DOS 并加载供应商提供的声卡驱动程序。 然后使用Control-Alt-Delete软启动 Linux。 确保 Linux 的卡 I/O 地址、DMA 和 IRQ 设置与 DOS 下使用的设置相同。 阅读声音驱动程序源发行版中的Readme.cards文件,以获取有关配置您的卡类型的提示。
如果本文档中未列出您的声卡,则 Linux 驱动程序可能不支持它。 您可以查看本文档末尾列出的一些参考资料以获得帮助。
尝试使用本文档前面列出的/dev/audio设备从dd命令进行读取。 该命令应无错误运行。
如果它不起作用,则问题很可能是 IRQ 或 DMA 冲突或某种硬件不兼容(Linux 不支持该设备,或者驱动程序配置了错误的设备)。
一个很小的可能性是硬件损坏。 如果可能,尝试在 DOS 下测试声卡,以排除这种可能性。
如果您仍然有问题,以下是一些最后建议您尝试的事项
仔细重新阅读本指南文档
阅读本文档末尾列出的参考资料和相关的内核源代码文档文件
向comp.os.linux或其他 Usenet 新闻组之一发布问题(comp.os.linux.hardware 是一个不错的选择;由于这些组中的流量很大,因此在文章的主题标题中放置字符串“sound”有助于让合适的专家看到它)
使用具有智能选择的搜索条件的 Web/Usenet 搜索引擎可以快速获得非常好的结果。 其中一个选择是 http://www.google.com
尝试使用最新的 Linux 内核(但仅作为最后的手段,最新的开发内核可能不稳定)
向声音驱动程序的作者发送邮件
向声音指南的作者发送邮件
启动 emacs 并键入Esc-x doctor :-)