⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 alsa-sound-6.html

📁 Linux初学者最好的老师就是howto了。相当于函数man。
💻 HTML
字号:
<html>

<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<meta name="GENERATOR" content="Microsoft FrontPage 4.0">
<meta name="ProgId" content="FrontPage.Editor.Document">
<title>6</title>
</head>

<body>

<table>
  <tr>
    <td bgColor="#FFFFFF" vAlign="top"><img alt="Next" src="next.gif" width="16" height="16"> 
      <a href="Alsa-sound-5.html"><img alt="Previous" src="prev.gif" width="16" height="16"></a> <a href="Alsa-sound.html#toc6"><img alt="Contents" src="toc.gif" width="16" height="16"></a>
      <hr>
      <h2><a name="s6">6. 小技巧及问题排除</a></h2> 
      <p>请先看看音效卡驱动程式目录的 FAQ 档.  
      这一节仍然在增修中. 
      <h2><a name="ss6.1">6.1 编译驱动程式</a></h2> 
      <p>  
      <h3>Linux 核心原始码目录树</h3> 
      <p>如果 ALSA 驱动程式无法成功编译, 出现像找不到 ``version.h''  
      或其它引入档(header files)之类的错误,  
      这是指您没有安装核心的引入档. 先花点时间看看 Kernel-HOWTO,  
      将最新近的核心解开到 /usr/src 并且下 <code>make config</code>命令. 
      <p> 
      <h2><a name="ss6.2">6.2 载入驱动程式</a></h2> 
      <p>请检查以下各条: 
      <p> 
      <h3>音效卡相容性</h3>
      <p>您是否百分之百的确定您的音效卡有支援呢?  
      千万要记得检查. 有时一片叫 X123 的音效卡并不全等於叫  
      X123b 的, 这样可能会浪费您的时间. 
      <p>在另一方面, 即使是有支援的卡也可能会找您麻烦 -  
      为了安装一片 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. ) 
      <p> 
      <h3>``Device busy'' 或 ``unresolved symbols''</h3> 
      <p>您可能在 2.0.x 版核心中将音效卡支援编进核心内,  
      或是已载入 OSS/Lite(核心的)驱动程式(可用<code>cat  
      /proc/modules</code>来检查). 移除该驱动程式或重新编译核心(请看  
      Kernel-HOWTO 後动手). 
      <p>在 2.0 版核心中的音效模组叫做 &quot;sound.o&quot;, <b>不应该</b>被启用.  
      (虽然 ALSA 的驱动程式 &quot;snd.o&quot; 可以.) 
      <p>如果您的核心是 2.2.x 版, 而没有将音效支援编译进去,  
      ALSA 驱动程式也会无法作用. 
      <p>我也知道这两种不同的状况令人困扰,  
      所以我在此再作一次解释. 如果您用的是 <b>2.0.x版</b>核心  
      (&quot;uname -a&quot;命令传回像 &quot;Linux penguin 2.0.35 #6 Wed Sep  
      23 10:19:16 CEST 1998 i686 unknown&quot;)  
      那麽您必须将音效驱动程式<b>剔除</b>掉. 
      <p>如果您的核心是 <b>2.2.x版核心</b>, 那麽您<b>需要音效驱动程式</b>.  
      2.2.x 版核心应该<b>将音效驱动程式编译进核心,  
      但不加入任何音效卡的支援</b>. 因此您要选音效支援,  
      但也确定不要加入任何音效卡驱动程式. 
      <p> 
      <h3>又见 Unresolved symbols</h3> 
      <p>另一个造成 &quot;unresolved symbols&quot;  
      讯息的原因可能是新版核心配合旧版驱动程式.  
      请在重新编译核心之後别忘了也重新编译 ALSA 驱动程式.  
      如此才可以确定驱动程式能配上您的新核心. 
      <p> 
      <h3>检查 PnP 设定</h3> 
      <p>确定音效卡起动(active)了吗? 请另外花点时间读读 PnP-HOWTO,  
      确认您已正确地致动(activate)了您的音效卡. 
      <p> 
      <h3>参数有设对吗?</h3>
      <p>检查, 再三检查您的音效卡设定参数. 请小心: 534  
      不等於 543, 0x534 也不等於 534. 
      <p>同时, 有些音效卡要载入的模组不是您预期的那个.  
      休息一下, 喝杯啤酒或什麽的, 然後再看看您 modprobe  
      的结果. 例如 Crystal 4232 应该插入的驱动程式是  
      snd-card-cs4232, 不是 &quot;snd-cs4231&quot;. 而 SoundBlaster PCI64  
      应该载入的是 &quot;snd-audiopci&quot;, 非 snd-es1370. (这些在文件中都有写,  
      而笔者在写这篇 HOWTO 时, 还曾花了一个晚上试著用  
      snd-cs4231 让它发出声音.) 
      <p> 
      <h2><a name="ss6.3">6.3 驱动程式载入了... 可是没声音</a></h2> 
      <p>  
      <p>  
      <h3>解除静音</h3> 
      <p>ALSA 驱动程式可以运用多数音效卡都有的 &quot;静音&quot;  
      能力. 如果您载入了音效驱动程式, 一切看起来都还正确,  
      就是没有声音的话, 那麽您可能忘计把静音取消掉了.  
      要这麽做您要用 &quot;amixer&quot; 或 &quot;alsamixer&quot;,  
      两者都附在驱动程式中. 只要键入: 
      <blockquote> 
        <code> 
        <pre>amixer -c 1 master 70:70 unmute
