Linux ALSA及ASOC驱动框架分析

3 篇文章 0 订阅
3 篇文章 0 订阅

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

这里写图片描述

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

/dev/snd/pcmC0D0p
/dev/snd/pcmC0D0c
... ...

比较重要的接口有:

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

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

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

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

sound/core/init.c 
sound/core/device.c 
sound/core/sound.c

其中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核心,为声卡上的每一个逻辑设备创建设备节点; 

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

sound/soc/sound-core.c

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

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

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值