zoukankan      html  css  js  c++  java
  • 阶段2-新手上路项目-移动物体监控系统Sprint1-声音报警子系统开发第2节-声卡驱动开发

    1、声卡驱动架构 

    linux下面的声卡架构主要有两种,一种是OSS架构,另一种是ALSA架构。 

    a、OSS

    b、ALSA

    1)

    2)对ALSA操作的一些设备文件

    3)ALSA-OSS封装

    madplay播放器它用的是OSS架构的接口,为了能让这些以前比较优秀的播放器能继续在linux下使用,那么就提供了ALSA-OSS的封装

    2、声卡驱动集成

    去linux下打开linux内核,然后去做配置

    make menuconfig ARCH=arm CROSS_COMPILE=arm-linux-

    现在的linux内核基本上都带了声卡驱动的,只不过需要我们去把它用起来,使能它

    位于Device Drivers里面,然后Sound card support->进入到Advanced linux Sound Architecture里面->因为我们的声卡属于片上的声卡找到ALSA for Soc audio support->最后选择SOC AC97 Audio support for Mini6410 with WM9713

    那么以上是声卡驱动的选择;再往回退到Advanced Linux sound Architecture里面,->一般会dio选API择OSS Mixer API,OSS PCM(digital audio)API,(甚至可以选择OSS PCM(digital audio)API -include plugin system);他们是OSS-ALSA的封装层,用于支持老的OSS。配置好之后,就可以去编译内核了。然后通过NFS挂载起来。

    去/dev/目录下检查根本没有这些设备文件,说明没有安装好驱动。虽然在刚才的配置里面已经配置好了,但是这个配置是假象的,它根本没有编译进内核,这时候它是以独立的.ko方式编译的。

    在这里

    针对上面两种方式都要做一下:

    补充:ASoC声卡驱动架构

    ALSA片上系统层(ALSA System on Chip,ASoC)是建立在标准ALSA驱动之上的一个软件层次,被设计来为嵌入式处理器和移动设备的音频编解码器提供更好的ALSA支持。

    ASoC将嵌入式设备的音频系统从软件层面划分为以下3个组件:

    Codec驱动:即音频编解码器驱动,ASoC的一个重要设计原则就是要求Codec驱动是平台无关的。Codec驱动通常需要完成音频控制项添加、音频接口实现、DAPM(动态音频电源管理)定义和音频编解码器的IO功能。

    Platform驱动:即平台相关驱动,Platform驱动通常需要实现针对特定片上系统平台的音频DMA和音频接口(如I2S、PCM、AC97)驱动。

    Machine驱动:即机器相关驱动(或板级相关驱动),Machine驱动负责处理机器特有的一些控件和音频事件(例如,播放音频时,需要先打开一个放大器)。

    上图是以上3个组件之间的关系,可见Codec驱动和Platform驱动需要由Machine驱动把他们结合在一起,以使3个组件能够协同工作。另外Platform驱动和Codec驱动都需要实现各自的数字音频接口(DAI),其中Platform驱动的DAI描述特定片上系统处理器的音频接口,而Codec驱动的DAI与平台无关。Machine驱动只有在这两种DAI配置匹配时,在通过他们将Platform驱动和Codec驱动结合在一起。

    其涉及的数据结构定义在include/sound/soc.h中,

    ASoc为声卡注册一个名称是“soc-audio”的平台设备,然后将由snd_soc_device结构描述声卡设备实例设置为该平台设备的驱动数据。 

    可以认为snd_soc_device是整个ASoC数据结构的基础。由它引出了snd_soc_card和snd_soc_codec两个结构,然后snd_soc_card又引出了snd_soc_platform、snd_soc_dai_link。

    Machine驱动:snd_codec_device、snd_soc_card

    Platform驱动:snd_soc_platform。

    Codec驱动:snd_soc_codec、snd_soc_codec_device。

    snd_soc_dai_link负责连接Platform驱动和Codec驱动。

    有关数字音频接口(DAI)的知识:

    ASoC驱动支持便携式音频设备的Codec和SoC控制器上常见的3种DAI:AC97接口,I2S接口,PCM接口

    1)AC97接口

    这种DAI组成:一根用于硬件复位的RESET线、两根分别用于音频数据输入输出(即录音和播放)的SDATA_IN和SDATA_OUT线、一根通常由Codec驱动的位时钟线(BCLK)和一根由SoC控制器驱动的帧同步时钟线(SYNC)组成。

    2)I2S接口

    I2S接口是一种4线式音频接口:一根位时钟线(BCLK),一根用于选择声道的时钟同步线(LRCLK),和两根分别用于音频数据发送和接收额Tx和Rx线。除了这4根线外,I2S有时还会提供一根系统时钟线(SYSCLK).

    3)PCM接口

    它通I2S接口类似,也是由四根线构成:一根位时钟线(BCLK),一根帧同步线(SYNC),两根分别用于音频数据接收和发送的Rx和Tx线。

  • 相关阅读:
    一笔画问题(搜索)
    Sum
    js获取时间日期
    [Hibernate 的left join]Path expected for join!错误
    关于firefox下js中动态组装select时指定option的selected属性的失效
    mooltools扩展之前已经定义好的方法和json数据
    HttpSession, ActionContext, ServletActionContext 区别
    japidcontroller自动绑定的数据类型
    ConcurrentModificationException
    Hibernate中使用COUNT DISTINCT
  • 原文地址:https://www.cnblogs.com/gary-guo/p/6009830.html
Copyright © 2011-2022 走看看