paulin 发表于 2004-5-11 13:52:37

kenel 2.6.x ALSA VIA 声卡解决方案

系统 : Debian SID + kernel 2.6.6 + soltek(就是这块主板有问题)

最近很多使用 VIA 声卡的朋友都碰到了无法在 ALSA 驱动下正常工作的问题,那么ALSA是不是不支持我们的 VIA声卡呢?

答案是否定的, ALSA 完全支持 VIA 系列声卡,那么为什么在 alsaconf 运行过后并且运行 kmix 跳高音量得到的仍然是无声的世界?

为了搞清楚这个问题,首先打开ALSA的文档:
/usr/kernel/linux/Documentions/sound/alsa/ALSA-Configuration.conf文件

查看其中的 Module snd-via82xx 节:
其中有这样的描述:

ac97_quirk- AC'97 workaround for strange hardware
                  See the description of intel8x0 module for details。

转换到Module snd-intel8x0 节:
其中有这样的描述:
    The ac97_quirk option is used to enable/override the workaround
    for specific devices.Some hardware have swapped output pins
    between Master and Headphone, or Surround.The driver provides
    the auto-detection of known problematic devices, but some might
    be unknown or wrongly detected.In such a case, pass the proper
    value with this option.


聪明的你发现什么问题了吗?
The driver provides
    the auto-detection of known problematic devices, but some might
    be unknown or wrongly detected.

我们尝试自己设定 ac97_quirk 的值。

打开 /etc/modprobe.conf 文件,其中关于 via 声卡设定是这样的:

alias char-major-116 snd
alias char-major-14 soundcore
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-8 snd-seq-oss
alias sound-service-0-12 snd-pcm-oss
alias snd-card-0 snd-via82xx
alias sound-slot-0 snd-via82xx
options snd-via82xx ac97_quirk=0


看到多了什么吗?对了对后一行,设定了 snd-via82xx 的一个选项ac97_quirk=0 。
这个时候我们再重新启动alsa,/etc/init.d/alsa restart
$cat /proc/asound/cards
$cat /proc/asound/oss/sndstat
如果成功驱动的化其中会有信息,当然无声的情况下它也是会有信息的,只能代表你的ALSA启动了,如果检测到你的声卡的话其中会有 VIA 8233A 等类似字样。
这个时候用 mplayer 放一部电影试试,成功了吗?我是成功了。
#mplayer -vo xv -ao alsa1x martix.avi
普通用户默认没有权限(对于使用了 devfs),文档中是这样说的,
添加如下内容到 devfs.conf

LOOKUP snd MODLOAD ACTION snd
REGISTER ^sound/.* PERMISSIONS root.audio 666
REGISTER ^snd/.* PERMISSIONS root.audio 0666

我并没有试验成功,我的 Debian 中 devfs 是开启的。

虽然驱动起来了,可是问题还是很多,最可怕的是居然不支持多音频流,基本上这个 ALSA 驱动没有多大用处,我已经换回 OSS 了。

后记:
樱家冢维护的 FAQ 种的解决方案改snd-via82xx 字串替换为via82cxxx_audio 的确可以驱动,不过这个时候使用的仍然是老式的 OSS 驱动,我曾经再第一时间测试过,不信的话可以删除你的 ALSA 驱动模块保留 OSS 的,怎么样,还是驱动起来了吧, cjacker 说 2.6 种的 OSS 不可用也是不对的。不过那个时候我自己也没有找到解决方案,况且 OSS 的驱动我一直用的很顺利。

KanKer 发表于 2004-5-11 16:48:41

oss好象只有商业版的才支持多音频流吧?其实若是自行编译内核把声卡编进去,效果很好。多音频流的支持可以通过音频管理器来实现,如kde下的arts和gnome下的esd。ml的mplayer包中gmplayer的菜单命令写的不好,不应该直接指定alsa播放,应该让用户根据自己的需要修改音频插件。

在内核的说明中从集成alsa后便提醒oss是将被废除的驱动。

paulin 发表于 2004-5-11 17:35:20

1. 我说的一直是内核中的 OSS ,没有说到任何商业软件;
2. 编译进内核和模块有那么大区别吗?不是自淫?为什么 ext3 都是编译成模块,你做产品能什么都编译进内核吗?
3. esd 或者 artsd 当然可以实现多音频流,我说的就是底层驱动可以支持实现的,如果不能实现那么有什么优点可言?
4.我的系统是Debian,我从来不用gmplayer,我用命令指定 alsa1x 何来菜单一说?再者根据需要修改成其它插件那还叫 ALSA 吗?本来我就是测试 ALSA 来着,你不说我还明白,你越说别人越糊涂。

我没有说 ALSA + ,我说的就是 ALSA。
不是声卡都必须用esd,artsd,或者oss模拟的,alsa自身也是可以模拟oss的。
就像你用VIA 自家的声卡还可以什么都管,多音频流非常棒,可惜不再更新了,VIA 自家的驱动甚至支持 MIDI。

jiangtao9999 发表于 2004-5-11 18:40:16

?????
内核带的OSS不是不支持多音频流么? :?:

zslevin 发表于 2004-5-11 21:42:25

It works! Thank you very much! :P

herohao 发表于 2004-5-11 22:16:22

我的出现这种情况是怎么回事
# /etc/init.d/alsasound restart
Shutting down sound driver: done
Starting sound driver: snd-via82xx done
# cat /proc/asound/cards
0 : VIA8233 - VIA 8235
                     VIA 8235 at 0xe000, irq 12
# cat /proc/asound/oss/sndstat
Sound Driver:3.8.1a-980706 (ALSA v1.0.2c emulation code)
Kernel: Linux MagicLinux 2.6.4-1mgc #1 Mon Apr 5 20:23:36 EDT 2004 i686
Config options: 0