amixer -c 1 pcm 70:70 unmute
amixer -c 1 cd 70:70 unmute
</pre> 
        </code> 
      </blockquote> 
      对多数的应用程式应该都有效的. 
      <p> 
      <h3>OSS/Linux 的相容性</h3> 
      <p>如果这是您首次使用 ALSA 驱动程式,  
      而您以前使用过核心内建的那个的话,  
      您可能想要能和过去相容的能力.(即使用 /dev/pcmX  
      设备之能力). 这时您需要载入 &quot;OSS 相容驱动程式&quot;.  
      执行 <code>modprobe snd-pcm1-oss</code> (详见关於载入本驱动程式那一节.  
      ). 请疝N: snd-pcm1-oss 不能於 snd-pcm1.  
      对旧驱动程式的支援所需要的是 snd-pcm1-oss. 
      <p> 
      <h2><a name="ss6.4">6.4 一般性建言</a></h2> 
      <p>  
      <p>  
      <h3>试著用 &quot;insmod&quot;</h3> 
      <p>用 &quot;insmod&quot; 取代 kerneld 总是有用的.  
      也许因此您就可以在萤幕上看到错误讯息了. 
      <p> 
      <h3>读 INSTALL 档.</h3> 
      <p>在驱动程式目录中的 INSTALL 档可以发现很多资讯.  
      如果您的驱动程式不起作用, 别忘了看看这个档,  
      也许会有额外的资讯. 
      <p> 
      <h3>除错讯息</h3>
      <p>如果以上的方法还是没有用, 您可以重新编译驱动程式,  
      要求它将除错讯息送进 /var/log/messages 档中,  
      做为最後手段. 下<code>cd /usr/src/alsa-driver-...</code>命令进入驱动程式目录,  
      然後输入: 
      <p> 
      <blockquote>
        <code>
        <pre>./configure --with-debug=detect; make clean; make
</pre>
        </code>
      </blockquote>
      <p>移除驱动程式(如果它已经启动的话,  
      请看後面有提到的移除模组小技巧) 然後用您刚刚用的  
      &quot;modprobe&quot; 指令安插新编译的驱动程式. 看看 /var/log/messages  
      里有没有任何相关讯息. 
      <p> 
      <h3>如果都没有用呢...</h3>
      <p>如果您无法由讯息中取得线索, 写封 Email 到 ALSA  
      使用者通信论坛, <a href="mailto:alsa-user@alsa-project.org">alsa-user@alsa-project.org</a>. 
      <p>别忘了加上以下资讯: 
      <ul> 
        <li>您的音效卡的名称以及其使用的晶片. 
        <li>如果您的音效卡是 ISA PnP 的, 放入 isapnp.conf  
          中有关的部份. 
        <li>您的 conf.modules 档或是启动 ALSA 驱动程式的命令行. 
        <li>所有在 /var/log/messages 中应该和 ALSA  
          驱动程式有关的讯息.</li> 
      </ul> 
      <p> 
      <h2><a name="ss6.5">6.5 回报臭虫</a></h2> 
      <p>如果您发现了一只臭虫, ALSA  
      驱动程式开发组希望能够得知(至少)以下资讯: 
      <ol> 
        <li>驱动程式及核心的版本: 'cat /proc/asound/version' 
        <li>音效卡资讯 
          <ul> 
            <li>厂商所标示的音效卡名称 
            <li>该卡上面的各个晶片标示 
            <li>'cat /proc/asound/cards' 的执行结果</li> 
          </ul> 
        <li>所有在 /var/log/messages 中的相关讯息 
        <li>问题的描述</li> 
      </ol> 
      <p>  
      <h2><a name="ss6.6">6.6 小技巧: 听 CD 时...</a></h2> 
      <p>如果您使用kmod/kerneld 以及 ALSA 驱动程式来听 CD, 那麽  
      kmod/kerneld 可能不会像预期一般载入驱动程式.  
      这是由於命令列的 CD 放音程式只会叫 CDROM 开始播放,  
      而不会使用到任何设备, 让 kmod/kerneld 来载入驱动程式.  
      这个问题的解可能就只有使用 modprobe 了. 
      <p> 
      <h2><a name="ss6.7">6.7 小技巧: 安装 MIDI 序列驱动动程式</a></h2> 
      <p>通常, 序列设备的 IO  
      埠会由标准的序列设备驱动程式占有. 所以在您可以进行  
      &quot;modprobe snd-serial&quot; 以前,  
      必须让驱动程式释放掉该序列设备. 
      <p>以下是所需程序. 
      <p> 
      <blockquote>
        <code>
        <pre>setserial /dev/ttyS0 uart none
