热门关键字:  ubuntu  分区  函数  Fedora  linux系统进程

Linux中用ALSA驱动声卡流程详解

来源: 作者: 时间:2007-04-05 Tag: 点击:

  代码:
  [root@localhost beinan]# ls /lib/modules/2.6.11-1.1369_FC4/kernel/
  arch/    crypto/  drivers/ fs/      lib/     net/     sound/其中,sound 就是声卡模块存放目录,大多数的硬件驱动放在 drivers目录,fs 是文件系统模块的目录;net是与网络有关的存放目录,比如一些网络协议支持的模块、防火墙支持的模块等;arch 是cpu方面 ... ...

  如果我们想自己加载模块,就到这些目录中查看相应模块的信息,然后用 modprobe 来加载;

  代码:
  [root@localhost beinan]# modinfo snd-intel8x0

  查看一个模块的信息,我们用 modinfo 来查看,所要查看的模块不要带 .ko 或者.o 之类的;比如查看到类似下面的信息;

  description: Intel 82801AA,82901AB,i810,i820,i830,i840,i845,MX440; SiS 7012; Ali 5455

  通过这个我们足可以知道这是Intel 集成声卡,通过lspci -v 得到的声卡信息,感觉他们很相近;所以就能尝试用这个模块来驱动;

  代码:
  [root@localhost beinan]# modprobe snd-intel8x0

  用 modprobe 加载了模块,然后我们通过 lsmod 就能看到了;对于声卡模块是这么加载的,其它设备的驱动模块也是如此;

  <font color=red>注意:[/b][/size]这些只是教您一点基础知识,遇到什么问题,知道怎么去查看解决;如果您在论坛求助的时候,是必须把 lsmod 输入内容以及 /etc/modprobe.conf 或 modules.conf 的内容帖出来。这样能节省很多时间,否则大家不会明白问题出在哪里;

  三、针对自己系统的声卡不发声,我是否有必要来升级内核解决;

  可能存在这样的情况,比如有时我在Mandriva Linux时,声卡是有声音的,但安装好Fedora 系统后却没有声音了;所以我们有必要弄清楚如下的几个问题;可能声卡已经驱动起来了,只是我们不太了解系统的原因所致;下面我们以Fedora 为例;

  1、声卡是不是被系统识别支持了;

  我们可以用Fedora 提供的配置工具 system-config-soundcard 来测试;

  代码:
  [beinan@localhost ~]# system-config-soundcard

  通过测试,如果能听到声音,证明声卡已经驱动好了;如果听不到声音,但反应在也不迟钝,不是打开 system-config-soundcard ,按测试播放声音时会出现假死的情况;可能是声量没有打开;

  2、是否把声卡的音量打开了,比如PCM 和MASTER等;

  我们可以用下面几个工具;

  代码:
  [beinan@localhost ~]# gnome-volume-control
  [beinan@localhost ~]# kmix
  [beinan@localhost ~]# alsamixer
  [beinan@localhost ~]# aumix

  上面的四个工具,可以尝试一下,有时这几个工具存在BUG的事;所以我们还要引入一个工具 aumix ,目前已经被Fedora 删除了;我们自己安装上就行了;

  3、我的声卡是测试时是有声音的,但我为什么不能播放CD和听mp3呢?

  自从Redhat 8.0以后,也就是说 Redhat 9.0 ,Fedora 1.0,Fedora 2.0,Fedora 3.0 ,Fedora 4.0的媒体播放软件不再对mp3提供支持;究其原因是版权方面的原因;但这不是意味着我们不能在Fedora 系统中让播放软件支持 mp3;我们可以安装mp3支持补丁或者下载全新的播放器;而这一切都离不开在线安装工具 apt或yum ;

  至于CD为什么不能播放的问题,在论坛上已经说过多次了;首先要保证CDROM的音频线和主板相连接;有的弟兄会问,Windows为什么就能直接播放,我也没有把CDROM的音频线接在主板上;我答复您的是:咱们得转换观念,咱们是在用Linux,而不是Windows;

  4、查看声卡是否有模块冲突;

  比如Intel 主板集成了猫和声卡、网卡等,这时可能猫的蜂鸣器会被系统识别为声卡,所以要通过 lsmod 来查看,是否有 snd-intel8x0m;如果有则要处理一下;把在/lib/modules/内核的版本/kernel/sound/pci 中或 /lib/modules/内核的版本/kernel/drviers/sound/pci中的 snd-intel8x0m.ko改名为 snd-intel8x0m.koBAK ;

  还有类似的主板,比如 VIA 主板集成了声卡和猫的, 如果声卡不发声,大多也与这有关,比如内核模块有snd-via82xx.ko 和snd-via82xx-modem.ko,可能系统会把 snd-via82xx-modem.ko模块当成是声卡的驱动。如果您出现这样的情况,也要改名;

  5、通过 alsaconf 来配置声卡;

  一般的情况下,系统在安装的时候,会自动把声卡配好;如果能识别的,就基本没有问题了;但如果出现识别了,但还是不发声;或者识别成猫的蜂鸣器;所以我们除了要把前面所说的猫的蜂鸣器模块改名后,还要重新运行一下声卡配置工具 alsaconf ;可能我们还需要前面的一点知识,比如 modprobe 、lsmod等;有必要的时候还要启新启动机器;

  如果我没有alsaconf 这个命令怎么办?

  代码:
  [root@localhost beinan]# /usr/sbin/alsaconf

  比如在Fedora Core 4.0 中,可能您不能发现这个命令;您采取的办法只能是重新编译 alsa-utils ;但也要保守编译;不能把alsa相关的包全都删除,只能是选择对应版本来编译;现在的Fedora 通过yum和apt升级,如果系统所依赖的包出被移除,比较重要的,alsa 就是其中的一个;会导致一些程序不能用;因为有版本对应关系;我们不能把系统整体的依赖关系打破;当然无关紧要的,比如这个软件包是依赖于其它包,而这个包不为其它包提供依赖的包,这样的包是可以移除的;

  自己编译alsa-utils 的办法是:

  首先,确认系统alsa软件包的版本;

  代码:
  [root@localhost alsa]# rpm -qa |grep alsa
  alsa-utils-1.0.9rf-2.FC4
  alsa-lib-1.0.9rf-2.FC4
  alsa-tools-1.0.9-1.fc4

  我们要到 alsa-project.org 中下载 1.0.9的源码包;主要下载alsa-lib-1.0.9 和 alsa-utils-1.0.9a;不要卸载原来的RPM包;先安装 alsa-lib-1.0.9,然后再安装alsa-utils-1.0.9a ;编译方法无非是 tar zxvf file.tar.gz 或者 tar jxvf file.tar.bz2 ,然后是进入相应的解压目录 ./configure;make;make install ;

  当然您要有安装开发工具、开发库等;如果不能进行源码包安装alsa等,所以我们要补装系统所缺少的软件;请参考 《Fedora / Redhat 软件包管理指南》

  这样我们就有 alsaconf 工具可用了;这样编译 alsa也不会对系统造成破坏;

  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
  中场休息:我已经精疲力尽,上面所提到的我都尝试了,但还是不能驱动声卡;我该怎么办?
  +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

  如果上面的的内容您都明白了,那我得为您祝贺,说明您对硬件的驱动方法已经有所了解了;虽然声卡的问题还是没有解决,但您把基本的必备知识掌握,解决声卡的发声还不是什么难事;

  您看到这里已经是很疲惫,呵,我写到这里也有点累;但为了初学者在Linux能听到音乐,我还得接着努力,直到把您的问题解决为止;

  四、安装新版本的ALSA;

  1、对ALSA软件包的说明;

  通过上面的一系列工程,可能您发现还不能解决您的问题,这时我们有必要升级ALSA;至于是否升级内核,我们还得等完成这步,看是否有必要;比如在Fedora 4.0 中,我们通过 rpm -qa |grep alsa 查询时会发现没有 alsa-driver 这个包,这是怎么回事?

  代码:
  [root@localhost alsa]# rpm -qa |grep alsa
  alsa-utils-1.0.9rf-2.FC4
  alsa-lib-1.0.9rf-2.FC4

  现就ALSA 相关的软件包做一说明(在alsa-project.org 上有列出);

  alsa-lib 是alsa-driver 或者alsa其它包的时候,必须先安装这个包;

  alsa-driver 是音频设备的驱动;一般内核都集成在里面,大多是以模块的方式,安装在了 /lib/modules/内核的版本/kernel/sound 或 /lib/modules/内核的版本/kernel/drviers/sound/ 中了;每个版本的内核都是如此;这也是我们没有在 Fedora Core 4.0 中没有发现 alsa-driver的原因 ;如果我们自己编译升级 alsa,其中 alsa-driver 也是被安装在 /lib/modules/内核的版本/kernel/sound 中或 /lib/modules/内核的版本/kernel/drviers/sound 中 ;明白了吧;

  alsa-utils 这个包主要是一些声卡配置工具,比如 alsaconf 、 alsamixer等;

  alsa-oss 这个包和alsa-driver 一样,也没有以独立的包出现在 Fedora Core 4.0 中,原因和alsa-driver 一样,是集成在内核了,这个包极有必要的;如果我们升级ALSA的话,有些声卡用ALSA是驱动不起来的,是必须用alsa-oss才行;alsa- oss 包括了oss驱动库;alsa-oss,我们自己安装一般是默认放在了 /usr目录中;

  alsa-tools 这个是额外的工具包,不是必须的;是针对一些特别的声卡的工具或者解码器之类,您可以根据自己的声卡来安装;不安装也是可以的;

  其它的包就不说了,到 alsa-project.org 上去看吧;比较重要的就是 alsa-lib 、alsa-driver、alsa-utils 、alsa-oss ;

  2、ALSA的编译安装的前期准备;

  编译安装ALSA,我们需要什么环境,就如同我们在Windows中打开一个file.doc文档一样,是需要先把Word安装上一样;Linux也是如此,我们必須先把软件包编译所需要的工具安装上;另外还要安装kerenel-devel或者其它一些支持的库,如果您没有安装这些,编译无法进行;这样开发工具都在系统安装盘中;如果您不知道如何安装,对于Fedora /Redhat 请参见 《Fedora / Redhat 软件包管理指南》

  您也要在线升级内核及内核的源码包,以Fedora 4.0为例,必须保证kernel 和kernel-devel 包是同一个版本;可能您看到好多kernel的包,还有什么smp之类的;如果您只是单处理器的,就不要用smp的;看图作业(点击看大图,升级内核时,请选择图中标记的颜色对应的内核和源码升级,也就是说版本要对应)

  重要:通过在线升级内核可能会解决您的声卡所存在的问题,要试着用前面所说的来尝试解决;您还可以通在在线升级alsa-lib ;alsa-tools ;alsa-utils 等包;

  如果通过在线升级内核及alsa-lib;alsa-utils;alsa-tools 等能解决您的问题,请不必看以下的内容;

  为什么说,通过在线长级内核能解决呢?因为通过内核的升级,内核包内置的alsa-driver 可能也得到了升级,如果打包的人升级了alsa-driver的话;如果是不能解决,说明alsa-driver 还是老版本;起重要作用的是alsa-driver ; 如果在线升级的过程中,alsa-lib没有新版本,肯定新内核中的alsa-driver 也没有更新,因为他们是配套的;明白了吧;

  判断是否有必要重编内核:

  代码:
[root@localhost beinan]# modinfo soundcore
filename:       /lib/modules/2.6.11-1.1369_FC4/kernel/soundBAK/soundcore.ko
description:    Core sound module
author:         Alan Cox
license:        GPL
alias:          char-major-14-*
vermagic:       2.6.11-1.1369_FC4 686 REGPARM 4KSTACKS gcc-4.0
depends:
srcversion:     E11490DC3F523551C4C2A6D

  如果出现上面类似的信息,则不必编译内核;

最新评论共有 5 位网友发表了评论
发表评论
评论内容:不能超过250字,需审核,请自觉遵守互联网相关政策法规。
用户名: 密码:
匿名?
注册