岁月联盟 · 中国技术网 本站主页 | 安全认证 | 用户服务 | 技术论坛
新闻快报 | 新手学堂 | 黑客特区 | 程序语言 | 数 据 库 | 防 火 墙 | 路由交换 | 系统集成 | 服 务 器 | 存储备份 | 考试认证
Windows | Linux | Java | 协议分析 | 问题解答 | 进程大全 | 网页设计 | 多 媒 体 | 图库资料 | 软件下载 | 站内下载
  您现在的位置: 岁月联盟 >> Linux频道 >> 系统管理 >> 设备驱动 >> Linux频道正文
Linux中用ALSA驱动声卡流程详解
作者:未知 文章来源:本站整理 点击数: 更新时间:2007-7-10 14:36:15

  一、什么是ALSA ;

  Advanced Linux Sound Architecture 的简称为 ALSA ,译成中文的意思是 Linux 高级声音体系(这是我直译的,可能译的不对);一谈到体系就有点范围就太大了,所以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简装版足够;

  二、关于硬件驱动驱动的必备基础 ;

  1、如何查看硬件芯片;

  在Linux操作系统中,所有的硬件都是以芯片组来区分的,品牌并不是最重要的;硬件最重要的标识是芯片组;所以您在讨论区求助的时候,只说硬件品牌,而不提供芯片组,大家是帮助不了您的,切记;

  我们查看硬件的芯片组是的命令是 lspci -v 或者是dmesg,由于dmesg输出的信息不太多,不够直观;所以经常用的还是lspci -v ;也可以用lshal 获取;最方便的还是lspci -v;初学者还是用 lspci -v 更好一点;

  代码:
  [root@localhost beinan]# lspci -v

  我们运行lspci -v 后,如果查看声卡芯片组,发会现有类似下面的一段;

  代码:
  [root@localhost beinan]# lspci -v

 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M)
AC'97 Audio Controller (rev 03)
 Subsystem: Hewlett-Packard Company: Unknown device 3080
        Flags: bus master, medium devsel, latency 0, IRQ 5
        I/O ports at 1c00  size=256
        I/O ports at 18c0  size=64
        Memory at e0100c00 (32-bit, non-prefetchable)  size=512
        Memory at e0100800 (32-bit, non-prefetchable)  size=256
        Capabilities: [50] Power Management version 2

  2、系统内核版本;

  代码:
  [root@localhost beinan]# uname -r -m -p -i
  2.6.11-1.1369_FC4 i686 i686 i386

  上面的表示的是系统的内核版本,处理器架构等;

  提示:如果您自己编译内核,还要安装kernel-devel (或 kernel-source), 这个是在系统光盘或者映像文件中有带;如果您想自己用 kernel.org 下载内核,自己编译,然后再来驱动声卡,也可以到 kernel.org 上下载最新的内核源码;

  一般情况下,如果系统默认的内核不能驱动声卡,大多得更换内核,我们建议您先从发行版所提供的升级包来升级内核及源码;比如Fedora 的扩展项目软件包更新速度极快,我们能通过apt和yum进行kernel的升级;在启用新内核时,我们不建议您删除老内核;因为现在Fedora / Redhat 引入apt和yum 更新工具,系统的完整性极为重要;如果系统被破坏,用更新工具变得极为困难;

  比如Fedora 的apt和yum升级源升级的内核也解决不了您的问题,我们可能需要自己通过 kernel.org 下载内核来编译;但也不能删除以前的内核包及源码包;一是为了安全,毕竟我们自己编译内核不是百分之百的成功;另外系统自带的内核及源码包被系统很多软件依赖;apt和yum 每次更新软件包的时候都要检查系统的完整性;

  对于有些发行版,可以直接从从 kernel.org 下载最新的内核;如果从系统提供的内核源码(kernel-devel或kernel-source)编译,可能解决不了您的问题;

  3、modprobe.conf的内容;

  在Fedora Core 4.0 中,内核模块的添加或定义别名是在 /etc/modprobe.conf 文件;在其它版本可能是 modules.conf ;如果您的系统中存在modprobe.conf ,我们就以这个文件为准;不同发行版有不同的定义文件,比如 slackware 是定义在/etc/modules.conf 中,但也要在 /etc/rc.d/rc.modules 打开相关驱动模块;

  modprobe.conf 或者module.conf就是对系统已经加载的模块进行相应的配置,比如设置别名等;这些一般都是自通过工具自动生成的,我们也可以通过查看硬件的文档和站点,也可以自己添加。为什么这样添加,而不是那样的呢?我也不懂了,因为人家文档那样说的,我不会开发,如果懂的开发的,可能会明白;请理解理解我;

  比如我用的是855的主板,系统驱动用的是 snd-intel8x0,在/etc/modprobe.conf的配置是如下的内容; 下面这段内容是通过 alsaconf 配置工具自动生成的;

  代码:
alias snd-card-0 snd-intel8x0
options snd-card-0 index=0
options snd-intel8x0 index=0
remove snd-intel8x0 { /usr/sbin/alsactl store 0 >/dev/null 2>&1 || : ; }; /sbin/modprobe -r --ignore-remove snd-intel8x0

  4、lsmod 查看已经加载的内核模块;

  如果一个设备在内核的编译中是以模块方式加载的,主要是通过lsmod 来查看;

  代码:
  [root@localhost beinan]# lsmod

  可能初学Linux的弟兄会问,内核的module存放在哪里

[1] [2] [3] [4] [5] 下一页


  • 上一个Linux频道:
  • 下一个Linux频道:
  •  
    热门文章
    推荐文章
    关于我们 | 发展历程 | 网站地图 | 广告服务 | 招贤纳士 | 战略合作 | 友情链接 | 著作声明 | 联系我们
    Copyright © 2002-2007 SYUE All rights reserved.
    E_mail:Admin@Syue.Com 皖ICP备05004589号
    未经授权禁止转载、摘编、复制或建立镜像.如有违反,追究法律责任.
    天龙八部私服 传世私服 传奇世界私服 传奇私服 bet365 天龙八部私服 热血江湖私服 英雄合击传奇私服 热血江湖私服 bet365 bet365