• 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


  • 相关阅读:
    (三)认识twisted reactor
    (二)inlineCallbacks,同步方式写异步代码
    (一)使用twisted Deferred
    javascript通过字典思想操作数据
    锱铢必较,从(function(){}())与(function(){})()说起
    针对谷歌默认最小字体12px的正确解决方案 (css、html)
    百度搜索研发部:同义词反馈机制
    LinkedList与ArrayList的区别
    从源码的角度分析List与Set的区别
    springboot整合redisson分布式锁
  • 原文地址:https://www.cnblogs.com/alan666/p/8311871.html
Copyright © 2020-2023  润新知