Linux Audio (1) ALSA架构

ALSA1:ALSA架构


参考文章

https://winddoing.github.io/post/50356.html
https://zhuanlan.zhihu.com/p/491104374

ALSA总体框图

请添加图片描述

ASoC 被分为 Machine、Platform 和 Codec 三大部分。

其中的 Machine 驱动负责 Platform 和 Codec 之间的耦合和设备或板子特定的代码。Platform 驱动的主要作用是完成音频数据的管理,最终通过 CPU 的数字音频接口(DAI)把音频数据传送给 Codec 进行处理,最终由 Codec 输出驱动耳机或者是喇叭的音信信号。

platform驱动:
platform驱动为cpu部分的控制代码,其抽象出两个结构体snd_soc_dai_driver和snd_soc_platform_driver;

platform用于实现平台相关的 DMA 驱动和音频接口等。
它只关心 CPU 本身,不关心 Codec。主要处理两个问题:DMA引擎SoC集成的PCM、I2S或AC '97数字接口控制。主要作用是完成音频数据的管理,最终通过 CPU 的数字音频接口(DAI)把音频数据传送给 Codec 进行处理,最终由 Codec 输出驱动耳机或者是喇叭的音信信号。在具体实现上,ASoC 有把 Platform 驱动分为两个部分:snd_soc_platform_driver 和 snd_soc_dai_driver。

其中,platform_driver 负责管理音频数据,把音频数据通过 dma 或其他操作传送至 cpu dai 中,dai_driver 则主要完成 cpu 一侧的 dai 的参数配置,同时也会通过一定的途径把必要的 dma 等参数与 snd_soc_platform_driver 进行交互。

codec驱动:
codec驱动是编解码器部分的控制代码,其抽象出两个结构体分别为snd_soc_dai_driver和snd_soc_codec_driver;

用于实现平台无关的功能,如寄存器读写接口,音频接口,各 widgets 的控制接口和 DAPM 的实现等。

codec的作用可以归纳为以下4种:

  1. DAC
  2. ADC
  3. 音频通路控制
  4. 音频信号处理:音量控制,功率放大,EQ控制等;

machine驱动:
用于描述设备组件信息和特定的控制如耳机 / 外放等。machine是指某一款机器,可以是某款设备,某款开发板,又或者是某款智能手机,由此可以看出 Machine 几乎是不可重用的,每个 Machine 上的硬件实现可能都不一样,CPU 不一样,Codec 不一样,音频的输入、输出设备也不一样,Machine 为 CPU、Codec、输入输出设备提供了一个载体。

这一部分将平台驱动和 Codec 驱动绑定在一起,描述了板级的硬件特征。主要负责 Platform 和 Codec 之间的耦合以及部分和设备或板子特定的代码。Machine 驱动负责处理机器特有的一些控件和音频事件(例如,当播放音频时,需要先行打开一个放大器);单独的 Platform 和 Codec 驱动是不能工作的,它必须由 Machine 驱动把它们结合在一起才能完成整个设备的音频处理工作。ASoC 的一切都从 Machine 驱动开始,包括声卡的注册,绑定 Platform 和 Codec 驱动等等

machine驱动是控制管理platform和codec之间的连接匹配,管理控件(controls)、部件(widgets)以及routes,其抽象的结构体为snd_soc_card。

https://zhuanlan.zhihu.com/p/491104374

ASoc结构图

请添加图片描述
ASoC 对于 Alsa 来说,就是分别注册 PCM/CONTROL 类型的 snd_device 设备,并实现相应的操作方法集。

  • Codec 驱动向 ASoC 注册 snd_soc_codec 和 snd_soc_dai 设备。
  • Platform 驱动向 ASoC 注册 snd_soc_platform 和 snd_soc_dai 设备。
  • Machine 驱动通过 snd_soc_dai_link 绑定 codec/dai/platform.

https://winddoing.github.io/post/50356.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值