Linux下的声卡驱动主要有OSS和ALSA。

OOS(Open Sound System),官网:www.opensound.com
ALSA(Advanced Linux Sound Architecture),官网:www.alsa-project.com

OSS架构与实现
OSS设备是字符设备,主设备号是14,次设备号由各个设备单独定义。
设备文件:
/dev/sndstat
只读文件,作用仅限于汇报当前声卡状态。提供给最终用户检测声卡的。

/dev/dsp
用于数字采样(sampling)和数字录音(recording)的设备文件。写数据就是放音,读数据就是录音。这个设备可能有多个,如/dev/dsp1等。
dsp设备主要是用来进行A/D,D/A转换的。可以已读写的方式打开,比如IP电话。
dsp设备驱动要考虑内核缓冲区和用户缓冲区的速度匹配,主要是采样频率(由内核决定)和应用程序的读写速度间的匹配,速度差异会导致声音数据不一致或者IO阻塞。
默认:8位无符号数据,单声道,8KHz采样率。

/dev/audio
类似于/dev/dsp,出于对兼容性的考虑,兼容于Sun工作站上的音频设备,使用的是mu-law编码方式,甚用。对于应用程序来说,同一时刻只能使用/dev/dsp或/dev/audio中的一种,因为它们是相同硬件的不同软件接口。

/dev/mixer
应用程序对混音器的软件接口。混音器电路通常由两个部分组成:input mixer和ouput mixer。
混音器位于dsp之后,和喇叭之类的设备直接相连。混音器输出的都是模拟信号,不管是对dsp进行输出,还是对喇叭进行输出。
对混音器的编程包括如何设置增益控制器的级别,以及如何在不同的音源间进行切换。通常这些操作是不连续的,而且不会像录音或者放音那样占用大量计算机资源。因此,混音器除了open和close外,大部分操作都是通过ioctl系统调用来完成。与/dev/dsp不同,/dev/mixer允许多个应用程序同时访问,并且混音器的设置值会一直保持到对应的设备文件被关闭为止。
为了简化应用程序的设计,Linux上的声卡驱动程序大多支持将混音器的ioctl操作直接应用到声音设备上,也就是说,如果已经打开了/dev/dsp,那么就不用打开/dev/mixer来对混音器进行操作,而是可以直接用打开/dev/dsp时得到的文件标志符来设置混音器。

/dev/sequencer
用来对声卡内建的波表合成器进行操作,或者对MIDI总线上的乐器进行控制。

相关文件:(kernel中)
include/linux/soundcard.h
include/linux/sound.h
sound/sound_core.h

模块入口见sound_core.h:
主要实现
subsys_initcall(init_soundcore);
module_exit(cleanup_soundcore);

static int __init init_soundcore(void)
{
    int rc;

rc = init_oss_soundcore();
    if (rc)
        return rc;

sound_class = class_create(THIS_MODULE, "sound");
    if (IS_ERR(sound_class)) {
        cleanup_oss_soundcore();
        return PTR_ERR(sound_class);
    }

sound_class->devnode = sound_devnode;

return 0;
}

static int __init init_oss_soundcore(void)
{
    if (preclaim_oss &&
        register_chrdev(SOUND_MAJOR, "sound", &soundcore_fops) == -1) {
        printk(KERN_ERR "soundcore: sound device already in use.\n");
        return -EBUSY;
    }

return 0;
}

static void __exit cleanup_soundcore(void)
{
    cleanup_oss_soundcore();
    class_destroy(sound_class);
}

static void cleanup_oss_soundcore(void)
{
    /* We have nothing to really do here - we know the lists must be
       empty */
    unregister_chrdev(SOUND_MAJOR, "sound");
}

static const struct file_operations soundcore_fops =
{
    /* We must have an owner or the module locking fails */
    .owner    = THIS_MODULE,
    .open    = soundcore_open,
};

