Alsa-sound-mini-HOWTO <author>Valentijn Sessink <tt/valentyn@alsa-project.org/ <newline>译者: 伍永康 <tt/yorkwu@ms4.hinet.net/ <date>中文版v0.2, 2000年6月15日 (原v0.2, 18 May 1999) <abstract> 本文描述 Linux 的 AKSA 音效驱动程式的安装. 由於它们相容. 这个音效驱动程式可以用来取代平常用的音效驱动程式. </abstract> <toc> <sect>Introduction <p> 这是 ALSA 音效驱动程式的 mini HOWTO. 它提供您关於安装及使用 ALSA 音效驱动程式的资讯. ALSA 驱动程式是完全模组化, 并支援 kerneld 及 kmod. 它和 OSS API 相容, 但超越了其可能性. 一句话: 相容, 但更好. <sect1> 铭谢 <p> 本文件包含了我从 ALSA 驱动程式网站得到的资讯. 其结构是由 SB-mini-HOWTO 分来的, 主要是它的结构和我理想中的很接近. 感谢有 <htmlurl url="http://www.sgmltools.org" name="SGML">Tools 软体, 使得本 HOWTO 只用一个共用的原始档, 可以产生多种格式. 谢谢 Erik Warmelink 校阅(proof reading), 还有 Alfred Munnikes 提供很多问题和有助的建言, Yamahata Isaku 翻译成日文, 以及 Miodrag Vallat 翻成法文. 接下来, Steve Crowd 很好的校订了全文, 以及 Marc-Aur`ele Darche, Piotr Ingling, Juergen Kahrs 及 Tim Pearce 提供有用的小技巧(tip)及增补. <sect1> 版本沿革 <p> 1.4 版 - 1999 年 5 月 18 日. 加入了法文版的 URL, 改了更多 URL. 1.3 版 - 1999 年 5 月 16 日. 谢谢 Jaroslav, 在 ALSA 计画网站建了本 HOWTO 的新家. 因此, 电邮及网站位址有了些改变. 1.2 版 - 1999 年 5 月 11 日. 几处更新. 1.1 版 - 1999 年 3 月 11 日. 在新的 0.3 版驱动程式中加入了一些音效卡的驱动程式. 写了一点关於 2.2 版核心的部份. 1.0 版 - 1999 年 2 月 8 日. 在问题解决那节加进了些东西, 看来蛮完整了. 0.3 beta 版 - 1999 年 1 月 20 日. 在 ALSA 网站上有了连结. 哈! 终於是正式的了! 0.2 alpha 版. 1999 年 1 月中. 第一个 sgml 版. 0.1 alpha 版. 1999 年 1 月. 第一版, 多数是 HTML. Still: please submit any patches in plain English, you native speakers! 还有: 使用英语的各位, 请多寄纯英文的 patch! <sect1> 本文件的新版本在哪? <p> 最新版本可在<htmlurl url="http://www.alsa-project.org/~valentyn" name="http://www.alsa-project.org./˜valentyn">找到. 其它格式(全部的 html, sgml, txt)在 <htmlurl url="http://www.alsa-project.org/~valentyn/other-formats" name="other-formats"> 目录下. Yamahata Isaku 翻译了日文版, 将会放在日本 ALSA 网站, <htmlurl url="http://plaza21.mbn.or.jp/˜momokuri/alsa/index.html" name="http://plaza21.mbn.or.jp/˜momokuri/alsa/index.html"> Miodrag Vallat 翻了法文版, 可在 <htmlurl url="http://www.freenix.fr/unix/linux/HOWTO/mini/Alsa.html" name="http://www.freenix.fr/unix/linux/HOWTO/mini/Alsa.html">找到. 如果您将本文件翻成其它语言, 请让我知道, 我将在这儿做个连结. <sect1> 回馈 <p> 这份 HOWTO 文件, 需要各位读者协助, 才能越来越好用. 如果您有任何建议, 修正, 或意见, 请告诉作者 (<htmlurl url="mailto:alsa-howto@alsa-project.org" name="alsa-howto@alsa-project.org">) 我将会在下一版试著加入这些意见. <p> 请注意: 我还没收到很多关於 ALSA 驱动程式的信件, 任何增加都很欢迎. 即使是 "谢谢你..." 都好. 也许文中加入 "我欣赏大半内容" 或 "这里我还是看不太懂" 这些话并不是很困难吧! (?) (原文是 Please note: I do not get a lot of mail about the ALSA drivers and any addition is welcome. Even a ``thank you for'' is appreciated - maybe it's not too much work to add a ``I appreciated most'' or ``this-or-that was not immediately clear to me''-section. ) <p> 如果您在唯读光碟上或以硬拷贝形式发行此文件, 请您附送我一份. 请送到我的真实地址. 也请考虑一下对 Linux 文件计画作点奉献, 以支持 Linux 的免费文件. 请和 Linux HOWTO 协调人 Tim Bynum (<htmlurl url="mailto:linux-howto@metalab.unc.edu" name="linux-howto@metalab.unc.edu"> ) 联络以得到更多资讯. <sect1> 散布时的注意事项 <p> Copyright 1998/1999 Valentijn Sessink <p> 本中文版之版权为 Valentijn Sessink 及 伍永康 所有 (1999) <p>(版权宣言原文照登) <p>This HOWTO is free documentation; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. <p>本 HOWTO 是自由文件; 您可以在合乎由自由软体基金会出版的 GNU 一般公开执照所载的条件下重新散布及/或修改它. 您可以选用该执照之第二版或(任您选)其後的版本. <p>This document is distributed in the hope that it will be useful, but <bf>without any warranty</bf>; without even the implied warranty of <bf>merchantability</bf> or <bf>fitness for a particular purpose</bf>. See the GNU General Public License for more details. <p>本文件之散布, 是希望能有用, 但<bf>不提供任何保证</bf>; 即使是 <bf>商业上</bf> 或 <bf>合於特定用途</bf> 的隐含保证亦无. 详情请看 GNU 一般公开执照. <p>You can obtain a copy of the GNU General Public License by writing to the <htmlurl url="http://www.fsf.org" name="Free Software Foundation">, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. <p>您可以写信到<htmlurl url="http://www.fsf.org" name="自由软体基金会">, 地址是 675 Mass Ave, Cambridge, MA 02139, USA. 来取得 GNU 一般公开执照. <p> <sect> 在开动之前 <p> <sect1> 绪论 <p> 本文件尝试帮助您在 Linux 下安装及使用 ALSA 音效驱动程式. 参考系统使用 AMD/K6 (x86 相容)的机器, 装 Slackware 3.5 发行套件. 不过应该装在任何其它 Linux 发行套件都不成问题. 由文件中 ALSA 驱动程式是否可在其它平台使用不得而知. Alpha 已经测试证明可用. 我这儿只有 x86 PC, 所以您要是有任何多的资料都很欢迎. 读 Linux Sound HOWTO(请看其它 HOWTO 那一节)可能更有帮助, 但那个 HOWTO 主要是在讨论核心内建的音效驱动程式. <sect1> 关於 ALSA 驱动程式的一般资讯 <p> ALSA 音效驱动程式原本是写来取代 Gravis UltraSound 卡的 Linux 核心驱动程式的. 当实证这取代得很成功, 作者便开始 ALSA 计画, 以完全模组的设计, 写一个给几种音效晶片的一般驱动程式. 它和 OSS/Free 及 OSS/Linux 音效驱动程式相容(核心的驱动程式), 但它有比 OSS 躯动程式更好的本身介面. 一些优点可以在<htmlurl url="http://www.alsa-project.org/intro.html" name="http://www.alsa-project.org/intro.html">看到. ALSA 计画主网页在 <htmlurl url="http://www.alsa-project.org/" name="http://www.alsa-project.org/"> <sect1> 支援的硬体 <p> ALSA 驱动程式仅支援部份的音效卡. 在本文写作时, 以下的卡有被支援: <itemize> <item> 使用 Trident 4D Wave DX/NX 晶片的卡, 感谢 Trident Microsystem 提供了 ALSA "第一手" GPL 驱动程式(仅 MIXER 及 PCM 设备), 以及他们的 4D Wave PCI 音效晶片的文件. 请看 http://www.tridentmicro.com/HTML/products%20folder/audio.htm 得到更多资讯. 这驱动程式现已在 CVS, 将在 ALSA 0.3.0-pre5 中加入. <item> Gravis Ultrasound (GUS): "PnP",  Extreme, Classic/ACE, MAX </item> <item> 使用 GUS 晶片的卡: Dynasonic 3-D, STB Sound Rage 32, UltraSound 32-Pro (STB) </item> <item> 声霸卡: 1.0, 2.0, Pro, 16, AWE32/64, PCI64</item> <item> ESS AudioDrive ESx688</item> <item> ESS ES18xx (chipsets). 请注意我个人在 ESS1888 上经历过很多麻烦. 这个驱动程式的开发者已尽力了, but to no avail.</item> <item> ESS Solo-1 ES1938</item> <item> Yamaha: OPL3-SA2, OPL3-SA3 (晶片组)</item> <item> OAK Mozart</item> <item> Schubert 32 PCI (PINE, S3 SonicVibes PCI 晶片组)</item> <item> Ensoniq AudioPCI ES1370/1371 PCI 音效卡 (Soundblaster PCI64)</item> <item> SonicVibes PCI 音效卡 (PINE Schubert 32 PCI)</item> </itemize> 接著一大票的 Crystal Semiconductors 的卡都支援. 这些晶片可在很多硬体上看到, 有在音效卡上的(如 Philips PCA 系列), 也有主机板内建的(如 IBM Aptiva, Dell computers) 以下的晶片组有支援. <itemize> <item> 4232</item> <item> 4232A</item> <item> 4235</item> <item> 4236B</item> <item> 4237B</item> <item> 4238B</item> <item> 4239</item> </itemize> 更新的列表在驱动程式套件中的 doc/SOUNDCARDS 中可找到. <sect1> 其它 HOWTO <p> ALSA-sound-mini-HOWTO 只是迷你版. 有些情形下这篇就有点简略了, 看其它 HOWTO 可能对您有帮助. 我会点出您尝试安装 ALSA 驱动程式时可能会碰上的一些状况. 一般来说, HOWTO 可以在 metalab(先前的 sunsite)的镜射站 (mirror site)找到. 因此请先找找<htmlurl url="http://metalab.unc.edu/LDP/mirrors.html" name="http://metalab.unc.edu/LDP/mirrors.html">, 去离你最近的镜射站阅读. 您可以在 LDP/HOWTO 目录下找到 HOWTO 文件. 请注意: 本文件的连结是相对於 /LDP/HOWTO/mini 的. 如果您从镜射得很一致的站台看, 您就能找到这些 HOWTO. 另外对 2.2.x 核心作点补充. 在 2.2.x 系列核心里, 音效支援就如同其它支援一般, 它还能用, 但和您习惯的用法不同. 本 HOWTO (就像其它 HOWTO 一样) 以 2.0 系列核心为主, 不过我会试著指明两者之不同点. 我将很高兴加入任何使本 HOWTO 能跟上 2.2 系列的东西. <sect2> 音效卡 <p> 也许您已经买了片音效卡, 甚至已经装在您的电脑好几年了. 现在您可以用它了! 可以先看看 <htmlurl url="../Sound-HOWTO.html" name="Sound-HOWTO">, 看看是不是值得冒这个风险. (您也许想买新的什麽 Mega-Rumble-Blaster 的卡, 试试 ALSA 驱动程式. <sect2> 随插即用的卡 <p> 多数在 Intel 平台的新音效卡是 ISA PnP 卡, 是 "Plug and Play" 的缩写. 其意是指这张卡必须经由作业系统设定. 这必须在开机时经由一个程序完成. 您也许需要运用 PnP-utils 套件来完成设定. 最近的每种 Linux 发行套件都包含这些工具. 用法请参照 <htmlurl url="../Plug-and-Play-HOWTO.html" name="Plug-and-Play-HOWTO"> ALSA 驱动程式似乎对一些卡有做一些自己的 ISA 随插即用支援. 然而不幸的, 因为我 无法找到相关文件, 我无法向您说明怎麽做. 如果有人想试 ALSA 音效支援但不想用 ISA-PnP-tools, 请给我一点说明. <sect2> 可载入模组 <p> ALSA 音效驱动程式是建为模组的. 您可以在 <htmlurl url="../Kernel-HOWTO.html" name="Kernel-HOWTO"> 中得到关於模组的更多资讯. 也有个 module-HOWTO, 但目前已 无人维护; 请在 Howto-HOWTO 那里看看无人维护的文件那小节. 有个 <htmlurl url="Modules.html" name="Modules-mini-HOWTO"> 或许有用. (?) <sect2> Kerneld <p> 另外有一个对某些人有用的 HOWTO 是 <htmlurl url="Kerneld.html" name="Kerneld-mini-HOWTO">. Kerneld 是个在需要时才安装及移除核心模组的 常驻程式(daemon). (笔者对此没有经验, 所以欢迎提供任何资讯. ALSA 驱动程式文件 包含了一些关於设定 kerneld 的资讯, 并已包含於本 mini-HOWTO.) <sect> 如何安装 ALSA 音效驱动程式 <p> <sect1> 您需要什麽 <p> <itemize> <item> 一套能动的 Linux 系统(如 Slackware 发行套件), 并有安装开发工具套件(像 gcc, make 等).) </item> <item> 支援的音效卡</item> <item> 一些 Linux 的知识(您总要晓得 "ls", "cd", "tar" 等怎麽用. ) </item> <item> root 帐号 </item> </itemize> 如果您有 PnP 卡, 您也需要: <itemize> <item> isapnptools 软体套件 </item> </itemize> 在驱程式目录中的 INSTALL 档内文提到对有些卡驱动程式内已经能处理 PnP 的支援. 我也从 Jaroslav 那儿得到一样的论点. 如果我将来得到更多资讯, 我会将它们加进本 mini-HOWTO. (原文是 The INSTALL text in the driver directory suggests that for some cards, PnP support is native. I also received a suggestion from Jaroslav about this. When I get further information about this topic I will add it to this mini-HOWTO. } 请注意如果您想使用 ALSA 驱动程式, 那麽您不应该先载入任何其它音效驱动程式. 如果您的核心中内含音效驱动程式, 那麽有必要重编译核心. 如果您正在使用旧的 sound.o 模组, 您必须解除它. 如果您使用 kerneld, 这可能就是要您删去 /lib/modules/<核心版本>/misc 目录下的 sound.o. 新的 RedHat 系统的音效驱动程式组织方式不太一样, 要载入好几个模组, 这种情况您需要解除全 部的模组. 2.2 版核心对音效则采用了新的方式. 您应该要包含音效的支援! 是的, 没有说错, 您在核心中加入了对音效的支援, 但没有包含任何音效卡的部份. 然後重编译及安装核心, 接著编译 ALSA 驱动程式. <sect1> 取得驱动程式 <p> ALSA 驱动程式可在 <htmlurl url="ftp://ftp.alsa-project.org/pub/" name="ftp://ftp.alsa-project.org/pub"> 找到, 并且在 <htmlurl url="ftp://linux.a2000.nl/alsa" name="ftp://linux.a2000.nl/alsa"> 有一份镜射(mirror). 要安装 ALSA 的完整功能, 您需要驱动程式, 函式库及一些公用程式; 也就是说如果您由镜射站抓您应该 <htmlurl url="ftp://linux.a2000.nl/alsa/driver/" name="ftp://linux.a2000.nl/alsa/driver/">alsa-driver-0.3.0-pre4.tar.gz, <htmlurl url="ftp://linux.a2000.nl/alsa/lib/" name="ftp://linux.a2000.nl/alsa/lib/">alsa-lib-0.3.0pre4.tar.gz, 还有 <htmlurl url="ftp://linux.a2000.nl/alsa/utils/" name="ftp://linux.a2000.nl/alsa/utils/">alsa-utils-0.3.0-pre4.tar.gz. (喔, 上面的不是完整的连结, 您最好到原地点看看有没有新版, 并抓最新的.) <sect1> 解开驱动程式 <p> 用合理的命令像 tar -zxf <file> 解开驱动程式. 以下的是写给新手或常忘记的人: (You extract the drivers by some reasonable command, like the all-time tar -zxf <file>. For newbies and for those with amnesia:) <tscreen><verb>cd /usr/src</verb></tscreen> <tscreen><verb>tar -zxf ˜/alsa-driver-0.3.0-pre4.tar.gz</verb></tscreen> (如果成功了, 您可能一直使用 root 身份进系统, 这是不对的, 停下来并读一下 DOS/Win95-to-Linux-HOWTO. 不是这样的话, 您已经知道这是关於系统管理(administrative)的事, 您需要 superuser/root 权限. 所以, 您需要 root 权限, 输入 su 以及密码. <tscreen><verb>tar -zxf ˜/alsa-lib-0.3.0pre4.tar.gz</verb></tscreen> <tscreen><verb>tar -zxf ˜/alsa-utils-0.3.0-pre4.tar.gz</verb></tscreen> 下这样的命令也可以, 且更有趣: find ˜ -name alsa* -exec tar -zxf {} \; (孩子, 不要在家试这个, 这只是个□例而已. )注意如果您使用 Netscape 下载驱动程式, 您可能抓下的是解开过的, 但延伸档名还是 .tgz. 如果 tar 抱怨档案格式不对, 把 tar 命令中的 "z" 选项去掉, 可以得到较好的结果. <sect1> 编译 <p> 在您可以编译及使用函式库以前, 您需要先有驱动程式. 而有了函式库後才可以编译使用公用程式. 所以我们开始吧: <tscreen><verb>cd alsa-driver-0.3.0-pre4</verb></tscreen> (给那些不太有经验的: 在 "alsa-d" 後接著按 <tab> ("tab" 键). 这样就会叫出 <it>命令列自动补完(command line completion)</it>.) (译注: 有更好的翻法吗?) <tscreen><verb>./configure</verb></tscreen> <tscreen><verb>make</verb></tscreen> 现在您需要用 root 身份安装东东(可能您已经是 root 了) <tscreen><verb>make install</verb></tscreen> 如果它回应像 "version.h" 档找不到之类的, 您可能没有妥善安装核心原始码. 要编译 ALSA 驱动程式需要核心原始码中的一些档案, 所以您把想用的 linux-2.x.y.tar.gz 在 /usr/src 下解开, 并下 <tt>make menuconfig</tt> 命令. (实际上, <tt>make symlinks</tt> 可能就够了). 现在编译函式库: <tscreen><verb>cd ../alsa-lib-0.3.0-pre4</verb></tscreen> <tscreen><verb>./configure</verb></tscreen> <tscreen><verb>make</verb></tscreen> <tscreen><verb>make install</verb></tscreen> OK, 您已经成功了, 再来是公用程式: <tscreen><verb>cd ../alsa-utils-0.3.0-pre4</verb></tscreen> <tscreen><verb>./configure</verb></tscreen> <tscreen><verb>make</verb></tscreen> <tscreen><verb>make install</verb></tscreen> 注意: 在第一次编译公用程式时可先不打 "make install". 甚至您可以先不要动函式库及公用程式, 只检查一下确定驱动程式能不能用. <sect1> 准备设备档 <p> 在驱动程式目录下有个命令稿(script)可以把 ALSA 的音效设备档安装进 /dev 目录. 在驱动程式目录下打入 <tscreen><verb>./snddevices</verb></tscreen> 如此应该有 /dev/snd 子目录了(先看看有没有. 如果您甚至连 "ls" 命令都不熟, 请考虑先读别的 HOWTO. 在安装本驱动程式前您应该有些基本的 Linux 知识才对.) <p> 现在您可以安插驱动程式了. 请跳到下一段吧. <sect> 载入驱动程式 <p> 有两种使用 ALSA 音效模组的方法. 笔者个人比较喜欢使用手动的方法, 也就是在开机 时安插驱动程式. ALSA 驱动程式是以可载入/卸除模组为目标来设计 -- 例如说它们不会在载入後重设音量 -- 所以您可以简单地使用 kerneld 的方法. (译注: 原文直译为 ALSA 驱动程式设计成可载入/卸除模组, 但译者认为 OSS 也可以 这麽做(只差它会重设音量, 对模组使用者来说较不方便, 虽然解决办法是有(见 Sound HOWTO)), 这麽翻无法凸显 ALSA 的优点, 故翻成上面的意思. 希望没误解...) 请一定要阅读<ref id="backw-compat" name="向前相容">这节, 如果您想要和以前的程式相容的话. <sect1> 用 modprobe 安插驱动程式 <p> 请注意: 如果您有 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) 及相容卡: <tscreen><verb>/sbin/modprobe snd-gusclassic</verb></tscreen> 对完全 16 位元的 SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP): <tscreen><verb>/sbin/modprobe snd-sb16</verb></tscreen> <sect1>那张卡应该用哪个驱动程式?<p> <sect2>Gravis UltraSound Extreme<p> <tt/modprobe snd-gusextreme/ <sect2>Gravis UltraSound MAX<p> <tt/modprobe snd-gusmax/ <sect2>ESS AudioDrive<p> ESS AudioDrive ES-1688 及 ES-688 音效卡 <tt/modprobe snd-audiodrive1688/ <sect2>Gravis UltraSound PnP<p> Gravis UltraSound PnP, Dynasonic 3-D/Pro, STB Sound Rage 32 以及其它用 AMD InterWave (tm) 晶片的音效卡. <tt/modprobe snd-interwave/ <sect2>UltraSound 32-Pro<p> UltraSound 32-Pro (STB 制 Compaq 使用) 及其它使用 AMD InterWave (tm) 晶片以及用 TEA6330T 电路来做 bass, treble 及主音量控制的卡. <tt/modprobe snd-interwave-stb/ <Sect2>Soundblaster<p> 8-bit Soundblaster 卡 (SoundBlaster 1.0, SoundBlaster 2.0, SoundBlaster Pro) <tt/modprobe snd-sb8/ <Sect2>Soundblaster 16<p> 16-bit SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP). 请注意本模组不支援 SoundBlaster VibraX16 音效卡. <tt/modprobe snd-sb16/ <Sect2>Yamaha OPL3-SA2/SA3 音效卡<p> 光是 "modprobe snd-opl3sa" 是无效的, 驱动程式不会自动侦测. 请看後面. <Sect2>S3 SonicVibes<p> S3 SonicVibes PCI 音效卡. (PINE Schubert 32 PCI) <tt/modprobe snd-sonicvibes/ <Sect2>Ensoniq/Soundblaster PCI64<p> Ensoniq AudioPCI ES1370/1371 PCI 音效卡. (SoundBlaster PCI 64) <tt/modprobe snd-audiopci/ <Sect2>CS4232/4232A<p> 所有使用 CS4232/CS4232A 晶片的音效卡. 光是 "modprobe snd-card-cs4232" 没用, 不自动侦测, 看後面. <Sect2>4235 以及其後的<p> 所有使用 CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 晶片的. 光是 "modprobe snd-card-cs4236" 没用, 不自动侦测, 看後面. <sect1> 不自动侦测时怎麽载入驱动程式 <p> 如果您要用的驱动程式不自动侦测, 您必须在让驱动程式运作前先提供额外资讯. 更多资讯可在驱动程式目录下的 INSTALL 档中找到. <sect2> OPL3-SA2 及 OPL3-SA3 <p> 根据 INSTALL 档, 您需要提供驱动程式一切资讯. 如果您用 isapnp-tools 来初始化您的卡, 也许可以在 /etc/isapnp.conf 档中看到像下面的值: <tscreen><verb>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)</verb></tscreen> 您要用 "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 大小的参数是不是非要不可. <sect2> CS4232/CS4232A 晶片 <p> 根据 INSTALL 档所言, 对这些卡您要提供 midi port 的资讯. 注意对下面例中的卡, 它使用给 3235/6/7/8/9 的驱动程式, 我给了所有资讯(除了 DMA 大小), 不然它不会动. 所以您也许就用这整段命令列来载 入驱动程式吧! 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看到这些值: <tscreen><verb>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)</verb></tscreen> 对标准设定值的卡, 您要用 "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 大小的参数是不是非要不可. <sect2> CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 chips <p> 根据 INSTALL 档所言, 对这些卡您要提供 midi port 以及 control port 的资讯. 注意对 CS4237B 的卡, 我给了所有资讯(除了 DMA 大小), 不然它不会动. 所以您也许就用这整段命令列来载 入驱动程式, 不只是有 snd_port 及 snd_cport 而已. 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看到这些值: <tscreen><verb>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)</verb></tscreen> 您要用 "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 的注意事项, 又, 没有支援摇□). 注意事项: <itemize> <item>"NN" 值要给真正的, 我不知道合理值是多少才这麽写. </item> <item>我的 CS4237B 卡没有明白指定 DMA 大小也用得很好. </item> </itemize> <sect1> 使用 kerneld 来载入 <p> <tt>kerneld</tt> 是个在需要时插入模组, 并在不再使用时卸除它们的服务程式(daemon). 由於笔者没用过 kerneld, 不晓得下 面的资讯准不准确. 以下资讯来自 ALSA 驱动程式套件的 INSTALL 档. 关於 kerneld 的详尽资讯可在 kerneld-mini-HOWTO 中找到. <p>照以下步骤做: <itemize> <item> 编辑 /etc/conf.modules(後有□例) </item> <item> 执行 'modprobe snd-card', 其中 snd-card 是您的音效卡名称 [ 我觉得奇怪, kerneld 应该负责载入它不是吗? VS] </item> </itemize> 这是 Gravis UltraSound PnP 音效卡的 /etc/conf.modules □例: <tscreen><verb>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</verb></tscreen> 如果您想插更多卡, 这儿有□例(是同时有 Gravis UltraSound Classic 及 Sound Blaster 16 的情形) <tscreen><verb>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</verb></tscreen> 如果有两片 Gravis UltraSound Classic 音效卡, 就像下例: <tscreen><verb>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</verb></tscreen> <sect1> 向前相容<label id="backw-compat"> <p>如果您想保留 OSS/Free 或 OSS/Linux 的相容性, 您还要再加一个驱动程式: snd-pcm1-oss 驱动程式, 提供 OSS 相容性. 下 <tscreen><verb>modprobe snd-pcm1-oss</verb></tscreen> 命令. 这将提供 /dev/audio 及 /dev/dsp 的支援, 就像 OSS/Free (核心)驱动程式及 OSS/Linux (要 25 美金的)所做的一样. 注意这只是模拟而已. <sect> 测试及使用 <p> 现在应该是试试驱动程式是不是真能用的时候了. 接者就是使用它. <sect1> /proc 档案系统 <p> 您可以在 /proc 目录下找到很多关於您的系统的有用资讯. /proc 是一个"虚拟的"档案系统, 意即它并非真正存在, 而是和您正在执行的各程序间的连结. 要让 /proc 可用, 您需要将它编译进核心. 多数 Linux 安装套件已将它设为预设值, 但如果您重编译并且并没有将 /proc 包进来, 那麽在 /proc 下将什麽也没有. /proc/modules 记载了关於载入的模组的资讯. 当 ALSA 音效驱动程式载入後, 如果您 打入 cat /proc/modules, 应该看到像这样的东西: <tscreen><verb>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</verb></tscreen> 如果在安装驱动程式时有哪步搞错了, 您仍能看到一堆 "snd" 设备, 但没有音效支援. 例如说(请千万不要照著下面下命令, cs4236 驱动程式需要参数): <tscreen><verb>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</verb></tscreen> 您可藉由看 /proc/asound/cards 内容来看音效卡是否存在. 例如: <tscreen><verb>bash$ cat /proc/asound/cards 0 [card1 : SB16 - Sound Blaster 16 Sound Blaster 16 at 0x220, irq 5, dma 1&5</verb></tscreen> 在刚刚的例子中(就是我忘了加参数的), 输出会是像: <tscreen><verb>win3:˜# cat /proc/asound/cards --- no soundcards ---</verb></tscreen> 若 CS4236 卡能用, 将有以下输出 <tscreen><verb>0 [card1 ]: CS4236 - CS4237B CS4237B at 0x534, irq 7, dma 1&0</verb></tscreen> 如果您再三检查您的设定正确後, 仍然找不到音效卡, 那麽去看看问题解决那节. <tt>/proc/asound/</tt> 虚拟目录显示了关於此驱动程式的许多资讯. 请注意 /proc/asound 在您载入第一个 ALSA 模组後才会出现. 如果没有 /proc/asound, 那麽就是 "snd" 模组没有正确安装好. 您可以在 /proc/asound/cards 档中找到安装好的卡, 然後在 /proc/asound/0 找到关於 0 号卡, /proc/asound/1 中关於 1 号卡的资讯. 如果 <tt>cat /proc/asound/</tt> 显示像 <tscreen><verb> ES1370 DAC2/ADC Playback isn't active. Record isn't active.</verb></tscreen> 这是说您的驱动程式一切都很好, 但目前并没有事做(所以一切正常). 还有第三种找音效设备的方法, 就是如果您有 OSS 相容驱动程式, 那麽就有 /dev/sndstat 设备档. ALSA 驱动程式会体贴的提醒您不要依赖这些资讯, 它只是为跟 OSS 相容而做的. 由 /proc/asound 可以简单的得到更好的资讯. <sect1> 混音器 <p> 一旦您的音效卡装好, 而 /proc 档案系统也这麽显示後, 您可以试试真正发出声音. 首先呢, 安装公用程式套件, 或至少把 "amixer" 命令放到一些合理的地方(如 /usr/local/bin). 先用 "amixer" 看看混音器设定. amixer 的输出会随卡的不同而有很大变化, 我的 SoundBlaster16 显示: <tscreen><verb>Master 0 % (-14.00dB) : 0 % (-14.00dB) Bass 0 % (-14.00dB) : 0 % (-14.00dB) Treble 0 % (-14.00dB) : 0 % (-14.00dB) Synth 0 % (-62.00dB) : 0 % (-62.00dB) PCM 0 % (-62.00dB) : 0 % (-62.00dB) Line-In 0 % (-62.00dB) : 0 % (-62.00dB) Mute MIC 0 % (-62.00dB) : 0 % (-62.00dB) Mute CD 0 % (-62.00dB) : 0 % (-62.00dB) Mute In-Gain 0 % (-18.00dB) : 0 % (-18.00dB) Out-Gain 0 % (-18.00dB) : 0 % (-18.00dB) PC Speaker 0 % (-18.00dB) : 0 % (-18.00dB)</verb></tscreen> 而我的 Crystal 4237B 的音效卡有很多其它选项: <tscreen><verb>Master D 0 % (-22.00dB) : 0 % (-22.00dB) Mute 3D Center 0 % (-22.50dB) : 0 % (-22.50dB) 3D Space 0 % (-22.50dB) : 0 % (-22.50dB) Mute Synth 0 % (-94.50dB) : 0 % (-94.50dB) Mute FM 0 % (-94.50dB) : 0 % (-94.50dB) Mute DSP 0 % (-94.50dB) : 0 % (-94.50dB) Mute PCM 0 % (-94.50dB) : 0 % (-94.50dB) Mute Line-In 0 % (-34.50dB) : 0 % (-34.50dB) Mute MIC 0 % (-22.50dB) : 0 % (-22.50dB) Mute CD 0 % (-34.50dB) : 0 % (-34.50dB) Mute Record-Gain 0 % ( 0.00dB) : 0 % ( 0.00dB) In-Gain 0 % (-18.00dB) : 0 % (-18.00dB) Loopback 0 % (-94.50dB) : 0 % (-94.50dB) Mute Mono 0 % (-45.00dB) : 0 % (-45.00dB) Mute Aux A 0 % (-34.50dB) : 0 % (-34.50dB) Mute</verb></tscreen> 注意一下 "Mute" 那一栏, CS4237B 甚至连主音量也调静音了. 对 CS4237B, 我还要先打 <tt>amixer "master d" unmute</tt> 以後才能发出声音. SoundBlaster 的输出就没有静音, 不过 <tt>amixer master 100 unmute</tt> 会将主音量解除静音, 还设为 100%. 您可以用数字, 或像 "mute" 及 "unmute" 的文字, 或都打, 来控制. 打 <tt>amixer "master d" 100; amixer pcm 100 unmute</tt> 可以将 CS4237B 卡的主音量设最大, 并将 PCM 音量解除静音并设为最大. 如果左右要不一样, 可以用冒号, 如 <tt>amixer CD 25:50</tt>.(不, 我不晓得那一个是指左右声道, 不过我强调一下这也和您的喇叭摆放位置有密切关系.) 您应该下 <tt>amixer cd rec</tt> 以将 CD 当做录音的音源. 然後後下 <tt>amixer cd norec</tt>命令解除此设定. 如果您想要经由麦克风来录些东西, 您也许可以下 <tt>amixer record-gain 100; amixer mic 100 rec mute</tt>(如果不将麦克风输入 的放音设为静音的话, 麦克风会从喇叭收到本身的信号, 会造成高音部份音量降低.) 然而不幸的是我没能够用 amixer 来改变 3D center 及 3D space 的音量设定. 如果 有人成功了, 请告知我. 这工作可由 alsamixer 来进行. ALSA FAQ 上面表示可以用 <tt>cat <file> > /proc/asound/#/mixerC0D0</tt> 命令来回复混音设定, 其中 <file> 的内容是由 /proc/asound/#/mixerC0D0 中取得. 我无法重现相同的结果, 我的电脑抱怨此设备找不到. <sect1> /dev/snd/ 下的设备 <p> ALSA 驱动程式在 /dev/snd/ 目录下有自己的驱动程式. 如果您有一片音效卡, 您可能看到以下设备: <tscreen><verb> /dev/snd/pcmC0D0 - 这张音效卡的原生音效设备. /dev/snd/mixerC0D0 - 第"零"号卡的混音器设备. /dev/snd/controlC0D0 - 第"零"号卡的控制设备. </verb></tscreen> 第一个号码是指第几号音效卡. 第二个号码是代表单卡上的设备号码. 一张有两个 PCM 设备的音效卡应该有 pcmC0D0 及 pcmc0D1 设备. 请疝N: ALSA 的设备档名和旧版已经不一样了. 旧的 ALSA 驱动程式用 /dev/snd/pcm00 (第一个是卡, 第二个是设备号). 如果看到本 HOWTO 中还有用旧的档名的, 请写封 Email 给我以便更正. 现在您可以将任何您想听的音效档丢进第一片卡的 PCM 设备中了. 现在试试用 cat 把任何文字档(或任何档案)送进 /dev/snd/pcmC0D0, 就像这样: <tt>cat <filename> > /dev/snd/pcmC0D0</tt>. 其中 filename 可以是任意档案, 只要它够大. 如果您已有现成的音效档, 也可以试试. 您也可以抓 <htmlurl url="http://www.ldp.org/sounds/english.au" name="http://www.ldp.org/sounds/english.au">. 这是 Linux Torvalds 讲 Linux 这个字如何发音的话. 音效设备预先被设定为 8000Hz, 8 位元. 这意味著刚提到的 "english.au" 会发出讲话声, 而其它档可能只会发出噪音. 如果您听不到, 请检查您的喇叭, 或再执行 amixer 一遍或去看医师(该不会是... 您的耳朵聋了!?) . (稍後您可以用您喜欢的播放程式如 sox 或 mpg123 , 简单的来放完全的 48KHz, 16 位元声音.) 如果您载入了 "snd-pcm1-oss" 模组, 您也可以利用 OSS 的相容性来存取音效卡. 两者间有以下的对应关系: <tscreen><verb> /dev/snd/pcmC0D0 -> /dev/audio0 (/dev/audio) -> 次编号 4 /dev/snd/pcmC0D0 -> /dev/dsp0 (/dev/dsp) -> 次编号 3 /dev/snd/pcmC0D1 -> /dev/adsp0 (/dev/adsp) -> 次编号 12 /dev/snd/pcmC1D0 -> /dev/audio1 -> 次编号 4+16 = 20 /dev/snd/pcmC1D0 -> /dev/dsp1 -> 次编号 3+16 = 19 /dev/snd/pcmC1D1 -> /dev/adsp1 -> 次编号 12+16 = 28 /dev/snd/pcmC2D0 -> /dev/audio2 -> 次编号 4+32 = 36 /dev/snd/pcmC2D0 -> /dev/dsp2 -> 次编号 3+32 = 39 /dev/snd/pcmC2D1 -> /dev/adsp2 -> 次编号 12+32 = 44 </verb></tscreen> <sect1> 额外的资讯 <p> 在 ALSA 驱动程式目录中的 INSTALL 档也提到了一些小技巧, 告诉驱动程式要作何调整设定. 依照播放声音的用途, 您可能需要用这些命令. 一般的播放程式, 如 mpg123, sox(常以 ``play'' 命令来执行), 或 X11 应用程式如 RealPlayer都不必用到这些. 我本人也从没用过. <sect2> /proc/asound/#/pcm#0 <p> <tscreen><verb>"Playback erase" - 清除所有关於 OSS 应用程式的额外资讯. "Playback <app_name> <fragments> <fragment_size> [<options>]" "Record erase" - 清除所有关於 OSS 应用程式的额外资讯. "Record <app_name> <fragments> <fragment_size> [<options>]"</verb></tscreen> <tt><app_name></tt> - 应用程式名称, 包含(较优先假定)或不包含路径. <tt><fragments></tt> - 片断(fragment)数, 给 0 则自动选择. <tt><fragment_size></tt> - 一个片断的 byte 数, 或 0 选择自动. <tt><options></tt> - 选择性的参数 <tt>WR_ONLY</tt> - 如果有个应用程式设开启模式为O_RDWR, 实际的权限将改为 O_WRONLY(播放), 对 Quake 等很有用... 几个□例: <tscreen><verb>echo "Playback x11amp 128 16384" > /proc/asound/0/pcm0o echo "Playback squake 0 0 WR_ONLY" > /proc/asound/0/pcm0o</verb></tscreen> <sect2> /proc/asound/#card#/sb16 <p> <tscreen><verb>"Playback 8" -> 驱动程式播放时只使用 8-bit DMA 通道. "Playback 16" -> 驱动程式播放时只使用 16-bit DMA 通道. "Playback auto" (default) -> 驱动程式自动选择(会先尝试使用 16-bit DMA 通道) "Record 8" -> 驱动程式录音时只使用 8-bit DMA 通道. "Record 16" -> 驱动程式录音时只使用 16-bit DMA 通道. "Record auto" (default) -> 驱动程式自动选择(会先尝试使用 16-bit DMA 通道) </verb></tscreen> 例如: <tt>echo "Record 16" > /proc/asound/0/sb16</tt> 更进一步的资讯请参考 INSTALL 档. <sect> 小技巧及问题排除 <p> 请先看看音效卡驱动程式目录的 FAQ 档. 这一节仍然在增修中. <sect1> 编译驱动程式 <p> <sect2> Linux 核心原始码目录树 <p> 如果 ALSA 驱动程式无法成功编译, 出现像找不到 ``version.h'' 或其它引入档(header files)之类的错误, 这是指您没有安装核心的引入档. 先花点时间看看 Kernel-HOWTO, 将最新近的核心解开到 /usr/src 并且下 <tt>make config</tt>命令. <sect1> 载入驱动程式 <p> 请检查以下各条: <sect2> 音效卡相容性 <p> 您是否百分之百的确定您的音效卡有支援呢? 千万要记得检查. 有时一片叫 X123 的音效卡并不全等於叫 X123b 的, 这样可能会浪费您的时间. 在另一方面, 即使是有支援的卡也可能会找您麻烦 - 为了安装一片 CS4237B 的卡, 耗了我两个小时来搞清楚, 结果发现说明文件里有. (原文是 On the other hand, even a supported card can give you troubles - it took me two hours to figure out the installation of a CS4237B which was, after all, just a fine example of RTFM. ) <sect2> ``Device busy'' 或 ``unresolved symbols'' <p> 您可能在 2.0.x 版核心中将音效卡支援编进核心内, 或是已载入 OSS/Lite(核心的)驱动程式(可用<tt>cat /proc/modules</tt>来检查). 移除该驱动程式或重新编译核心(请看 Kernel-HOWTO 後动手). 在 2.0 版核心中的音效模组叫做 "sound.o", <bf>不应该</bf>被启用. (虽然 ALSA 的驱动程式 "snd.o" 可以.) 如果您的核心是 2.2.x 版, 而没有将音效支援编译进去, ALSA 驱动程式也会无法作用. 我也知道这两种不同的状况令人困扰, 所以我在此再作一次解释. 如果您用的是 <bf>2.0.x版</bf>核心 ("uname -a"命令传回像 "Linux penguin 2.0.35 #6 Wed Sep 23 10:19:16 CEST 1998 i686 unknown") 那麽您必须将音效驱动程式<bf>剔除</bf>掉. 如果您的核心是 <bf>2.2.x版核心</bf>, 那麽您<bf>需要音效驱动程式</bf>. 2.2.x 版核心应该<bf>将音效驱动程式编译进核心, 但不加入任何音效卡的支援</bf>. 因此您要选音效支援, 但也确定不要加入任何音效卡驱动程式. <sect2> 又见 Unresolved symbols <p> 另一个造成 "unresolved symbols" 讯息的原因可能是新版核心配合旧版驱动程式. 请在重新编译核心之後别忘了也重新编译 ALSA 驱动程式. 如此才可以确定驱动程式能配上您的新核心. <sect2> 检查 PnP 设定 <p> 确定音效卡起动(active)了吗? 请另外花点时间读读 PnP-HOWTO, 确认您已正确地致动(activate)了您的音效卡. <sect2> 参数有设对吗? <p> 检查, 再三检查您的音效卡设定参数. 请小心: 534 不等於 543, 0x534 也不等於 534. 同时, 有些音效卡要载入的模组不是您预期的那个. 休息一下, 喝杯啤酒或什麽的, 然後再看看您 modprobe 的结果. 例如 Crystal 4232 应该插入的驱动程式是 snd-card-cs4232, 不是 "snd-cs4231". 而 SoundBlaster PCI64 应该载入的是 "snd-audiopci", 非 snd-es1370. (这些在文件中都有写, 而笔者在写这篇 HOWTO 时, 还曾花了一个晚上试著用 snd-cs4231 让它发出声音.) <sect1> 驱动程式载入了... 可是没声音 <p> <sect2> 解除静音 <p> ALSA 驱动程式可以运用多数音效卡都有的 "静音" 能力. 如果您载入了音效驱动程式, 一切看起来都还正确, 就是没有声音的话, 那麽您可能忘计把静音取消掉了. 要这麽做您要用 "amixer" 或 "alsamixer", 两者都附在驱动程式中. 只要键入: <tscreen><verb>amixer -c 1 master 70:70 unmute amixer -c 1 pcm 70:70 unmute amixer -c 1 cd 70:70 unmute</verb></tscreen> 对多数的应用程式应该都有效的. <sect2> OSS/Linux 的相容性 <p> 如果这是您首次使用 ALSA 驱动程式, 而您以前使用过核心内建的那个的话, 您可能想要能和过去相容的能力.(即使用 /dev/pcmX 设备之能力). 这时您需要载入 "OSS 相容驱动程式". 执行 <tt>modprobe snd-pcm1-oss</tt> (详见关於载入本驱动程式那一节. ). 请疝N: snd-pcm1-oss 不能於 snd-pcm1. 对旧驱动程式的支援所需要的是 snd-pcm1-oss. <sect1> 一般性建言 <p> <sect2> 试著用 "insmod" <p> 用 "insmod" 取代 kerneld 总是有用的. 也许因此您就可以在萤幕上看到错误讯息了. <sect2> 读 INSTALL 档. <p> 在驱动程式目录中的 INSTALL 档可以发现很多资讯. 如果您的驱动程式不起作用, 别忘了看看这个档, 也许会有额外的资讯. <sect2> 除错讯息 <p> 如果以上的方法还是没有用, 您可以重新编译驱动程式, 要求它将除错讯息送进 /var/log/messages 档中, 做为最後手段. 下<tt>cd /usr/src/alsa-driver-...</tt>命令进入驱动程式目录, 然後输入: <tscreen><verb>./configure --with-debug=detect; make clean; make</verb></tscreen> 移除驱动程式(如果它已经启动的话, 请看後面有提到的移除模组小技巧) 然後用您刚刚用的 "modprobe" 指令安插新编译的驱动程式. 看看 /var/log/messages 里有没有任何相关讯息. <sect2> 如果都没有用呢... <p> 如果您无法由讯息中取得线索, 写封 Email 到 ALSA 使用者通信论坛, <htmlurl url="mailto:alsa-user@alsa-project.org" name="alsa-user@alsa-project.org">. 别忘了加上以下资讯: <itemize> <item> 您的音效卡的名称以及其使用的晶片.</item> <item> 如果您的音效卡是 ISA PnP 的, 放入 isapnp.conf 中有关的部份. </item> <item> 您的 conf.modules 档或是启动 ALSA 驱动程式的命令行. </item> <item> 所有在 /var/log/messages 中应该和 ALSA 驱动程式有关的讯息.</item> </itemize> <sect1> 回报臭虫 <p> 如果您发现了一只臭虫, ALSA 驱动程式开发组希望能够得知(至少)以下资讯: <enum> <item> 驱动程式及核心的版本: 'cat /proc/asound/version' <item> 音效卡资讯 <itemize> <item> 厂商所标示的音效卡名称 <item> 该卡上面的各个晶片标示 <item> 'cat /proc/asound/cards' 的执行结果 </itemize> <item> 所有在 /var/log/messages 中的相关讯息 <item> 问题的描述 </enum> <sect1> 小技巧: 听 CD 时... <p> 如果您使用kmod/kerneld 以及 ALSA 驱动程式来听 CD, 那麽 kmod/kerneld 可能不会像预期一般载入驱动程式. 这是由於命令列的 CD 放音程式只会叫 CDROM 开始播放, 而不会使用到任何设备, 让 kmod/kerneld 来载入驱动程式. 这个问题的解可能就只有使用 modprobe 了. <sect1> 小技巧: 安装 MIDI 序列驱动动程式 <p> 通常, 序列设备的 IO 埠会由标准的序列设备驱动程式占有. 所以在您可以进行 "modprobe snd-serial" 以前, 必须让驱动程式释放掉该序列设备. 以下是所需程序. <tscreen><verb>setserial /dev/ttyS0 uart none modprobe snd-serial</verb></tscreen> (如果您的 MIDI 设备使用不一样的设备,将 /dev/ttyS0 换成相对应的 /dev/ttySx) <sect1> 小技巧: 换新核心? 换新模组! <p> 当您更新核心後, 您可能需要重新编译 ALSA 驱动程式. 如果它们还在原来的 /usr/src 目录下, 请别忘了在您进行 ./configure, make, make install 之前先下 <tt>make clean</tt> 命令. 喔! 还有个不太一样的核心版本编号 "2.2.0ac1", 会被 configure 命令档抱怨不是数字. 我想这个在新版的命令档中会解决, 不然您可能得改变原始码中的核心版本编号. <sect1> 小技巧: KDE 及 ALSA 驱动程式 <p> 如果您使用了 KDE, 但却无法听到诸如开启视窗或改变使用的桌面等系统音效, 不过其它音效动作正常. 也就是您的 CD 播放, MP3 播放以及混音器都很正常, 那麽可能只是因为欠缺 "kwmsound" 而已. 所以: 确定在您的启动命令档($KDEDIR/bin/startkde)中有 "kwmsound". <sect1> 小技巧: 使用 ALSA 设备 <p> 如果您以前有利用过 Linux 的音效支援, 那麽您的应用程式可能需要用到 /dev/pcm0, /dev/audio 及 /dev/mixer. 使用 OSS 相容模组 snd-pcm1-oss 是不错的解决方法, 但如果使用真正的 ALSA 设备(在 /dev/snd/下)的话那更好. <sect1> 小技巧: 移除所有模组 <p> 要一个一个的移除十几个模组实在不是个好办法. 很幸运的, 所有的模组名都是由 snd- 开始, 所以用一点小小的命令列规划, 您可以轻易的下以下的命令移除 ALSA 音效驱动程式: <tscreen><verb>cat /proc/modules|gawk '/^snd-/{print $1}|xargs -i rmmod {}</verb></tscreen> Juergen Kahrs 写道: "我有一个命令档可以连 soundcore, soundlow 以及 sound 都一并消去, 如果它们已载入且没在使用中的话. 这个命令档处理 /proc/modules 三次, 这样在完成後应该不会有太多模组留下来." 他的解法是: <tscreen><verb>awk '/^snd/||/^sound/&&($3==0){system("rmmod " $1)}' /proc/modules /proc/modules /proc/modules</verb></tscreen> 请注意: 如果有一个模组依赖另一个模组的话, 您不可以只移除较上层的那个. 这意味著您可能有必要下第二道命令. (我从来没碰到过这种情况; 看起来您可以以依照在 /proc/modules 中的顺序移除 ALSA 模组.) </article>