ASOC系统简析

Linux 内核 ASoC 基本数据结构 Linux 内核 ASoC 框架建立了新的抽象,并通过一些中间层,将这些抽象接入 ALSA 音频框架。Linux 内核 ASoC 设备驱动的结构如下图:Linux 内核 ASoC 设备驱动程序在 Linux 内核中扮演多个角色。Linux 内核 ASoC 设备驱动程序在初始化阶段向内核注册某个总线类型的设备驱动程序,总线负责相应的设备发现。这里的总线不一定是真实的硬件总线,如 PCI 等,也可能是虚拟的,如 platform 等。总线在发现设备之后,会记录发现的设备,并尝试匹配注册的驱动程序。 阅读详情

一 嵌入式音频系统介绍

在这里插入图片描述

上图是音频系统的硬件模拟图,声卡通过I2S接口与cpu进行音频数据传输,通过I2C接口与cpu进行控制通讯。
录音数据通路:麦克风---->声卡------I2S------>DMA---->内存;
播放数据通路:内存------->DMA-----I2S------>声卡----->扬声器;

注意:
可以推测 cpu部分的代码包括DMA控制器部分 和 I2S控制器接口 两个部分的代码;
声卡部分的代码包括声卡寄存器控制(I2C)和 I2S接口数据传输 两个部分的代码;

根据上图 信息,可以很容易的理解在嵌入式设备的音频系统(ASoC)所抽象出来的三部分:

Machine 理解为板载硬件如开发板
Platform 理解为 CPU
Codec 声卡

在这里插入图片描述

在ASoC软件中 cpu部分称作platform,声卡部分被称作codec,两者通过machine进行匹配连接;machine可以理解为对开发板的抽象。

二 ASOC 驱动

ASoC(Alsa System on Chip),称为移动设备中的ALSA。是建立在标准ALSA驱动层上,将声卡和cpu两部分的控制代码分离开来,更好地支持嵌入式处理器和移动设备中的音频Codec的一套软件体系。ASoC不能单独存在,他只是建立在标准ALSA驱动上的一个它必须和标准的ALSA驱动框架相结合才能工作。
 
对应于硬件,软件驱动上也分Machine驱动、Platform驱动、Codec驱动三大部分,其中Platform驱动用于驱动Soc端的音频相关模块,Codec驱动用于驱动音频编解码器,Machine驱动负责Platform驱动和Codec驱动之间的耦合以及部分和设备或板子特定的代码。

Platform驱动:

只与特定的Soc有关,实现Soc的音频DMA驱动和Soc端的dai接口驱动,注册的所有platform驱动都会挂载在全局platform_list链表上。注册的Soc端的cpu_dai接口驱动挂载在全局dai_list上。只要指定了SoC,就会有一个对应的Platform,它只与SoC相关,与Machine无关,这样我们就可以把Platform抽象出来,使得同一款SoC不用做任何的改动,就可以用在不同的Machine中。

单独的Platform和Codec驱动是不能工作的,它必须由Machine驱动把它们结合在一起才能完成整个设备的音频处理工作。Platform驱动向ASoC注册snd_soc_platform和snd_soc_dai设备

Codec驱动:

只与Codec编解码器驱动有关,与Soc和Machine无关。所有注册的Codec驱动都会挂载在全局codec_list链表上,注册的Codec端的dai接口驱动挂载在全局dai_list上。Codec和Platform一样,要实现为可重用的部件,同一个Codec可以被不同的Machine使用。嵌入式Codec驱动通常通过I2C对编解码芯片进行控制。

Machine驱动:

驱动主要是针对设备的,实现Codec和Platform耦合,Machine驱动是实现板级上的Codec 和SoC中间的桥梁。描述两者如何连接。一般的板卡设计者只需要实现这部分的驱动。Machine驱动的开发主要工作是向内核注册一个snd_soc_card声卡实体。

具体工作将Platform驱动和Codec驱动关联在一起,通过snd_soc_dai_link中的名字指定使用哪个Platform驱动,使用哪个Soc端的dai接口,使用哪个Codec驱动,使用Codec上的哪个dai接口。同时也做一些特定于单板的操作。只要是与Soc和Codec驱动无关的操作,都应该放在Machine驱动中。Machine驱动中注册的and_codec_card放在全局card_list链表上。ASoC的一切都从Machine驱动开始,包括声卡的注册,绑定Platform和Codec驱动等等。

