参考: 1. 奇小葩 https://blog.csdn.net/u012489236/article/details/98068122 2. 技术芯 https://blog.csdn.net/sinat_37817094/article/details/80490830 3. 哈迪斯_石头 https://blog.csdn.net/zqh6516336520/article/details/38226333 4. linux kernel:4.4
Alsa是Advanced Linux Sound Architecture的缩写,即高级Linux声音架构,在Linux操作系统上提供了对音频和MIDI的支持。在Linux 2.6的内核版本后,Alsa目前已经成为了linux的主流音频体系结构。除了 alsa-driver,ALSA 包含在用户空间的 alsa-lib 函数库,具有更加友好的编程接口,并且完全兼容于 OSS,开发者可以通过这些高级 API 使用驱动,不必直接与内核驱动 API 进行交互。
ALSA 主要有如下特点:
支持多种声卡设备、
模块化的内核驱动程序 、
支持 SMP(对称多处理)和多线程、
提供应用开发函数库
兼容OSS应用程序
User空间:主要由Alsa Libray API对应用程序提供统一的API接口,各个APP应用程序只要调用 alsa-lib 提供的 API接口来实现放音、录音、控制。现在提供了两套基本的库,tinyalsa是一个简化的alsa-lib库,现在Android的系统中主要使用它。
ALSA CORE:alsa 核心层,向上提供逻辑设备(PCM/CTL/MIDI/TIMER/…)系统调用,向下驱动硬件设备(Machine/I2S/DMA/CODEC)
ASOC Core:是 ALSA 的标准框架,是 ALSA-driver 的核心部分,提供了各种音频设备驱动的通用方法和数据结构,为 Audio driver提供 ALSA Driver API
Hardware Driver:音频硬件设备驱动,由三大部分组成,分别是 Machine、Platform、Codec,提供的 ALSA Driver API 和相应音频设备的初始化及工作流程,实现具体的功能组件,这也是驱动开发人员需要具体实现的部分。
. ├── ac97_bus.c ├── aoa ├── arm ├── atmel ├── core ├── drivers ├── firewire ├── hda ├── i2c ├── isa ├── last.c ├── mips ├── oss ├── parisc ├── pci ├── pcmcia ├── ppc ├── sh ├── soc ├── sound_core.c ├── sound_firmware.c ├── sparc ├── spi ├── synth └── usb
ac97_bus.c -->实现AC97标准总线。
AC97 标准把音频设备中的数字部分和模拟部分分开, 并规定数字信号处理由CPU 来负责,或者采用专门的DSP 芯片; 而模拟部分, 即A/D、D/A 转换与Mix 混音操作, 则由CODEC 芯片(Coder2Decoder: 编码/解码器) 完成。 音频处理的流程如下:
①CODEC 采样音频数据, 把模拟信号转换成数字信号通过AC2link 和AC 控制单元传送给CPU 或DSP 处理。
②CPU 对数字信号处理后交由AC 控制单元通过AC2link 传输给CODEC 进行混音处理,再转换成模拟信号输出。其中AC 控制单元是AC97 CODEC 的控制器。AC2link 是AC97 标准定义的全双工的串行接口, 负责传输音频数据、寄存器控制命令和状态信息。
AC2link 由4 根串行总线和一个nRESET 信号线组成。串行总线分别是: 位时钟信号线(B IT_CL K ) , 帧同步信号线(SYNC ) , 数据输出(SDA TA _OU T ) 和数据输入(SDA TA _IN ) 信号线。它按照AC97 rev211 标准规定的AC2link数字串口接口协议[ 1 ]进行数据的传输。AC2link在B IT _CL K 的上升沿发送数据, 在下降沿接收数据, 实现全双工的数据传输。
last.c -->所有音频设备注册完成后打印ALSA devices List
下面是一个log示例:
[ 1.814400] ALSA device list: [ 1.814432] #0: rockchip,rt5640-codec [ 1.814440] #1: RK-FPGA-I2S
sound_core.c -->注册音频核心层子系统
subsys_initcall(init_soundcore); module_exit(cleanup_soundcore);
sound_firmware.c --> 加载音频驱动固件
EXPORT_SYMBOL(mod_firmware_load);
下面是目录及其说明
个人博客:https://www.letcos.top/ |
联系客服