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 的驱动我一直用的很顺利。 oss好象只有商业版的才支持多音频流吧?其实若是自行编译内核把声卡编进去,效果很好。多音频流的支持可以通过音频管理器来实现,如kde下的arts和gnome下的esd。ml的mplayer包中gmplayer的菜单命令写的不好,不应该直接指定alsa播放,应该让用户根据自己的需要修改音频插件。
在内核的说明中从集成alsa后便提醒oss是将被废除的驱动。 1. 我说的一直是内核中的 OSS ,没有说到任何商业软件;
2. 编译进内核和模块有那么大区别吗?不是自淫?为什么 ext3 都是编译成模块,你做产品能什么都编译进内核吗?
3. esd 或者 artsd 当然可以实现多音频流,我说的就是底层驱动可以支持实现的,如果不能实现那么有什么优点可言?
4.我的系统是Debian,我从来不用gmplayer,我用命令指定 alsa1x 何来菜单一说?再者根据需要修改成其它插件那还叫 ALSA 吗?本来我就是测试 ALSA 来着,你不说我还明白,你越说别人越糊涂。
我没有说 ALSA + ,我说的就是 ALSA。
不是声卡都必须用esd,artsd,或者oss模拟的,alsa自身也是可以模拟oss的。
就像你用VIA 自家的声卡还可以什么都管,多音频流非常棒,可惜不再更新了,VIA 自家的驱动甚至支持 MIDI。 ?????
内核带的OSS不是不支持多音频流么? :?: It works! Thank you very much! :P 我的出现这种情况是怎么回事
# /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
# 非常正常,NOT ENABLED IN CONFIG 的提示没有关系,这个在内核文档中说的很清楚。 ?????
内核带的OSS不是不支持多音频流么? :?:
OSS +
我的意思是如果 ALSA 不支持支持多音频流,还有必要用ALSA吗?还有什么能够吸引我的吗?
况且我不喜欢每次 ALSA 启动的时候加载几十个模块,OSS 就要少的多。
追新,也要有这个必要。现在的很程序还不能够直接用 ALSA 1.x 输出,有什么用,到头来还是需要[ artsd | esd ] 。 It works! Thank you very much! :P
不客气,我知道何我以前一样困惑的会有很多人。
很高兴现在大家都可以解决这个问题了,乐意与你分享。 安照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
真够郁闷的 有没有相应的声卡设备呢?
试一下导/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 alsaconf能找到吗? ?????
内核带的OSS不是不支持多音频流么? :?:
OSS +
我的意思是如果 ALSA 不支持支持多音频流,还有必要用ALSA吗?还有什么能够吸引我的吗?
况且我不喜欢每次 ALSA 启动的时候加载几十个模块,OSS 就要少的多。
追新,也要有这个必要。现在的很程序还不能够直接用 ALSA 1.x 输出,有什么用,到头来还是需要[ artsd | esd ] 。
ALSA + 也很好啊~~
1.x 兼容 0.x 的输出~~
怎么看启动时 ALSA 加载的模块?
ALSA + 也很好啊~~
1.x 兼容 0.x 的输出~~
怎么看启动时 ALSA 加载的模块?
你试试 beep-media-player 0.9.x 的输出,兼容吗?
我的不行。
$lsmod 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