VirusCamp 发表于 2005-8-27 10:30:36

ML无声问题根本原因(就是alsa无法回复及保存音量)及解决

关于alsa的音量不能正确保存的问题:

只有在console和gnome下才有,在KDE下是感觉不到的,因为KDE的kmixer会自动回复音量.

1.在不使用rcalsasound或alsasound启动脚本时

开机时,由/etc/init.d/kudzu启动声卡模块,但是kudzu不会用alsactl读取/etc/asound.state回复音量,也就是全部禁音

关机时,由/etc/init.d/halt保存了音量:
# Save mixer settings, here for lack of a better place.
grep -q "\(alsa\)" /proc/devices
if [ $? = 0 -a -x /usr/sbin/alsactl ]; then
   runcmd $"Saving mixer settings" alsactl store
fi

2.如果使用rcalsasound或alsasound启动脚本,但是还是要用kudzu和halt

开机时,kudzu已经启动了声卡模块
start)
      # Start driver if it isn't already up.
        if [ ! -d /proc/asound ]; then
          start
        else
          echo "ALSA driver is already running."
        fi
于是,alsasound就不会启动start函数,也不会用alsactl读取/etc/asound.state回复音量

关机时,先是调用alsasound stop:
if [ -x $alsactl ]; then
    $alsactl -f $asoundcfg store
else
    echo -n -e "${rc_warning}!!!alsactl not found!!!${rc_reset} "
fi
#
# mute master to avoid clicks at unload
#
/usr/bin/amixer set Master mute >/dev/null 2>&1
这里保存了音量,但下面为防止unload驱动时的暴音,把主音量关了.
调用halt时,halt又保存了音量,这时就保存了错误的音量.


解决方案:
1.不用rcalsasound或alsasound
那么,kudzu就必须能启动声卡模块,并回复音量.

2.用alsasound
就不能让kudzu启动声卡,或是在alsasound start时调用restart,还有最重要的是不能让halt保存音量.

VirusCamp 发表于 2005-8-27 10:45:37

解决方案:
1.不用rcalsasound或alsasound
那么,kudzu就必须能启动声卡模块,并回复音量.

在/etc/init.d/kudzu的第51行加入:
alsactl restore

2.用alsasound
就不能让kudzu启动声卡,或是在alsasound start时调用restart,还有最重要的是不能让halt保存音量.

chkconfig --add --level 345 alsasound

在/etc/init.d/alsasound的第202行(fi前)加入:
stop
start

把/etc/init.d/halt的66到70行,就是下面的,注释掉(行前加#),它也说了,放这是因为没有更好的地方,现在有了alsasound了,就不需要在这了.
# Save mixer settings, here for lack of a better place.
grep -q "\(alsa\)" /proc/devices
if [ $? = 0 -a -x /usr/sbin/alsactl ]; then
   runcmd $"Saving mixer settings" alsactl store
fi

樱家冢 发表于 2005-8-27 11:53:27

相当精彩,看来找到了ML时常发生的声卡无声问题的根源了,呵呵,开发组的参考一下吧。

VirusCamp 发表于 2005-8-27 14:15:09

我错了,声卡模块应该不是kudzu装入的,而是由/etc/rc.d/rc.sysinit这个脚本装入的:
在/etc/rc.d/rc.sysinit的113和165行,分别是搜寻和装入.

所以,解决方案1.不用rcalsasound或alsasound ,应该改/etc/rc.d/rc.sysinit而不是kudzu
在/etc/rc.d/rc.sysinit的169加入
alsactl restore

我还有个问题:kudzu的作用到底是什么?
只是搜索硬件并把新硬件加入modprobe.conf中,而不装入?

那么,就是装入一个声卡的模块,至少有3个脚本都可以:
/etc/rc.d/rc.sysinit
/etc/init.d/alsasound
/etc/init.d/modules
ML里/etc/init.d/modules已经把声卡部分注释了.

这就是错误来源,这几个脚本是从不同的发行版中来的,没有好好整合.

樱家冢 发表于 2005-8-27 15:48:54

我错了,声卡模块应该不是kudzu装入的,而是由/etc/rc.d/rc.sysinit这个脚本装入的:
在/etc/rc.d/rc.sysinit的113和165行,分别是搜寻和装入.

所以,解决方案1.不用rcalsasound或alsasound ,应该改/etc/rc.d/rc.sysinit而不是kudzu
在/etc/rc.d/rc.sysinit的169加入
alsactl restore

我还有个问题:kudzu的作用到底是什么?
只是搜索硬件并把新硬件加入modprobe.conf中,而不装入?

那么,就是装入一个声卡的模块,至少有3个脚本都可以:
/etc/rc.d/rc.sysinit
/etc/init.d/alsasound
/etc/init.d/modules
ML里/etc/init.d/modules已经把声卡部分注释了.

这就是错误来源,这几个脚本是从不同的发行版中来的,没有好好整合.
嗯,既然有了/etc/init.d/alsasound,就不该在/etc/init.d/modules文件里保留声卡部分的设置了。
kudzu似乎就是检测硬件,然后加入/etc/modprobe.conf文件吧,帮助系统找到正确的硬件驱动模块,至于加载就不归它管了吧?

KanKer 发表于 2005-8-27 15:51:08

ML中没有 alsasound这个脚本了。
/etc/init.d/modules中的声卡模块加载部分也未注释掉,你再仔细看看:-)

VirusCamp 发表于 2005-8-28 21:25:11

ML中没有 alsasound这个脚本了。
/etc/init.d/modules中的声卡模块加载部分也未注释掉,你再仔细看看:-)

我的ML1.2f,刚看过iso里的rpm包,这是最原始的:
rcalsasound(就是alsasound)在mgc-patch-1.0-16mgc包里,似乎没有加入启动项
modules在initscripts-8.0-15mgc确实是有声卡模块,调用了alsa-startup,启动时读了音量,结束时也保存了.
halt,也保存了音量.
还是有问题.

现在我升级了mgc-patch和initscripts还有alsa,现在的alsa里没有了alsa-startup,结果成了我说的情况.

所以magic linux应该整理一下包,把责任分清,只能由一个脚本负责声卡,start和stop时都要有音量,别的脚本完全不能碰声卡.

这样的话,跟3个包有关系,mgc-patch和initscripts还有alsa-utils
1.alsasound
2.rc.sysinit装入,halt卸载
3.modules,但alsa里要有alsa-startup

KDE 发表于 2005-8-29 04:45:12

我们不再推荐用 1.2 了。
页: [1]
查看完整版本: ML无声问题根本原因(就是alsa无法回复及保存音量)及解决