一、首先介绍一下什么是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 调节声音设置。


作者:​​柒月​