注意:

涉及的三个驱动中涉及的全局链表

soc-core.c中

struct list_head card_list;     /*Machine驱动注册的snd_codec_card放在这个链表上*/
struct list_head dai_list;         /*soundsocsamsungI2s.c中使用snd_soc_register_dai注册的cpu_dai会放在这上面,codec中注册的codec端的dai也会挂在这上面*/
struct list_head platform_list; /*注册的Soc的platform驱动在这个链表上*/
struct list_head codec_list;     /*音频编解码芯片驱动注册的codec挂载在这个链表上*/

snd_soc_card代表着Machine驱动
snd_soc_platform则代表着Platform驱动
snd_soc_codec则代表了Codec驱动
而snd_soc_dai_link则负责连接Platform和Codec。

snd_soc_dai是snd_soc_platform和snd_soc_codec的数字音频接口。
snd_soc_codec的dai是codec_dai
snd_soc_platform的dai为cpu_dai,
snd_pcm是snd_soc_card实例化后注册的声卡类型.

注意 snd_soc_dai_link结构就指明了该Machine所使用的Platform和Codec。在Codec这边通过codec_dai和Platform侧的cpu_dai相互通信,既然相互通信,就需要遵守一定的规则,其中codec_dai和cpu_dai统一抽象为struct snd_soc_dai结构,而将dai的相关操作使用snd_soc_dai_driver抽象。同时也需要对所有的codec设备进行抽象封装,linux使用snd_soc_codec进行所有codec设备的抽象,而将codec的驱动抽象为snd_soc_codec_driver结构。

ASoC驱动框架简介 简介 ASoC框架是一种linux系统声卡驱动框架,是针对嵌入式设备在linux alsa声卡驱动框架基础上进行了一层封装,意在将声卡和cpu两部分的控制代码分离开来; 如上图是音频系统的硬件示意图,声卡通过I2S接口与cpu进行音频数据传输,通过I2C接口与cpu进行控制通讯(数据接口和控制接口也可以是其他); 录音数据通路:麦克风---->声卡–(I2S)->DMA---->内存; 播放数据通路:内存---->DMA–(I2S)->声卡---->扬声器; 如图所.. 阅读详情

相关推荐

audio设备--ASOC框架--PCM等接口分析

一、引言 本篇文章来介绍audio设备的相关基础知识 二、mic 和line in 我们的电脑声卡上,一般都会有Line in和Mic in两个接口,翻译成中文就是“线性输入”和“麦克风输入”,这两个都是输入端口,但是还是有区别的: 1、Line in端口:该端口主要用于连接电吉他、电子琴、合成器等外界设备的音频信号输出的录音,由于这些设备本身输出功率就比较大,因此需要连接到Line in端口录音...

文艺小少年的博客 4549

【Android Audio 入门 一】--- Audio ALSA Driver

【Audio System 01】--- Audio Driver一、 ALSA 音频体系介绍1. ASoC介绍(Machine 、Platform 和 Codec)2. AFE介绍(Audio Front-End 前端后端)3. snd_soc_dai_link (Platform 和 Codec 联系在一起的结构体) 一、 ALSA 音频体系介绍 ALSA 是 Advanced Linux ...

|~~~热爱生活、努力学习的小伙汁~~~| 9588

Linux 音频驱动(一) ASoC音频框架简介

转载原文:https://www.cnblogs.com/wanqieddy/archive/2011/09/21/2184257.html 目录1. ALSA简介2. ASoC音频驱动构成3. PCM数据流4. 数据结构简介5. ASoC音频驱动注册流程 1. ALSA简介 Native ALSA Application:tinyplay/tinycap/tinymix,这些用户程序直接调用 alsa 用户库接口来实现放音、录音、控制。 ALSA Library API:alsa 用户库接口,常见有

_Modest_的博客 6838

ALSA-ASOC音频驱动框架简述

ALSA-ASOC音频驱动框架简述 目录: 一:ALSA概述 1.1 ALSA概述 1.2 ALSA文件框架 1.3 从proc文件系统开始入手分析ALSA 二:ALSA子设备PCM概述 2.1 PCM概述 2.2 PCM代码分析 三:ALSA子设备control概述 四:Asoc框架概述 4.4 ASOC-ALSA 之Machine框架分析 4....

奶牛养殖场小马 6650

Linux音频子系统(3) - ALSA ASoC

