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
相关文章
- 报名 | 美团技术沙龙:基于领域驱动设计(DDD)的架构演进和实践
- 驱动开发:内核枚举Minifilter微过滤驱动
- 驱动开发:恢复SSDT内核钩子
- 驱动开发:内核R3与R0内存映射拷贝
- Spring setDriverClassName方法:设置数据源的驱动类
- MongoDB驱动:极致的简洁体验(mongodb驱动)
- 英伟达推出460.79 WHQL驱动为赛博朋克2077和我的世界提供优化
- 网卡Linux驱动:让您轻松获取网络连接(网卡linux驱动)
- 驱动Linux下ODBC数据库连接驱动的使用(linux的odbc)
- NVIDIA发布GeForce 471.68驱动:《永劫无间》4K性能猛增60%
- SQL Server驱动神奇的数据管理之路(sqlserver驱动器)
- Linux驱动笔记:掌握Linux驱动开发,让你的设备运行更加高效稳定。(linux驱动笔记)
- Linux下驱动显卡:一步步安装指南(linux装显卡驱动)
- Linux中调用驱动函数的实现方法(linux 调用驱动函数)
- Linux I2C驱动:极速连接智能设备(linuxi2c驱动)
- Oracle 驱动表又是什么(oracle什么叫驱动表)