zoukankan      html  css  js  c++  java
  • ALSA声卡笔记3--ASoC驱动重要结构体关系图

    1、ASoC中重要的数据结构之间的关联方式

    (1)Kernel-2.6.35-ASoC中各个结构的静态关系

           ASoC把声卡实现为一个Platform Device,然后利用Platform_device结构中的dev字段:dev.drvdata,它实际上指向一个snd_soc_device结构

           可以认为snd_soc_device是整个ASoC数据结构的根本,由他开始,引出一系列的数据结构用于表述音频的各种特性和功能。snd_soc_device结构引出了snd_soc_card和soc_codec_device两个结构

         然后snd_soc_card又引出snd_soc_platform、snd_soc_dai_link和snd_soc_codec结构。如上所述,ASoC被划分为Machine、Platform和Codec三大部分,如果从这些数据结构看来,snd_codec_device和snd_soc_card代表着Machine驱动snd_soc_platform则代表着Platform驱动snd_soc_codec和soc_codec_device则代表了Codec驱动,而snd_soc_dai_link则负责连接Platform和Codec


    (2)3.0版内核对ASoC的改进

         3.0中的数据结构更为合理和清晰,取消了snd_soc_device结构,直接用snd_soc_card取代了它,并且强化了snd_soc_pcm_runtime的作用,同时还增加了另外两个数据结构snd_soc_codec_driver和snd_soc_platform_driver,用于明确代表Codec驱动和Platform驱动。


    2、(如何写alsa声卡驱动)

    (1)构造snd_card结构体,snd_card_create()构造snd_card结构体并自动创建控制接口。调用函数snd_ctrl_create

    (2)初始化;如snd_pcm_new(),创建逻辑设备(播放设备或录音设备)

    (3)注册 snd_card_register

    3、关联分析

          之前说要写一个alsa声卡驱动程序,要构造、初始化、注册snd_card结构体。在内核里,针对嵌入式设备抽象出了ASoC,就不需要手工构造、初始化、注册snd_card结构体,虽然不用手工执行相关的函数,在ASoC里的Machine,Platform和Codec部分应该有函数帮我们执行构造、初始化、注册snd_card结构体的操作。


    4、归纳

    ASoC中重要的数据结构图可知snd_card结构体是snd_soc_card结构体的成员

    在Soc-core.c的snd_soc_instantiate_card函数中有它们之间的关系



    构造snd_card结构体


    初始化结构体


    snd_card结构体的driver成员是

    注册结构体





    转自:http://blog.csdn.net/qingkongyeyue/article/details/52355171


  • 相关阅读:
    mybatis 源码分析(四)一二级缓存分析
    mybatis 源码分析(三)Executor 详解
    mybatis 源码分析(二)mapper 初始化
    mybatis 源码分析(一)框架结构概览
    Disruptor 详解 二
    Disruptor 详解 一
    JDK源码分析(12)之 ConcurrentHashMap 详解
    并发系列(7)之 ScheduledThreadPoolExecutor 详解
    数据结构系列(6)之 完全二叉堆
    并发系列(6)之 ThreadPoolExecutor 详解
  • 原文地址:https://www.cnblogs.com/alan666/p/8311871.html
Copyright © 2011-2022 走看看