Linux ALSA及ASOC驱动框架分析

Linux ALSA及ASOC驱动框架分析

一,ALSA及ASOC驱动层次结构如下图:

这里写图片描述

alsa-lib封装了对以下声卡设备节点的访问,为用户空间应用程序开发提供了音频接口;

/dev/snd/pcmC0D0p
/dev/snd/pcmC0D0c
... ...
  • 1
  • 2
  • 3

比较重要的接口有:

alsa-soc在alsa-driver基础之上针对soc的进一步封装;

alsa-driver是整个驱动的核心,包括软件架构和硬件操作;

二,alsa驱动编码流程,如下图: 
这里写图片描述

涉及的主要内核源码文件为:

sound/core/init.c 
sound/core/device.c 
sound/core/sound.c
  • 1
  • 2
  • 3

其中sound.c为alsa声卡驱动的核心模块,其中维护了声卡设备节点创建,及声卡逻辑设备的注册;

流程概述:

1,调用snd_card_create创建声卡结构体实例:struct snd_card;
2,然后进行相关硬件初始化:数字音频接口初始化,DMA控制器初始化,编解码器初始化;
3,创建逻辑设备,内核alsa驱动针对特定的设备类型,提供了一些封装封装好的接口,比如snd_pcm_new创建pcm类型的struct snd_device;
4,然后设置逻辑设备的相关操作函数,比如:pcm类型的设备,需要设置struct snd_pcm_ops 实例对象;
5,最后将初始化好的struct snd_card 注册进入alsa核心,为声卡上的每一个逻辑设备创建设备节点; 
  • 1
  • 2
  • 3
  • 4
  • 5

三,ASOC驱动框架: 
ASOC是针对soc对ALSA的进一步封装,ASOC本质上是用ALSA驱动核心提供的接口开发的一款普通的网卡驱动;只不过在ASOC中把硬件操作部分划分为三个部分:machine,soc(包含cpu dai及platform),codec 
ASOC的驱动核心文件为:

sound/soc/sound-core.c
  • 1

ASOC驱动流程如下图: 
这里写图片描述

asoc在alsa基础之上的封装流程如上图左侧: 
开发asoc声卡驱动就是向asoc驱动核心的三个数据链表中注册相应的链表节点,最后通过machine中注册的dai_link数据结构将三部分联系在一起,共同完成硬件初始化部分,最后完成整个声卡的注册; 
从上图可以看出asoc的驱动核心实质是一个普通的alsa声卡驱动;

猜你喜欢

转载自blog.csdn.net/ll148305879/article/details/93161675