了解ASoC 1.概述   ASoC是Alsa System on Chip的缩写,用于实现那些集成了声音控制器 的CPU,像移动设备中的arm/mips/atom等。它的设计目标如下: 解耦codec. codec的驱动不依赖具体的平台。 简单易用的I2S/PCM配置接口。让soc和codec的配置相匹配。 动态的电源管理DAPM。实现对用户空间透明的电源管理,各个widget按需供电,实...

weixin_41028621的博客 2509

Linux-ASoC驱动归纳总结:

Linux-ASoC驱动归纳总结:   (1)CODEC驱动:由内核源代码sound/soc/codecs/uda134x.c实现,功能如下: A: snd_soc_codec 结构体是对CODEC本身I/O控制以及动态音频电源管理(Dynamic Audio Power Management,DAPM)的描述。它描述I2C、SPI或AC’97如何读写CODEC寄存器并容纳DAPM链表,

sunruichen的专栏 1万+

linux音频子系统 - ASoc框架

为什么要设计ASoC引用linux Document中的解释: The overall project goal of the ALSA System on Chip (ASoC) layer is to provide better ALSA support for embedded system-on-chip processors and portable audio codecs.AS

多媒体开发者 1229

audio Asoc 驱动架构详解

说明:文章可能有点乱,是平时分析记录的,但是比较详细。 Hardware Driver:音频硬件设备驱动,由三大部分组成,分别是 Machine、Platform、Codec。 ASoC音频驱动由三部分构成:platform,codec,machine。 machine 是包含 platform 与 codec 这两者之间通过i2s 连接控制, platform (cpu_dai) <----->codec_dai Platform:Platform驱动程序包括音频DM...

qq_48709036的博客 4076

Linux: ASoC 声卡硬件参数的设置过程简析

Linux,ASoC,声卡硬件参数

JiMoKuangXiangQu的专栏 863

Android14音频子系统-Linux音频子系统ASoC-ALSA

1、linux ALSA ASoc架构: https://blog.youkuaiyun.com/weixin_45437140/article/details/1286375212、alsa框架介绍:https://blog.51cto.com/u_93011/8854396 原文(付费):https://blog.youkuaiyun.com/RadianceBlau/article/details/79432661。

STCNXPARM的博客 1525

【SOUND】Linux音频子系统ASoC的驱动框架总分析

ALSA系统在芯片(ASoC)层的总体项目目标是为嵌入式芯片处理器(例如PXA2XX,AU1X00,IMX等)和便携式音频编解码器提供更好的ALSA支持。 在进入ASoC子系统之前,内核对SoC音频有一些支持,但是它有一些局限性:ASoC层旨在解决这些问题并提供以下内容特征 :为了实现这一切,ASoC基本上将嵌入式音频系统分为多个可重复使用的组件驱动程序:另外,这里提下OSS(Open Sound System)这个基本被弃用的音频框架。 可以参考Linux OSS架构声卡驱动框架 2.3 ASoC重要

wang 恒 的博客 1781

ALSA ASoc架构的发展由来

换句话来理解,在早期 Linux ASoC 框架出现之前,每个 SoC 都得单独写一份针对该平台的 Codec 驱动,比如:wm8731-s3c.c(Samsung S3C 平台)、wm8731-omap.c(TI OMAP 平台)、wm8731-pxa.c(Intel PXA 平台)、wm8731-imx.c(NXP i.MX 平台);当上层应用(如 ALSA PCM)确定音频硬件参数(采样率、位宽、通道数)时,ASoC 核心会自动匹配并配置对应的 Codec 与 SoC 接口。

Dada_ping的博客 1203

实用工具系列 - Xshell安装下载与使用

一、介绍 二、下载 三、安装 四、使用

Passerby_Wang的博客 1万+

Linux ALSA 之六:ALSA ASoc 架构

ALSA ASoc

年少生而为人 2375

记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL

【代码】记录——影刀RPA高级操作题(二)——使用影刀RPA内置包和”Xpath“获取数据,获取数据写入目标MySQL。

m0_74824002的博客 842

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装

【GNSS/Linux】BKG Ntrip Client (BNC) 的编译与安装 1. BNC软件 1.1 软件介绍 The BKG Ntrip Client (BNC) is an Open Source multi-stream client program designed for a variety of real-time GNSS applications. It was primarily designed for receiving data streams from any Ntrip

