Ubuntu下声卡驱动解决方法alsa
一、首先介绍一下什么是ALSA ;
Advanced Linux Sound Architecture 的简称为 ALSA ,译成中文的意思是先进的Linux声音架构(这是google翻译的);一谈到架构就有点范围太大了,所以ALSA不仅仅是包括对声卡的支持和驱动;
ALSA具有如下特征:
1、对所有音频接口的高效支持,从普通用户的声卡到专业级别多路音频设备;
2、声卡驱动完全模块化设计;
3、SMP and thread-safe design.
4、开发库(alsa-lib) 为程序设计提供了简单、方便,并且拥有有高级的效果和功能;
5、支持旧版本的OSS API 结口,能为大多数的OSS应用程序提供兼容;OSS是一个商业性的驱动,OSS有一个简装本的代码已经移入内核和ALSA,其中alsa-oss就是;OSS公司据说目前已经并不存在了;我们没有必要用OSS 公司提供的商业版本;用ALSA和OSS简装版足够
二、查看 ALSA 版本,如果最新,就不用重新安装了,仔细查看一下配置吧。
$ alsactl -v
或者:
cat /proc/asound/version
如果打印出: alsactl version 1.0.19,那么 ALSA 已经是最新了。如果不是最新就要先安装最新的alsa驱动。
第一步,首先停止当前的ALSA服务:
sudo /etc/init.d/alsa-utils stop
第二步,卸载原有驱动
sudo apt-get --purge remove linux-sound-base alsa-base alsa-utils
第三步,(*由于在删除alsa-utils的时候会同时删除gdm和ubuntu-desktop,所以得重新安装,否则会无法进入桌面,请大家不要漏过此步)
sudo apt-get install gdm ubuntu-desktop
编译安装alsa
第一,在 ALSA 官方网站 http://www.alsa-project.org 上,下载最新的 ALSA 驱动,用tar -jxvf alsa-*-1.0.19.tar.bz2和tar xvf alsa-*.1.0.19.tar解压缩。
$ wget ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.19.tar.bz2
$ wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.19.tar.bz2
$ wget ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.19.tar.bz2
第二,查看自己的内核版本和声卡解码芯片是否被支持。
查看支持的内核版本
$ less alsa-driver-1.0.19/SUPPORTED_KERNELS
查看自己声卡解码芯片(如果系统不能识别声卡,可能无法由下面两个查到,那么查看你电脑配置单吧)
$ tail -2 /proc/asound/oss/sndstat
或
$ head -1 /proc/asound/card0/codec#0
比如我的 ONDA A69G 就显示的是下面这个
0: Realtek ALC655 rev 0
在 alsa-driver-1.0.15/alsa-kernel/Documentation/ALSA-Configuration.txt 中查找自己声卡解码芯片对应的 model 名字,比如我的 alc655 对应的就是:
- alc_jack For ALC65x, turn on the jack sense mode
第三,准备好编译环境,安装 gcc, libc 等等工具,还需要下载 Linux header,这是编译 ALSA 驱动必须的。
$ sudo apt-get install build-essential libncurses5-dev gettext kernel-package gcc make libc6 libc6-dev
$ sudo apt-get install linux-headers-`uname -r`
第四,编译安装,一般的 ./configure, make, make install 流程。注意的是驱动编译时候需要 module 名字,就是第三步中找到的 modle 对应的 module 名字,去掉 snd-即可。比如我的 alc655 对应的module 是 snd-atiixp那么 configure 时候需要加上 --with-cards=atiixp。编译安装时遇到问题请仔细阅读源码附带的 INSTALL。
$ cd alsa-driver-1.0.19
$ ./configure --with-cards=MODULE_NAME 我的是snd-atiixp
$ make
$ sudo make install
$ cd ../alsa-lib-1.0.19
$ ./configure
$ make
$ sudo make install
$ cd ../alsa-utils-1.0.19
$ ./configure
$ make
$ sudo make install
第五,配置 ALSA。
如果以前系统中没有使用 ALSA 驱动,可能需要 alsaconf 来配置,还要将 ALSA 加入内核模块中,我没有经验;
如果系统原来已经有 ALSA 驱动,但是没有识别声卡或者声音驱动有问题。那么理论上只需要在两个地方做改动:
添加 /etc/modprobe.d/sound 文件,内容为:
alias snd-card-0 snd-MODULE_NAME
alias sound-slot-0 snd-MODULE_NAME
比如我的就是:
alias snd-card-0 snd-atiixp
alias sound-slot-0 snd-atiixp
在 /etc/modprobe.d/alsa-base 中最后一行添加:
options snd-MODULE_NAME model=MODEL_NAME
第六,重新启动查看效果,可以使用 alsamixer 调节声音设置。