Linux音频驱动(1)相关推荐

  1. Linux 音频驱动

    Linux 音频驱动 硬件介绍 WM8960与IMX6ULL之间有两个通信接口:I2C和I2S 其中I2C用于配置WM8960 I2S用于音频数据传输 修改设备树文件 编写I2C子节点设备树 code ...

  2. Linux 音频驱动(四) ASoC音频驱动之Machine驱动

    目录 1. 基本介绍 2. 源码分析 2.1. Machine数据结构 struct snd_soc_dai_link 3. 声卡 3.1. 数据结构struct snd_soc_card 3.2. ...

  3. Linux 音频驱动(五) ALSA音频驱动之PCM逻辑设备

    目录 1. 前言 2. PCM逻辑设备 2.1. 创建 PCM逻辑设备: 2.2. PCM逻辑设备文件操作函数集:snd_pcm_f_ops[] 2.3. Open PCM逻辑设备 2.4. Writ ...

  4. STM32MP157驱动开发——Linux 音频驱动

    STM32MP157驱动开发--Linux 音频驱动 一.简介 1.CS42L51 简介 2.I2S总线 3.STM32MP1 SAI 总线接口 二.驱动开发 1.音频驱动 1)修改设备树 i2c 接 ...

  5. Linux音频驱动之二:Control接口的调用

    本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记 一. control接口说明 Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频 ...

  6. linux 音频架构绕过,linux音频驱动架构

    1.linux音频驱动架构分为3部分组成:硬件无关层(核心层ALSA).板级音频数字接口层驱动(McASP.McBSP等).外部codes驱动 sound/soc/davinci/ti81xx-etv ...

  7. 转载:Linux音频驱动-OSS和ALSA声音系统简介及其比较

    Linux音频驱动-OSS和ALSA声音系统简介及其比较 概述 昨天想在Ubuntu上用一下HTK工具包来绘制语音信号的频谱图和提取MFCC的结果,但由于前段时间把Ubuntu升级到13.04,系统的 ...

  8. Linux 音频驱动(二) ASoC音频驱动之Platform驱动

    目录 1. 简介 2. 源码分析 2.1. CPU DAI 2.1.1. 数据结构struct snd_soc_dai_driver 2.1.2. 注册CPU DAI:snd_soc_register ...

  9. linux音频驱动dma数据,Linux音频驱动简述

    3.2 mixer接口 int register_sound_mixer(structfile_operations *fops, int dev); 上述函数用于注册1个混音器,第1个参数fops即 ...

  10. linux 音频驱动的流程,Intel平台下Linux音频驱动流程分析

    [软件框架] 在对要做的事情一无所知的时候,从全局看看系统的拓扑图对我们认识新事物有很大的帮助.Audio 部分的驱动程序框架如下图所示: 这幅图明显地分为 3 级. 上方蓝色系的 ALSA Kern ...

最新文章

  1. 配置 L2 Population - 每天5分钟玩转 OpenStack(114)
  2. Web服务器 Web容器 Servlet容器
  3. JDBC对MySQL数据库存储过程的调用
  4. 《论文笔记》Experimental Research on Cooperative vSLAM for UAVs
  5. HTMLCSS--使用CSS完成页面布局及排版(附案例代码)
  6. Silverlight访问Wcf Ria Library的问题总结
  7. 数据分析之 pandas
  8. 湖南省委短信平台改造方案
  9. 信息安全-保研面试经历总结
  10. win7如何启用计算机的无线功能,win7系统如何开启wifi热点|win7系统配置wifi热点的方法...
  11. 论:CMMI 过程改进规程
  12. Ubuntu 查看文件以及磁盘空间大小管理
  13. Excel - 斜线表头制作
  14. 深圳Go培训:Go语言适合干什么?
  15. CANoe——CAPL(Message)
  16. java NIO BIO和AIO
  17. 控制结构:1.台球游戏
  18. 下载 kaakoo 咔咕 http://job.kaakoo.cn/download.aspx?ID=T679
  19. 汽车行业数据存储越发复杂?群晖备份存储方案为您支招
  20. python async 使用,介绍

热门文章

  1. 芒德布罗集matlab程序,分形、噪声和状态变量
  2. 桂花林上,再读“六项精进”
  3. JVM学习:JVM对象分代晋升机制
  4. Chrome插件-github贡献图形展示-Isometric
  5. HTML+CSS(精灵图)实现微信滑动门技术
  6. 万分之一错误率问题的分析及定位
  7. Vue全家桶都包括些什么?
  8. linux root删除垃圾箱,Linux 用 root 用户都无法删除的文件如何删除
  9. ssh 使用秘钥连接服务器
  10. 王者荣耀最失败的英雄是?失败英雄应该有哪些特征?