小马甲的新马甲 7803

Linux ALSA声卡驱动之七:ASoC架构中的Codec

1.  Codec简介 在移动设备中,Codec的作用可以归结为4种,分别是: 对PCM等信号进行D/A转换,把数字的音频信号转换为模拟信号对Mic、Linein或者其他输入源的模拟信号进行A/D转换,把模拟的声音信号转变CPU能够处理的数字信号对音频通路进行控制,比如播放音乐,收听调频收音机,又或者接听电话时,音频信号在codec内的流通路线是不一样的对音频信号做出相应的处理,例如音

DroidPhone的专栏 7万+

(王道408考研操作系统)第三章内存管理-第一节1:内存基础知识、程序编译运行原理

注意:本节内容和《计算机组成原理》“存储器”那一部分内容相关性很强,组成原理是从硬件角度,操作系统是从软件角度。因此如果没有学习过这部分的同学,强烈建议先看这一部分 王道计算机组成原理笔记 本文主要会涉及以下必要的内存知识 文章目录一:内存及其作用 一:内存及其作用 内存:内存又称之为主存。是一种硬件设备,作为CPU和硬盘的缓冲区,用于解决其速度不匹配的问题,提高整机性能。程序执行前需要放入内存才能运行 ...

快乐江湖的博客 2791

音频2-ALSA/ASOC音频驱动框架

本章讲解了ALSA框架和ASOC框架的大致流程,为什么ASOC框架需要出现,并从ASOC框架的三个部分 platform machine codec进行比较详细的描述

慢加的博客 2686

OpenCV-Python实战(10)——详解 OpenCV 轮廓检测

在计算机视觉领域,轮廓通常指图像中对象边界的一系列点。因此,轮廓通常描述了对象边界的关键信息,包含了有关对象形状的主要信息,该信息可用于形状分析与对象检测和识别。在本文中,将首次通过简单示例了解轮廓的基本概念,然后通过实际示例来了解如何检测和压缩轮廓,最后利用介绍如何利用图像矩描述检测到的轮廓属性。

盼小辉丶的博客 3万+

开源模型应用落地-qwen模型小试-入门篇(二)

在windows环境下,使用transformer设置模型参数/System Prompt/历史对话

以微薄之力,予他人些许温暖. 3234

ASOC 音频子系统框架

基于: Mini2440 开发板, Linux 3.4.2 内核 ASOC 简介: ASoC - ALSA System on Chip,是建立在标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中音频 Codec 的一套软件体系。 就像软件领域里的抽象和重用一样,嵌入式设备的音频系统可以被划分为 Machine、Platform、 Codec。 所以,我们可以把 ASOC 的...

aiduan6474的博客 321

【WorkBuddy专栏27】WorkBuddy 和 CodeBuddy 到底什么关系——一篇文章终结所有混淆

WorkBuddy 和 CodeBuddy 到底什么关系——一篇文章终结所有混淆

AI人人懂 2607

Linux:ASoC 声卡驱动框架简介

Linux,ASoC

JiMoKuangXiangQu的专栏 1407

【图像去噪】论文复现:CLIP用于图像去噪提升泛化性!CLIPDenoising的Pytorch源码复现,跑通CLIPDenoising全流程,图文结合,网络结构梳理和拆解,对应源码注释!

论文题目:Transfer CLIP for Generalizable Image Denoising —— 用于可泛化图像去噪的转移CLIP。【图像去噪】论文精读:Transfer CLIP for Generalizable Image Denoising(CLIPDenoising)CLIPDenoising理论部分详解见上面对应的论文精读,本文以源码为主,理论部分只是粗略回顾。启发:多看其他领域的文章,分析是否能应用在去噪领域,这是产生idea的要素之一;

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1412

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

手撕ALSA和ASOC有感。

手撕ALSA和ASOC有感。 文中图片引用自https://me.youkuaiyun.com/DroidPhone博主的文章。 ALSA ALSA其实就是一个字符设备驱动。万变不离其宗,和其他设备驱动套路一样。 1、首先搞个类:class_create 在sound_core.c中 sound_class = class_create(THIS_MODULE, "sound"); 2、然后搞个f...

多核异构SOC和显示 1677

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

上一篇: ALSA系统简析
下一篇: 嵌入式终端的以太网系统简析
Ma浩然
博客等级 码龄9年 1万+粉丝 462原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Ma浩然

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值