Installed drivers:
Type 10: ALSA emulation

Card config:
VIA 8235 at 0xe000, irq 12

Audio devices: NOT ENABLED IN CONFIG

Synth devices: NOT ENABLED IN CONFIG

Midi devices: NOT ENABLED IN CONFIG

Timers:
7: system timer

Mixers: NOT ENABLED IN CONFIG
#

paulin 发表于 2004-5-12 08:49:28

非常正常,NOT ENABLED IN CONFIG 的提示没有关系,这个在内核文档中说的很清楚。

paulin 发表于 2004-5-12 08:51:49

?????
内核带的OSS不是不支持多音频流么? :?:

OSS +

我的意思是如果 ALSA 不支持支持多音频流,还有必要用ALSA吗?还有什么能够吸引我的吗?

况且我不喜欢每次 ALSA 启动的时候加载几十个模块,OSS 就要少的多。

追新,也要有这个必要。现在的很程序还不能够直接用 ALSA 1.x 输出,有什么用,到头来还是需要[ artsd | esd ] 。

paulin 发表于 2004-5-12 08:52:50

It works! Thank you very much! :P

不客气,我知道何我以前一样困惑的会有很多人。

很高兴现在大家都可以解决这个问题了,乐意与你分享。

herohao 发表于 2004-5-12 21:49:40

安照paulin兄的方法做了
一切顺利,有Audio devices: NOT ENABLED IN CONFIG
Synth devices: NOT ENABLED IN CONFIG
Midi devices: NOT ENABLED IN CONFIG
paulin兄也说正常
但是我的还是没有声音
alsamixer的声音调到最大了,终端下执行kmix如下
kmix: Trying Alsa 0.9x Device hw:0
kmix: Trying Alsa 0.9x Device hw:1
kmix: ERROR: 无法找到 ALSA 混音器。
请检查是否安装了声卡,
是否载入了声卡驱动程序。
kmix: 支持的声音驱动程序: ALSA0.9 + OSS
使用的声音驱动程序: ALSA0.9
kmix: Mixer number: 0 Name: VIA 8235
kmix: Inserted mixer 0:VIA 8235
真够郁闷的

paulin 发表于 2004-5-13 08:39:43

有没有相应的声卡设备呢?

试一下导/usr/src/linux/scripts下运行
./MAKEDEX.snd 大概就是这个脚本,记不清楚了,你自己看看吧,或许有用。

还要注意的一个问题是,并不是所有的VIA声卡都需要设定ac97_quirk ,只有在自动检测错误无声的情况下需要设定,你页可以尝试其它值,并不一定是 0 :

    ac97_quirk    - AC'97 workaround for strange hardware (-1 = default)
                  -1 = default, don't override
                     0 = disable
                     1 = use headphone control as master
                     2 = swap headphone and master controls
                     3 = for AD1985, turn on OMS bit and use headphone
                     4 = for ALC65x, turn on the jack sense mode


再搞不定的话贴出你的/etc/modprobe.conf

樱家冢 发表于 2004-5-13 08:43:31

alsaconf能找到吗?

jiangtao9999 发表于 2004-5-13 10:00:12

?????
内核带的OSS不是不支持多音频流么? :?:

OSS +

我的意思是如果 ALSA 不支持支持多音频流,还有必要用ALSA吗?还有什么能够吸引我的吗?

况且我不喜欢每次 ALSA 启动的时候加载几十个模块,OSS 就要少的多。

追新,也要有这个必要。现在的很程序还不能够直接用 ALSA 1.x 输出,有什么用,到头来还是需要[ artsd | esd ] 。
ALSA + 也很好啊~~
1.x 兼容 0.x 的输出~~

怎么看启动时 ALSA 加载的模块?

paulin 发表于 2004-5-13 10:57:08


ALSA + 也很好啊~~
1.x 兼容 0.x 的输出~~

怎么看启动时 ALSA 加载的模块?

你试试 beep-media-player 0.9.x 的输出,兼容吗?
我的不行。

$lsmod

liguangyi 发表于 2004-5-13 11:29:19

rh9系统从2.4升级到2.6系列遇到的via ac97的问题及解决方法

第一次是从2.4编译内核2.6.5,当时把alsa、oss都编译成了模块,启动后声卡就发声了,查看系统硬件,发现声卡调用的是oss的via82cxxx_audio模块

后来升级到2.6.6的时候,只编译了alsa模块,启动后提示via82cxxxx_audio模块无法加栽。在/lib/modules/2.6.6/夏也没有找到via82cxxxx_audio,但发现有snd_via82xx的模块,手动modprobe snd_via82xx后,呵呵,声卡出声了。

回过头来检查/etc/modprobe.conf,将其中的via82cxxxx_audio改为snd_via82xx,但是参数中没有楼主提到的ac97_quirk设置,重起后声卡仍然不能自动正确识别。声卡检测仍然是via82cxxx_audio模块不能加栽,然后检查/etc/modules.conf,发现声卡检测的时候,把声卡又设置为了via82cxxx_audio类型,在rc.sysinit的初始化中会加栽/etc/modules.conf中定义的模块,导致出错。将这个文件中的声卡模块也改过来,重起后就没问题了。

另外,升级2.6的内核,系统的/etc/rc.d/rc.sysinit   /etc/modprobe.conf文件都需要做一些修改。例如:modprobe.conf中usb的界面大都有问题,mousedev应该usbmouse, keybarddev应该是usbkbd, 还有我的系统中usb的hid界面是usbhid,而不是hid, 可能是把它编译成模块的原因,所以modprobe.conf中的hid也应该改为usbhid. :roll:
页: [1] 2
查看完整版本: kenel 2.6.x ALSA VIA 声卡解决方案