modprobe snd-serial
</pre>
        </code>
      </blockquote>
      <p>(如果您的 MIDI 设备使用不一样的设备,将 /dev/ttyS0  
      换成相对应的 /dev/ttySx) 
      <p> 
      <h2><a name="ss6.8">6.8 小技巧: 换新核心? 换新模组!</a></h2> 
      <p>当您更新核心後, 您可能需要重新编译 ALSA 驱动程式.  
      如果它们还在原来的 /usr/src 目录下, 请别忘了在您进行  
      ./configure, make, make install 之前先下 <code>make clean</code>  
      命令. 
      <p>喔! 还有个不太一样的核心版本编号 &quot;2.2.0ac1&quot;,  
      会被 configure 命令档抱怨不是数字.  
      我想这个在新版的命令档中会解决,  
      不然您可能得改变原始码中的核心版本编号. 
      <p> 
      <h2><a name="ss6.9">6.9 小技巧: KDE 及 ALSA 驱动程式</a></h2> 
      <p>如果您使用了 KDE,  
      但却无法听到诸如开启视窗或改变使用的桌面等系统音效,  
      不过其它音效动作正常. 也就是您的 CD 播放, MP3  
      播放以及混音器都很正常, 那麽可能只是因为欠缺 &quot;kwmsound&quot;  
      而已. 
      <p>所以: 确定在您的启动命令档($KDEDIR/bin/startkde)中有  
      &quot;kwmsound&quot;. 
      <p> 
      <h2><a name="ss6.10">6.10 小技巧: 使用 ALSA 设备</a></h2> 
      <p>如果您以前有利用过 Linux 的音效支援,  
      那麽您的应用程式可能需要用到 /dev/pcm0, /dev/audio 及  
      /dev/mixer. 使用 OSS 相容模组 snd-pcm1-oss 是不错的解决方法,  
      但如果使用真正的 ALSA 设备(在 /dev/snd/下)的话那更好. 
      <p> 
      <h2><a name="ss6.11">6.11 小技巧: 移除所有模组</a></h2> 
      <p>要一个一个的移除十几个模组实在不是个好办法.  
      很幸运的, 所有的模组名都是由 snd- 开始,  
      所以用一点小小的命令列规划,  
      您可以轻易的下以下的命令移除 ALSA 音效驱动程式: 
      <p> 
      <blockquote>
        <code>
        <pre>cat /proc/modules|gawk '/^snd-/{print $1}|xargs -i rmmod {}
</pre>
        </code>
      </blockquote>
      <p>Juergen Kahrs 写道: &quot;我有一个命令档可以连 soundcore,  
      soundlow 以及 sound 都一并消去,  
      如果它们已载入且没在使用中的话. 这个命令档处理  
      /proc/modules 三次,  
      这样在完成後应该不会有太多模组留下来.&quot;  
      他的解法是: 
      <p> 
      <blockquote>
        <code>
        <pre>awk '/^snd/||/^sound/&amp;&amp;($3==0){system(&quot;rmmod &quot; $1)}' /proc/modules /proc/modules /proc/modules
</pre>
        </code>
      </blockquote>
      <p>请注意: 如果有一个模组依赖另一个模组的话,  
      您不可以只移除较上层的那个.  
      这意味著您可能有必要下第二道命令. (我从来没碰到过这种情况;  
      看起来您可以以依照在 /proc/modules 中的顺序移除 ALSA  
      模组.) 
      <p> 
      <hr>
      <img alt="Next" src="next.gif" width="16" height="16"> 
      <a href="Alsa-sound-5.html"><img alt="Previous" src="prev.gif" width="16" height="16"></a> <a href="Alsa-sound.html#toc6"><img alt="Contents" src="toc.gif" width="16" height="16"></a></td>
  </table>

</body>

</html>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -