https://www.jianshu.com/p/0f5fe8f51b66

简介

LINUX下音频驱动开发,要遵循标准的ALSA架构,
下面分别从硬件架构、软件架构、驱动程序,3个方面分析。

硬件架构

硬件上音频总线接口有很多,如I2S、PCM、TDM、SLIMBUS等,以I2S为例分析:

I2S接口.png

  • 播放流程
  1. 使用I2C对CODEC做初始化配置。
  2. 音频数据从外部flash读取到内存中。
  3. 数据经过DMA送到I2S的TXFIFO。
  4. 数据由TXFIFO送到CODEC硬件。
  5. 在CODEC硬件里,数据从数字信号转变成模拟信号。
  6. 模拟信号经过喇叭播放出来,就实现了声音的播放。
  • 录音流程
    与播放流程相反,在第5步,从模拟信号变成数字信号,其他都一样

软件架构-ALSA

安卓的整体音频架构

ALSA.png

从上到下分别是:

  1. APP-HAL,安卓中的音频框架,用于适配LINUX内核。
  2. ALSA-lib,LINUX内核音频驱动框架。
  3. machine-codec驱动,硬件音频驱动程序。

驱动程序

按照ALSA驱动框架要实现的接口有:

driver.png

各个部分功能分别是:

  1. DTS,音频硬件参数配置。
  2. CPU DAI,CPU上的音频接口驱动,如I2S,PCM,SLIMBUS等。
  3. platform,基于CPU的DMA接口封装,用于实现音频数据在内存和DMA之间流动。
  4. CODEC DAI,CODEC上的音频接口驱动。
  5. CODEC,CODEC自身驱动。
  6. I2C,实现CODEC的配置接口。
  7. machine,设备层面组装所有驱动,实现音频通路。

LINUX音频驱动架构相关推荐

  1. linux 音频架构绕过,linux音频驱动架构

    1.linux音频驱动架构分为3部分组成:硬件无关层(核心层ALSA).板级音频数字接口层驱动(McASP.McBSP等).外部codes驱动 sound/soc/davinci/ti81xx-etv ...

  2. Java核心编程总结(二、抽象类与接口),linux音频驱动架构

    抽象类不能创建对象,如果创建,编译无法通过而报错 理解:假设创建了抽象类的对象,调用抽象方法,抽象方法没有方法体,无法执行 抽象类一定有而且是必须有构造器,是提供给子类创建对象时,初始化父类成员使用的 ...

  3. STM32MP157驱动开发——Linux 音频驱动

    STM32MP157驱动开发--Linux 音频驱动 一.简介 1.CS42L51 简介 2.I2S总线 3.STM32MP1 SAI 总线接口 二.驱动开发 1.音频驱动 1)修改设备树 i2c 接 ...

  4. 转载:Linux音频驱动-OSS和ALSA声音系统简介及其比较

    Linux音频驱动-OSS和ALSA声音系统简介及其比较 概述 昨天想在Ubuntu上用一下HTK工具包来绘制语音信号的频谱图和提取MFCC的结果,但由于前段时间把Ubuntu升级到13.04,系统的 ...

  5. Linux 音频驱动

    Linux 音频驱动 硬件介绍 WM8960与IMX6ULL之间有两个通信接口:I2C和I2S 其中I2C用于配置WM8960 I2S用于音频数据传输 修改设备树文件 编写I2C子节点设备树 code ...

  6. Linux网络驱动架构

    转载来自:https://blog.csdn.net/zhoudengqing/article/details/47406821 转 Linux网络驱动架构 2015年08月10日 22:54:39 ...

  7. Linux 音频驱动(四) ASoC音频驱动之Machine驱动

    目录 1. 基本介绍 2. 源码分析 2.1. Machine数据结构 struct snd_soc_dai_link 3. 声卡 3.1. 数据结构struct snd_soc_card 3.2. ...

  8. Linux 音频驱动(五) ALSA音频驱动之PCM逻辑设备

    目录 1. 前言 2. PCM逻辑设备 2.1. 创建 PCM逻辑设备: 2.2. PCM逻辑设备文件操作函数集:snd_pcm_f_ops[] 2.3. Open PCM逻辑设备 2.4. Writ ...

  9. Linux音频驱动之二:Control接口的调用

    本文是基于mini2440开发板Linux版本号是linux-2.6.32.2的学习笔记 一. control接口说明 Control接口主要让用户空间的应用程序(alsa-lib)可以访问和控制音频 ...

最新文章

  1. buffers和cache的区别
  2. 启停系统错误_关掉自动启停系统,就可以用普通蓄电池代替启停蓄电池吗?
  3. python中文读音ndarray-Python中Numpy ndarray的使用详解
  4. 一个简单的Spring的AOP例子(JAVA面向切面编程)
  5. 《算法竞赛进阶指南》打卡-基本算法-AcWing 90. 64位整数乘法:位运算
  6. 【CV】大神没交棒,但YOLOv5来了!
  7. 利用三层交换机实现VLAN间路由配置
  8. Uva 201 Squares (暴力 + 枚举)
  9. 安装oracle不动了,windows2008安装ORACLE到2%不动的问题 | 信春哥,系统稳,闭眼上线不回滚!...
  10. python办公室妙用-python eval()函数的妙用和滥用
  11. position:fixed 失效
  12. HDU-1863-畅通工程
  13. 【5月8 】NVIDIA 迁移学习工具包(TLT)最佳实践
  14. Linux 网络配置 修改DNS配置文件/etc/resolv.conf后,重启网络,DNS配置丢失
  15. 微信小程序的点击、双击、长按事件
  16. cors js解决js跨域问题
  17. ZYNQ飞控系统设计-PX的MAalefile解读
  18. codewars练习(javascript)-2021/2/17
  19. 2022·创新峰会回顾 | 擎创科技荣获CCID双料优秀成果奖
  20. 股票接口数据获取方式

热门文章

  1. ZBrush:生物角色无脑重拓扑神器ZWrap
  2. 计算机是否将取代纸质书籍,平板电脑代替纸质教科书 利弊各几分?
  3. 程序员的核心竞争力是什么?为什么?
  4. Xshell的舒服配色方案,否则蓝色看不清
  5. HTTP 422 状态码
  6. Error: Can't place multiple pins assigned to pin location……解决办法
  7. 极简Python:用opencv实现人脸检测,并用本地摄像头实现视频流的人脸识别
  8. java录制声音(采集声卡音频数据)
  9. 2021年YCC发展路线图
  10. 多张图片合并一张图片,在中间添加文字