Linux Alsa声卡驱动(1):简介

引言:

        往日工作中对于声卡驱动的调试也仅仅局限于编译供应商提供的codec及配置dts,并没有去深入了解声卡驱动,目前打算去好好研究一下,为了以后能更好的处理关于声卡驱动方面的问题。经过网上查阅资料发现好多文章都是基于早前的内核版本,API以及结构已经变动了好多。目前我工作主要是基于RK的芯片做项目,内核版本为4.19.111,就基于该版本内核做一下详细分析。

        该专栏将记录我的声卡驱动学习经历,由于工作原因更新时间可能不确定,内容可能也会有些许出入,但后续会慢慢完善。

一:概述

        ALSA(The Advanced Linux Sound Architecture高级Linux声卡框架)为Linux操作系统提供音频和MIDI(Musical Instrument Digital Interface乐器数字接口)功能。ALSA具有以下显著特点:

  • 高效支持所有类型的音频接口,从消费声卡到专业的多声道音频接口。
  • 完全模块化的声音驱动器。
  • SMP(Symmetrical Multi-Processing多处理)和线程安全设计。
  • 用户控件库(alsa-lib)用于简化应用程序变成并提供更高级别的功能。
  • 支持旧的开放声音系统(OSS)API,为大多数OSS程序提供二进制兼容性。

二:结构

驱动结构:

ALSA在内核驱动层提供了alsa-driver,alsa-soc是对其的进一步封装,在用户层则提供了alsa-lib,应用程序直接调用其API即可对底层音频硬件做到相应控制。

     Linux Alsa声卡驱动(1):简介_第1张图片

 文件树结构:

ALSA驱动程序的文件结构如下所示。

kernel/sound         //声卡驱动文件
    /core                  //该目录包含中间层,ALSA驱动程序的核心,存储了原生ALSA模块,子目录包含不同的模块。
        /oss                //PCM和混音器OSS仿真模块。rawmidi OSS仿真包含在ALSA rawmidi 中。
        /seq                //音序器核心和主音序器模块。
            /oss            //OSS定序器仿真代码,如snd-seq-midi等,仅 CONFIG_SND_SEQUENCER在内核配置中设置时编译。
    /include              //ALSA驱动程序的公共头文件
    /drivers               //包含在不同架构的不同驱动程序之间的共享代码。在子目录中,有独立于总线和CPU架构的组件代码
        /mpu401         
        /opl3 
        /opl4
    /i2c                      //ALSA 独有的i2c框架,Linux标准i2c对于ALSA过于庞大
    /synth
        /emux              //合成器中级模块
    /pci                      //该目录及其子目录包含PCI声卡和PCI BUS代码
        /(cards)
    /isa                      //该目录及其子目录包含ISA声卡代码
        /(cards)
    /usb                     //USB音频驱动程序
    /pcmcia/(cards)
    /soc                     //ASoC(ALSA 片上系统)层的代码,包括 ASoC 内核、编解码器和机器驱动程序。
        /codecs

你可能感兴趣的:(Linux,Alsa声卡驱动,linux,驱动开发)