Alsa-sound-mini-HOWTO Valentijn Sessink valentyn@alsa-project.org 译者: 伍永康 yorkwu@ms4.hinet.net 中文版v0.2, 2000年6月15日 (原v0.2, 18 May 1999) _________________________________________________________________ 本文描述 Linux 的 AKSA 音效驱动程式的安装. 由於它们相容. 这个音效驱动程 式可以用来取代平常用的音效驱动程式. _________________________________________________________________ 1. Introduction * 1.1 铭谢 * 1.2 版本沿革 * 1.3 本文件的新版本在哪? * 1.4 回馈 * 1.5 散布时的注意事项 2. 在开动之前 * 2.1 绪论 * 2.2 关於 ALSA 驱动程式的一般资讯 * 2.3 支援的硬体 * 2.4 其它 HOWTO 3. 如何安装 ALSA 音效驱动程式 * 3.1 您需要什麽 * 3.2 取得驱动程式 * 3.3 解开驱动程式 * 3.4 编译 * 3.5 准备设备档 4. 载入驱动程式 * 4.1 用 modprobe 安插驱动程式 * 4.2 那张卡应该用哪个驱动程式? * 4.3 不自动侦测时怎麽载入驱动程式 * 4.4 使用 kerneld 来载入 * 4.5 向前相容 5. 测试及使用 * 5.1 /proc 档案系统 * 5.2 混音器 * 5.3 /dev/snd/ 下的设备 * 5.4 额外的资讯 6. 小技巧及问题排除 * 6.1 编译驱动程式 * 6.2 载入驱动程式 * 6.3 驱动程式载入了... 可是没声音 * 6.4 一般性建言 * 6.5 回报臭虫 * 6.6 小技巧: 听 CD 时... * 6.7 小技巧: 安装 MIDI 序列驱动动程式 * 6.8 小技巧: 换新核心? 换新模组! * 6.9 小技巧: KDE 及 ALSA 驱动程式 * 6.10 小技巧: 使用 ALSA 设备 * 6.11 小技巧: 移除所有模组 _________________________________________________________________ 1. Introduction 这是 ALSA 音效驱动程式的 mini HOWTO. 它提供您关於安装及使用 ALSA 音效驱 动程式的资讯. ALSA 驱动程式是完全模组化, 并支援 kerneld 及 kmod. 它和 OSS API 相容, 但超越了其可能性. 一句话: 相容, 但更好. 1.1 铭谢 本文件包含了我从 ALSA 驱动程式网站得到的资讯. 其结构是由 SB-mini-HOWTO 分来的, 主要是它的结构和我理想中的很接近. 感谢有 [1]SGMLTools 软体, 使 得本 HOWTO 只用一个共用的原始档, 可以产生多种格式. 谢谢 Erik Warmelink 校阅(proof reading), 还有 Alfred Munnikes 提供很多问题和有助的建言, Yamahata Isaku 翻译成日文, 以及 Miodrag Vallat 翻成法文. 接下来, Steve Crowd 很好的校订了全文, 以及 Marc-Aur`ele Darche, Piotr Ingling, Juergen Kahrs 及 Tim Pearce 提供有用的小技巧(tip)及增补. 1.2 版本沿革 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! 1.3 本文件的新版本在哪? 最新版本可在 [2]http://www.alsa-project.org./~valentyn找到. 其它格式(全部的 html, sgml, txt)在 [3]other-formats 目录下. Yamahata Isaku 翻译了日文版, 将会放在日本 ALSA 网站, [4]http://plaza21.mbn.or.jp/~momokuri/alsa/index.html Miodrag Vallat 翻了法文版, 可在 [5]http://www.freenix.fr/unix/linux/HOWTO/mini/Alsa.html找到. 如果您将本文件翻成其它语言, 请让我知道, 我将在这儿做个连结. 1.4 回馈 这份 HOWTO 文件, 需要各位读者协助, 才能越来越好用. 如果您有任何建议, 修 正, 或意见, 请告诉作者 ( [6]alsa-howto@alsa-project.org) 我将会在下一版 试著加入这些意见. 请注意: 我还没收到很多关於 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. ) 如果您在唯读光碟上或以硬拷贝形式发行此文件, 请您附送我一份. 请送到我的 真实地址. 也请考虑一下对 Linux 文件计画作点奉献, 以支持 Linux 的免费文 件. 请和 Linux HOWTO 协调人 Tim Bynum ( [7]linux-howto@metalab.unc.edu ) 联络以得到更多资讯. 1.5 散布时的注意事项 Copyright 1998/1999 Valentijn Sessink 本中文版之版权为 Valentijn Sessink 及 伍永康 所有 (1999) (版权宣言原文照登) 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. 本 HOWTO 是自由文件; 您可以在合乎由自由软体基金会出版的 GNU 一般公开执 照所载的条件下重新散布及/或修改它. 您可以选用该执照之第二版或(任您选)其 後的版本. This document is distributed in the hope that it will be useful, but without any warranty; without even the implied warranty of merchantability or fitness for a particular purpose. See the GNU General Public License for more details. 本文件之散布, 是希望能有用, 但不提供任何保证; 即使是 商业上 或 合於特定 用途 的隐含保证亦无. 详情请看 GNU 一般公开执照. You can obtain a copy of the GNU General Public License by writing to the [8]Free Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 您可以写信到 [9]自由软体基金会, 地址是 675 Mass Ave, Cambridge, MA 02139, USA. 来取得 GNU 一般公开执照. 2. 在开动之前 2.1 绪论 本文件尝试帮助您在 Linux 下安装及使用 ALSA 音效驱动程式. 参考系统使用 AMD/K6 (x86 相容)的机器, 装 Slackware 3.5 发行套件. 不过应该装在任何其 它 Linux 发行套件都不成问题. 由文件中 ALSA 驱动程式是否可在其它平台使用 不得而知. Alpha 已经测试证明可用. 我这儿只有 x86 PC, 所以您要是有任何多 的资料都很欢迎. 读 Linux Sound HOWTO(请看其它 HOWTO 那一节)可能更有帮助, 但那个 HOWTO 主要是在讨论核心内建的音效驱动程式. 2.2 关於 ALSA 驱动程式的一般资讯 ALSA 音效驱动程式原本是写来取代 Gravis UltraSound 卡的 Linux 核心驱动程 式的. 当实证这取代得很成功, 作者便开始 ALSA 计画, 以完全模组的设计, 写 一个给几种音效晶片的一般驱动程式. 它和 OSS/Free 及 OSS/Linux 音效驱动程式相容(核心的驱动程式), 但它有比 OSS 躯动程式更好的本身介面. 一些优点可以在 [10]http://www.alsa-project.org/intro.html看到. ALSA 计画主网页在 [11]http://www.alsa-project.org/ 2.3 支援的硬体 ALSA 驱动程式仅支援部份的音效卡. 在本文写作时, 以下的卡有被支援: * 使用 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 中加入. * Gravis Ultrasound (GUS): "PnP", Extreme, Classic/ACE, MAX * 使用 GUS 晶片的卡: Dynasonic 3-D, STB Sound Rage 32, UltraSound 32-Pro (STB) * 声霸卡: 1.0, 2.0, Pro, 16, AWE32/64, PCI64 * ESS AudioDrive ESx688 * ESS ES18xx (chipsets). 请注意我个人在 ESS1888 上经历过很多麻烦. 这 个驱动程式的开发者已尽力了, but to no avail. * ESS Solo-1 ES1938 * Yamaha: OPL3-SA2, OPL3-SA3 (晶片组) * OAK Mozart * Schubert 32 PCI (PINE, S3 SonicVibes PCI 晶片组) * Ensoniq AudioPCI ES1370/1371 PCI 音效卡 (Soundblaster PCI64) * SonicVibes PCI 音效卡 (PINE Schubert 32 PCI) 接著一大票的 Crystal Semiconductors 的卡都支援. 这些晶片可在很多硬体上 看到, 有在音效卡上的(如 Philips PCA 系列), 也有主机板内建的(如 IBM Aptiva, Dell computers) 以下的晶片组有支援. * 4232 * 4232A * 4235 * 4236B * 4237B * 4238B * 4239 更新的列表在驱动程式套件中的 doc/SOUNDCARDS 中可找到. 2.4 其它 HOWTO ALSA-sound-mini-HOWTO 只是迷你版. 有些情形下这篇就有点简略了, 看其它 HOWTO 可能对您有帮助. 我会点出您尝试安装 ALSA 驱动程式时可能会碰上的一 些状况. 一般来说, HOWTO 可以在 metalab(先前的 sunsite)的镜射站 (mirror site)找到. 因此请先找找 [12]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 系列的东西. 音效卡 也许您已经买了片音效卡, 甚至已经装在您的电脑好几年了. 现在您可以用它 了! 可以先看看 [13]Sound-HOWTO, 看看是不是值得冒这个风险. (您也许想买新 的什麽 Mega-Rumble-Blaster 的卡, 试试 ALSA 驱动程式. 随插即用的卡 多数在 Intel 平台的新音效卡是 ISA PnP 卡, 是 "Plug and Play" 的缩写. 其 意是指这张卡必须经由作业系统设定. 这必须在开机时经由一个程序完成. 您也 许需要运用 PnP-utils 套件来完成设定. 最近的每种 Linux 发行套件都包含这 些工具. 用法请参照 [14]Plug-and-Play-HOWTO ALSA 驱动程式似乎对一些卡有做一些自己的 ISA 随插即用支援. 然而不幸的, 因为我 无法找到相关文件, 我无法向您说明怎麽做. 如果有人想试 ALSA 音效支 援但不想用 ISA-PnP-tools, 请给我一点说明. 可载入模组 ALSA 音效驱动程式是建为模组的. 您可以在 [15]Kernel-HOWTO 中得到关於模组 的更多资讯. 也有个 module-HOWTO, 但目前已 无人维护; 请在 Howto-HOWTO 那 里看看无人维护的文件那小节. 有个 [16]Modules-mini-HOWTO 或许有用. (?) Kerneld 另外有一个对某些人有用的 HOWTO 是 [17]Kerneld-mini-HOWTO. Kerneld 是个 在需要时才安装及移除核心模组的 常驻程式(daemon). (笔者对此没有经验, 所 以欢迎提供任何资讯. ALSA 驱动程式文件 包含了一些关於设定 kerneld 的资 讯, 并已包含於本 mini-HOWTO.) 3. 如何安装 ALSA 音效驱动程式 3.1 您需要什麽 * 一套能动的 Linux 系统(如 Slackware 发行套件), 并有安装开发工具套 件(像 gcc, make 等).) * 支援的音效卡 * 一些 Linux 的知识(您总要晓得 "ls", "cd", "tar" 等怎麽用. ) * root 帐号 如果您有 PnP 卡, 您也需要: * isapnptools 软体套件 在驱程式目录中的 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 驱动程式. 3.2 取得驱动程式 ALSA 驱动程式可在 [18]ftp://ftp.alsa-project.org/pub 找到, 并且在 [19]ftp://linux.a2000.nl/alsa 有一份镜射(mirror). 要安装 ALSA 的完整功 能, 您需要驱动程式, 函式库及一些公用程式; 也就是说如果您由镜射站抓您应 该 [20]ftp://linux.a2000.nl/alsa/driver/alsa-driver-0.3.0-pre4.tar.gz, [21]ftp://linux.a2000.nl/alsa/lib/alsa-lib-0.3.0pre4.tar.gz, 还有 [22]ftp://linux.a2000.nl/alsa/utils/alsa-utils-0.3.0-pre4.tar.gz. (喔, 上面的不是完整的连结, 您最好到原地点看看有没有新版, 并抓最新的.) 3.3 解开驱动程式 用合理的命令像 tar -zxf 解开驱动程式. 以下的是写给新手或常忘记的 人: (You extract the drivers by some reasonable command, like the all-time tar -zxf . For newbies and for those with amnesia:) cd /usr/src tar -zxf ~/alsa-driver-0.3.0-pre4.tar.gz (如果成功了, 您可能一直使用 root 身份进系统, 这是不对的, 停下来并读一下 DOS/Win95-to-Linux-HOWTO. 不是这样的话, 您已经知道这是关於系统管 理(administrative)的事, 您需要 superuser/root 权限. 所以, 您需要 root 权限, 输入 su 以及密码. tar -zxf ~/alsa-lib-0.3.0pre4.tar.gz tar -zxf ~/alsa-utils-0.3.0-pre4.tar.gz 下这样的命令也可以, 且更有趣: find ~ -name alsa* -exec tar -zxf {} \; (孩子, 不要在家试这个, 这只是个□例而已. )注意如果您使用 Netscape 下载 驱动程式, 您可能抓下的是解开过的, 但延伸档名还是 .tgz. 如果 tar 抱怨档 案格式不对, 把 tar 命令中的 "z" 选项去掉, 可以得到较好的结果. 3.4 编译 在您可以编译及使用函式库以前, 您需要先有驱动程式. 而有了函式库後才可以 编译使用公用程式. 所以我们开始吧: cd alsa-driver-0.3.0-pre4 (给那些不太有经验的: 在 "alsa-d" 後接著按 ("tab" 键). 这样就会叫 出 命令列自动补完(command line completion).) (译注: 有更好的翻法吗?) ./configure make 现在您需要用 root 身份安装东东(可能您已经是 root 了) make install 如果它回应像 "version.h" 档找不到之类的, 您可能没有妥善安装核心原始码. 要编译 ALSA 驱动程式需要核心原始码中的一些档案, 所以您把想用的 linux-2.x.y.tar.gz 在 /usr/src 下解开, 并下 make menuconfig 命令. (实际 上, make symlinks 可能就够了). 现在编译函式库: cd ../alsa-lib-0.3.0-pre4 ./configure make make install OK, 您已经成功了, 再来是公用程式: cd ../alsa-utils-0.3.0-pre4 ./configure make make install 注意: 在第一次编译公用程式时可先不打 "make install". 甚至您可以先不要动 函式库及公用程式, 只检查一下确定驱动程式能不能用. 3.5 准备设备档 在驱动程式目录下有个命令稿(script)可以把 ALSA 的音效设备档安装进 /dev 目录. 在驱动程式目录下打入 ./snddevices 如此应该有 /dev/snd 子目录了(先看看有没有. 如果您甚至连 "ls" 命令都不 熟, 请考虑先读别的 HOWTO. 在安装本驱动程式前您应该有些基本的 Linux 知识 才对.) 现在您可以安插驱动程式了. 请跳到下一段吧. 4. 载入驱动程式 有两种使用 ALSA 音效模组的方法. 笔者个人比较喜欢使用手动的方法, 也就是 在开机 时安插驱动程式. ALSA 驱动程式是以可载入/卸除模组为目标来设计 -- 例如说它们不会在载入後重设音量 -- 所以您可以简单地使用 kerneld 的方法. (译注: 原文直译为 ALSA 驱动程式设计成可载入/卸除模组, 但译者认为 OSS 也 可以 这麽做(只差它会重设音量, 对模组使用者来说较不方便, 虽然解决办法是 有(见 Sound HOWTO)), 这麽翻无法凸显 ALSA 的优点, 故翻成上面的意思. 希望 没误解...) 请一定要阅读 [23]向前相容这节, 如果您想要和以前的程式相容的话. 4.1 用 modprobe 安插驱动程式 请注意: 如果您有 PnP 音效卡, 您首先要设定正确的(或至少是已知的) IO/IRQ/DMA. 请读 Plug-and-Play-HOWTO. 您已经设定过您的 随插即用 音效卡 了吗? 好, 那麽请继续读下去. 主要部份是 "modprobe snd-", 这样 应该就可以. 不过并非所有安装套件都把 /sbin 包含在您的 PATH 环境变数下. 如果您得到 "bash: modprobe: command not found" 这样的回应, 可能是由於 modprobe 没有在 path 中. 试著用 "/sbin/modprobe snd-sb16", 或想办法找出 modprobe 公用程式在哪. 对 Crystal 晶片组的卡来说可能最困难. ALSA 驱动程式不对这些卡进行自动侦 测. 更进一步的资讯记载在驱动程式目录下的 INSTALL 档中. 接下来笔者举两个 例子, 然後接著是个列表: Gravis UltraSound (GUS) 及相容卡: /sbin/modprobe snd-gusclassic 对完全 16 位元的 SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP): /sbin/modprobe snd-sb16 4.2 那张卡应该用哪个驱动程式? Gravis UltraSound Extreme modprobe snd-gusextreme Gravis UltraSound MAX modprobe snd-gusmax ESS AudioDrive ESS AudioDrive ES-1688 及 ES-688 音效卡 modprobe snd-audiodrive1688 Gravis UltraSound PnP Gravis UltraSound PnP, Dynasonic 3-D/Pro, STB Sound Rage 32 以及其它用 AMD InterWave (tm) 晶片的音效卡. modprobe snd-interwave UltraSound 32-Pro UltraSound 32-Pro (STB 制 Compaq 使用) 及其它使用 AMD InterWave (tm) 晶 片以及用 TEA6330T 电路来做 bass, treble 及主音量控制的卡. modprobe snd-interwave-stb Soundblaster 8-bit Soundblaster 卡 (SoundBlaster 1.0, SoundBlaster 2.0, SoundBlaster Pro) modprobe snd-sb8 Soundblaster 16 16-bit SoundBlaster 卡 (SoundBlaster 16 (PnP), SoundBlaster AWE 32 (PnP), SoundBlaster AWE 64 (PnP). 请注意本模组不支援 SoundBlaster VibraX16 音效卡. modprobe snd-sb16 Yamaha OPL3-SA2/SA3 音效卡 光是 "modprobe snd-opl3sa" 是无效的, 驱动程式不会自动侦测. 请看後面. S3 SonicVibes S3 SonicVibes PCI 音效卡. (PINE Schubert 32 PCI) modprobe snd-sonicvibes Ensoniq/Soundblaster PCI64 Ensoniq AudioPCI ES1370/1371 PCI 音效卡. (SoundBlaster PCI 64) modprobe snd-audiopci CS4232/4232A 所有使用 CS4232/CS4232A 晶片的音效卡. 光是 "modprobe snd-card-cs4232" 没用, 不自动侦测, 看後面. 4235 以及其後的 所有使用 CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 晶片的. 光是 "modprobe snd-card-cs4236" 没用, 不自动侦测, 看後面. 4.3 不自动侦测时怎麽载入驱动程式 如果您要用的驱动程式不自动侦测, 您必须在让驱动程式运作前先提供额外资 讯. 更多资讯可在驱动程式目录下的 INSTALL 档中找到. OPL3-SA2 及 OPL3-SA3 根据 INSTALL 档, 您需要提供驱动程式一切资讯. 如果您用 isapnp-tools 来初 始化您的卡, 也许可以在 /etc/isapnp.conf 档中看到像下面的值: 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) 您要用 "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 大小的参数是不是非要不可. CS4232/CS4232A 晶片 根据 INSTALL 档所言, 对这些卡您要提供 midi port 的资讯. 注意对下面例中 的卡, 它使用给 3235/6/7/8/9 的驱动程式, 我给了所有资讯(除了 DMA 大小), 不然它不会动. 所以您也许就用这整段命令列来载 入驱动程式吧! 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看到这些值: 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) 对标准设定值的卡, 您要用 "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 大小的参数是不是非要不可. CS4235/CS4236/CS4236B/CS4237B/CS4238B/CS4239 chips 根据 INSTALL 档所言, 对这些卡您要提供 midi port 以及 control port 的资 讯. 注意对 CS4237B 的卡, 我给了所有资讯(除了 DMA 大小), 不然它不会动. 所以您也许就用这整段命令列来载 入驱动程式, 不只是有 snd_port 及 snd_cport 而已. 如果您用了 isapnp-tools, 您可能在 /etc/isapnp.conf 中看 到这些值: 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) 您要用 "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 的注意事项, 又, 没有支援摇□). 注意事项: * "NN" 值要给真正的, 我不知道合理值是多少才这麽写. * 我的 CS4237B 卡没有明白指定 DMA 大小也用得很好. 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-m ixer 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 bus y 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 可以简单的得到更好的资讯. 5.2 混音器 一旦您的音效卡装好, 而 /proc 档案系统也这麽显示後, 您可以试试真正发出声 音. 首先呢, 安装公用程式套件, 或至少把 "amixer" 命令放到一些合理的地 方(如 /usr/local/bin). 先用 "amixer" 看看混音器设定. amixer 的输出会随 卡的不同而有很大变化, 我的 SoundBlaster16 显示: 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) 而我的 Crystal 4237B 的音效卡有很多其它选项: 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 注意一下 "Mute" 那一栏, CS4237B 甚至连主音量也调静音了. 对 CS4237B, 我 还要先打 amixer "master d" unmute 以後才能发出声音. SoundBlaster 的输出 就没有静音, 不过 amixer master 100 unmute 会将主音量解除静音, 还设为 100%. 您可以用数字, 或像 "mute" 及 "unmute" 的文字, 或都打, 来控制. 打 amixer "master d" 100; amixer pcm 100 unmute 可以将 CS4237B 卡的主音量 设最大, 并将 PCM 音量解除静音并设为最大. 如果左右要不一样, 可以用冒号, 如 amixer CD 25:50.(不, 我不晓得那一个是指左右声道, 不过我强调一下这也 和您的喇叭摆放位置有密切关系.) 您应该下 amixer cd rec 以将 CD 当做录音的音源. 然後後下 amixer cd norec命令解除此设定. 如果您想要经由麦克风来录些东西, 您也许可以下 amixer record-gain 100; amixer mic 100 rec mute(如果不将麦克风输入 的放 音设为静音的话, 麦克风会从喇叭收到本身的信号, 会造成高音部份音量降低.) 然而不幸的是我没能够用 amixer 来改变 3D center 及 3D space 的音量设定. 如果 有人成功了, 请告知我. 这工作可由 alsamixer 来进行. ALSA FAQ 上面表示可以用 cat > /proc/asound/#/mixerC0D0 命令来回 复混音设定, 其中 的内容是由 /proc/asound/#/mixerC0D0 中取得. 我 无法重现相同的结果, 我的电脑抱怨此设备找不到. 5.3 /dev/snd/ 下的设备 ALSA 驱动程式在 /dev/snd/ 目录下有自己的驱动程式. 如果您有一片音效卡, 您可能看到以下设备: /dev/snd/pcmC0D0 - 这张音效卡的原生音效设备. /dev/snd/mixerC0D0 - 第"零"号卡的混音器设备. /dev/snd/controlC0D0 - 第"零"号卡的控制设备. 第一个号码是指第几号音效卡. 第二个号码是代表单卡上的设备号码. 一张有两 个 PCM 设备的音效卡应该有 pcmC0D0 及 pcmc0D1 设备. 请疝N: ALSA 的设备档名和旧版已经不一样了. 旧的 ALSA 驱动程式用 /dev/snd/pcm00 (第一个是卡, 第二个是设备号). 如果看到本 HOWTO 中还有用 旧的档名的, 请写封 Email 给我以便更正. 现在您可以将任何您想听的音效档丢进第一片卡的 PCM 设备中了. 现在试试用 cat 把任何文字档(或任何档案)送进 /dev/snd/pcmC0D0, 就像这样: cat > /dev/snd/pcmC0D0. 其中 filename 可以是任意档案, 只要它够 大. 如果您已有现成的音效档, 也可以试试. 您也可以抓 [24]http://www.ldp.org/sounds/english.au. 这是 Linux Torvalds 讲 Linux 这个字如何发音的话. 音效设备预先被设定为 8000Hz, 8 位元. 这意味著刚提到的 "english.au" 会发 出讲话声, 而其它档可能只会发出噪音. 如果您听不到, 请检查您的喇叭, 或再 执行 amixer 一遍或去看医师(该不会是... 您的耳朵聋了!?) . (稍後您可以用 您喜欢的播放程式如 sox 或 mpg123 , 简单的来放完全的 48KHz, 16 位元声 音.) 如果您载入了 "snd-pcm1-oss" 模组, 您也可以利用 OSS 的相容性来存取音效 卡. 两者间有以下的对应关系: /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 5.4 额外的资讯 在 ALSA 驱动程式目录中的 INSTALL 档也提到了一些小技巧, 告诉驱动程式要作 何调整设定. 依照播放声音的用途, 您可能需要用这些命令. 一般的播放程式, 如 mpg123, sox(常以 ``play'' 命令来执行), 或 X11 应用程式如 RealPlayer 都不必用到这些. 我本人也从没用过. /proc/asound/#/pcm#0 "Playback erase" - 清除所有关於 OSS 应用程式的额外资讯. "Playback []" "Record erase" - 清除所有关於 OSS 应用程式的额外资讯. "Record []" - 应用程式名称, 包含(较优先假定)或不包含路径. - 片断(fragment)数, 给 0 则自动选择. - 一个片断的 byte 数, 或 0 选择自动. - 选择性的参数 WR_ONLY - 如果有个应用程式设开启模式为O_RDWR, 实际的权限将改为 O_WRONLY(播放), 对 Quake 等很有用... 几个□例: echo "Playback x11amp 128 16384" > /proc/asound/0/pcm0o echo "Playback squake 0 0 WR_ONLY" > /proc/asound/0/pcm0o /proc/asound/#card#/sb16 "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 通道) 例如: echo "Record 16" > /proc/asound/0/sb16 更进一步的资讯请参考 INSTALL 档. 6. 小技巧及问题排除 请先看看音效卡驱动程式目录的 FAQ 档. 这一节仍然在增修中. 6.1 编译驱动程式 Linux 核心原始码目录树 如果 ALSA 驱动程式无法成功编译, 出现像找不到 ``version.h'' 或其它引入 档(header files)之类的错误, 这是指您没有安装核心的引入档. 先花点时间看 看 Kernel-HOWTO, 将最新近的核心解开到 /usr/src 并且下 make config命令. 6.2 载入驱动程式 请检查以下各条: 音效卡相容性 您是否百分之百的确定您的音效卡有支援呢? 千万要记得检查. 有时一片叫 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. ) ``Device busy'' 或 ``unresolved symbols'' 您可能在 2.0.x 版核心中将音效卡支援编进核心内, 或是已载入 OSS/Lite(核心 的)驱动程式(可用cat /proc/modules来检查). 移除该驱动程式或重新编译核 心(请看 Kernel-HOWTO 後动手). 在 2.0 版核心中的音效模组叫做 "sound.o", 不应该被启用. (虽然 ALSA 的驱 动程式 "snd.o" 可以.) 如果您的核心是 2.2.x 版, 而没有将音效支援编译进去, ALSA 驱动程式也会无 法作用. 我也知道这两种不同的状况令人困扰, 所以我在此再作一次解释. 如果您用的是 2.0.x版核心 ("uname -a"命令传回像 "Linux penguin 2.0.35 #6 Wed Sep 23 10:19:16 CEST 1998 i686 unknown") 那麽您必须将音效驱动程式剔除掉. 如果您的核心是 2.2.x版核心, 那麽您需要音效驱动程式. 2.2.x 版核心应该将 音效驱动程式编译进核心, 但不加入任何音效卡的支援. 因此您要选音效支援, 但也确定不要加入任何音效卡驱动程式. 又见 Unresolved symbols 另一个造成 "unresolved symbols" 讯息的原因可能是新版核心配合旧版驱动程 式. 请在重新编译核心之後别忘了也重新编译 ALSA 驱动程式. 如此才可以确定 驱动程式能配上您的新核心. 检查 PnP 设定 确定音效卡起动(active)了吗? 请另外花点时间读读 PnP-HOWTO, 确认您已正确 地致动(activate)了您的音效卡. 参数有设对吗? 检查, 再三检查您的音效卡设定参数. 请小心: 534 不等於 543, 0x534 也不等 於 534. 同时, 有些音效卡要载入的模组不是您预期的那个. 休息一下, 喝杯啤酒或什麽 的, 然後再看看您 modprobe 的结果. 例如 Crystal 4232 应该插入的驱动程式 是 snd-card-cs4232, 不是 "snd-cs4231". 而 SoundBlaster PCI64 应该载入的 是 "snd-audiopci", 非 snd-es1370. (这些在文件中都有写, 而笔者在写这篇 HOWTO 时, 还曾花了一个晚上试著用 snd-cs4231 让它发出声音.) 6.3 驱动程式载入了... 可是没声音 解除静音 ALSA 驱动程式可以运用多数音效卡都有的 "静音" 能力. 如果您载入了音效驱动 程式, 一切看起来都还正确, 就是没有声音的话, 那麽您可能忘计把静音取消掉 了. 要这麽做您要用 "amixer" 或 "alsamixer", 两者都附在驱动程式中. 只要 键入: amixer -c 1 master 70:70 unmute amixer -c 1 pcm 70:70 unmute amixer -c 1 cd 70:70 unmute 对多数的应用程式应该都有效的. OSS/Linux 的相容性 如果这是您首次使用 ALSA 驱动程式, 而您以前使用过核心内建的那个的话, 您 可能想要能和过去相容的能力.(即使用 /dev/pcmX 设备之能力). 这时您需要载 入 "OSS 相容驱动程式". 执行 modprobe snd-pcm1-oss (详见关於载入本驱动程 式那一节. ). 请疝N: snd-pcm1-oss 不能於 snd-pcm1. 对旧驱动程式的支援所 需要的是 snd-pcm1-oss. 6.4 一般性建言 试著用 "insmod" 用 "insmod" 取代 kerneld 总是有用的. 也许因此您就可以在萤幕上看到错误讯 息了. 读 INSTALL 档. 在驱动程式目录中的 INSTALL 档可以发现很多资讯. 如果您的驱动程式不起作 用, 别忘了看看这个档, 也许会有额外的资讯. 除错讯息 如果以上的方法还是没有用, 您可以重新编译驱动程式, 要求它将除错讯息送进 /var/log/messages 档中, 做为最後手段. 下cd /usr/src/alsa-driver-...命令 进入驱动程式目录, 然後输入: ./configure --with-debug=detect; make clean; make 移除驱动程式(如果它已经启动的话, 请看後面有提到的移除模组小技巧) 然後用 您刚刚用的 "modprobe" 指令安插新编译的驱动程式. 看看 /var/log/messages 里有没有任何相关讯息. 如果都没有用呢... 如果您无法由讯息中取得线索, 写封 Email 到 ALSA 使用者通信论坛, [25]alsa-user@alsa-project.org. 别忘了加上以下资讯: * 您的音效卡的名称以及其使用的晶片. * 如果您的音效卡是 ISA PnP 的, 放入 isapnp.conf 中有关的部份. * 您的 conf.modules 档或是启动 ALSA 驱动程式的命令行. * 所有在 /var/log/messages 中应该和 ALSA 驱动程式有关的讯息. 6.5 回报臭虫 如果您发现了一只臭虫, ALSA 驱动程式开发组希望能够得知(至少)以下资讯: 1. 驱动程式及核心的版本: 'cat /proc/asound/version' 2. 音效卡资讯 + 厂商所标示的音效卡名称 + 该卡上面的各个晶片标示 + 'cat /proc/asound/cards' 的执行结果 3. 所有在 /var/log/messages 中的相关讯息 4. 问题的描述 6.6 小技巧: 听 CD 时... 如果您使用kmod/kerneld 以及 ALSA 驱动程式来听 CD, 那麽 kmod/kerneld 可 能不会像预期一般载入驱动程式. 这是由於命令列的 CD 放音程式只会叫 CDROM 开始播放, 而不会使用到任何设备, 让 kmod/kerneld 来载入驱动程式. 这个问 题的解可能就只有使用 modprobe 了. 6.7 小技巧: 安装 MIDI 序列驱动动程式 通常, 序列设备的 IO 埠会由标准的序列设备驱动程式占有. 所以在您可以进行 "modprobe snd-serial" 以前, 必须让驱动程式释放掉该序列设备. 以下是所需程序. setserial /dev/ttyS0 uart none modprobe snd-serial (如果您的 MIDI 设备使用不一样的设备,将 /dev/ttyS0 换成相对应的 /dev/ttySx) 6.8 小技巧: 换新核心? 换新模组! 当您更新核心後, 您可能需要重新编译 ALSA 驱动程式. 如果它们还在原来的 /usr/src 目录下, 请别忘了在您进行 ./configure, make, make install 之前 先下 make clean 命令. 喔! 还有个不太一样的核心版本编号 "2.2.0ac1", 会被 configure 命令档抱怨 不是数字. 我想这个在新版的命令档中会解决, 不然您可能得改变原始码中的核 心版本编号. 6.9 小技巧: KDE 及 ALSA 驱动程式 如果您使用了 KDE, 但却无法听到诸如开启视窗或改变使用的桌面等系统音效, 不过其它音效动作正常. 也就是您的 CD 播放, MP3 播放以及混音器都很正常, 那麽可能只是因为欠缺 "kwmsound" 而已. 所以: 确定在您的启动命令档($KDEDIR/bin/startkde)中有 "kwmsound". 6.10 小技巧: 使用 ALSA 设备 如果您以前有利用过 Linux 的音效支援, 那麽您的应用程式可能需要用到 /dev/pcm0, /dev/audio 及 /dev/mixer. 使用 OSS 相容模组 snd-pcm1-oss 是 不错的解决方法, 但如果使用真正的 ALSA 设备(在 /dev/snd/下)的话那更好. 6.11 小技巧: 移除所有模组 要一个一个的移除十几个模组实在不是个好办法. 很幸运的, 所有的模组名都是 由 snd- 开始, 所以用一点小小的命令列规划, 您可以轻易的下以下的命令移除 ALSA 音效驱动程式: cat /proc/modules|gawk '/^snd-/{print $1}|xargs -i rmmod {} Juergen Kahrs 写道: "我有一个命令档可以连 soundcore, soundlow 以及 sound 都一并消去, 如果它们已载入且没在使用中的话. 这个命令档处理 /proc/modules 三次, 这样在完成後应该不会有太多模组留下来." 他的解法是: awk '/^snd/||/^sound/&&($3==0){system("rmmod " $1)}' /proc/modules /proc/module s /proc/modules 请注意: 如果有一个模组依赖另一个模组的话, 您不可以只移除较上层的那个. 这意味著您可能有必要下第二道命令. (我从来没碰到过这种情况; 看起来您可以 以依照在 /proc/modules 中的顺序移除 ALSA 模组.) References 1. http://www.sgmltools.org/ 2. http://www.alsa-project.org/~valentyn 3. http://www.alsa-project.org/~valentyn/other-formats 4. http://plaza21.mbn.or.jp/~momokuri/alsa/index.html 5. http://www.freenix.fr/unix/linux/HOWTO/mini/Alsa.html 6. mailto:alsa-howto@alsa-project.org 7. mailto:linux-howto@metalab.unc.edu 8. http://www.fsf.org/ 9. http://www.fsf.org/ 10. http://www.alsa-project.org/intro.html 11. http://www.alsa-project.org/ 12. http://metalab.unc.edu/LDP/mirrors.html 13. file://localhost/tmp/Sound-HOWTO.html 14. file://localhost/tmp/Plug-and-Play-HOWTO.html 15. file://localhost/tmp/Kernel-HOWTO.html 16. file://localhost/tmp/zh-sgmltools.17683/Modules.html 17. file://localhost/tmp/zh-sgmltools.17683/Kerneld.html 18. ftp://ftp.alsa-project.org/pub/ 19. ftp://linux.a2000.nl/alsa 20. ftp://linux.a2000.nl/alsa/driver/ 21. ftp://linux.a2000.nl/alsa/lib/ 22. ftp://linux.a2000.nl/alsa/utils/ 23. file://localhost/tmp/zh-sgmltools.17683/Alsa-sound.txt.html#backw-compat 24. http://www.ldp.org/sounds/english.au 25. mailto:alsa-user@alsa-project.org