在Android中音频系统使用的是ALSA系统架构。ASoC--ALSA System on Chip ,是建立在标准ALSA驱动层上,为了更好地支持

嵌入式处理器和移动设备中的音频Codec的一套软件体系,在音频设备驱动中ASoC被分为Machine、Platform和Codec三大部分。

Codec部分:负责音频解码,这部分代码完全无平台无关(设备原厂提供),它包含了一些音频的控件(Controls),音频接

口,DAMP(动态音频电源管理)的定义和Codec IO功能。为了保证硬件无关性,任何特定于平台的代码都要移

到Platform和Machine驱动中。

Platform部分:包含了平台的音频DMA和音频接口的配置和控制(I2S,PCM,AC97等);与处理器芯片相关的代码。

Machine部分:是耦合Platform和Codec驱动,同时与上层交互的代码。由于上层是标准的alsa架构,所以下层接口肯定要做了

统一,这部分由Machine本身的Platform驱动和Platform设备组成(请跟上面的Platform驱动区别开),Platform驱动

内核已经完成了,所以无须过多的关心怎么跟上层ALSA怎么衍接的问题,我们只需要注册一个Machine的Platform

设备以及完成Platform和Codec耦合。

1、ALSA设备文件结构

controlC0 用于声卡的控制,例如通道选择,混音,麦克风的控制等;

pcmC0D0c 用于录音的pcm设备;

pcmC0D0p 用于播放的pcm设备;

timer 定时器。

其中,C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是

alsa-driver中的命名规则。

2、ALSA文件目录结构概述

sound/core:该目录包含了中间层,ALSA的核心驱动。那些本地ALSA模块保持在这个目录里。一些子目录包含那些与内核配置

相关的不同的模块。

sound/core/oss :关于PCM和mixer的OSS模拟的模块保存在这个目录里面。

sound/core/seq :有关音序器相关的代码。

kernel /include/sound:ALSA驱动的公共头文件目录,该目录的头文件需要导出给用户空间的应用程序使用,通常驱动模块私

有的头文件不应放置在这里。

sound/drivers:该目录包含了在不同架构的系统中的不同驱动共享的文件部分。与CPU、BUS架构无关的公用代码。

sound/i2c:该目录包含了ALSA自己的I2C控制代码。虽然Linux有个i2c的标准协议层,ALSA还是拥有它关于一些card的专用

i2c代码,因为一些声卡仅仅需要一些简单的操作,而标准的i2c的API函数对此显得太过复杂了。

sound/pci:该目录文件负责PCI声卡和一些PCI BUS的上层card模块。在pci目录下面保存着一些简单的驱动文件,而一些比较

复杂的,同时包含多个程序文件的驱动会被放置在pci目录下面一个单独的子目录里面(如:emu10k1,ice1712)。

sound/isa 该目录文件是处理ISA声卡的上层card模块。

sound/arm,sound/ppc,和sound/sparc 这里目录放置一些和芯片架构相关的一些上层的card模块。

sound/usb 该目录包含一些USB-AUDIO驱动。

sound/pcmcia PCCard驱动会放到这里。CardBus驱动将会放到pci目录里面,因为API函数和标准PCI卡上统一的。

sound/soc 针对system-on-chip体系的中间层代码。

sound/soc/codecs 针对soc体系的各种codec的代码,与平台无关。

更多相关文章

  1. 没有一行代码,「2020 新冠肺炎记忆」这个项目却登上了 GitHub 中
  2. 19个实用的Android开发工具
  3. Android(安卓)Kotlin 学习总结(一) 《KAE 优缺点并且深入字节码
  4. 备份、恢复android软件设置
  5. Android(安卓)转:应用程序窗体显示状态操作(requestWindowFeature(
  6. Kotlin基础(一)android studio中配置Kotlin
  7. Android之MVC模式的使用
  8. 移动端跨平台开发方案比较
  9. android客户端和php服务简单交互

随机推荐

  1. Nacos注册中心 配置启动
  2. Rheem:可扩展且易于使用的跨平台大数据分
  3. 关于图片性能优化,你必须知道的
  4. Flink Table和SQL API:为统一批处理和流处
  5. 手把手教你实现vue下拉菜单组件
  6. 【电子书分享】Learning PySpark下载,包含
  7. 探索emoji字符串长度之谜
  8. Flume+Morphlines实现数据的实时ETL
  9. 一篇文章带你了解Android Usb摄像头
  10. 软测经典面试题(四)