1. ALSA驱动框架简介
- ALSA: Advanced Linux Sound Architecture
- DAI: Digital Audio Interface
1.1 概述
ALSA的全称是Advanced Linux Sound Architecture,顾名思义,ALSA主要是给Linux提供了一个声音架构,让软件开发者用ALSA框架提供在user space的接口实现控制五花八门的音频硬件;简单点说ALSA框架把整个音频硬件的控制和逻辑处理分成了好几个模块,并实现解耦。
要了解ALSA驱动框架,需要先理清楚音频播放的过程是怎样的,毕竟驱动的本质就是为了控制硬件。假设有一个Linux随身听,芯片内置了dsp。比如播放一首MP3,软件会先进行软解码,解码成pcm数据,解码出来的pcm数据会通过alsa框架的用户空间接口写入到kernel中(把主控芯片DMA Buffer中的pcm数据通过DAI接口用pcm协议传输到dsp芯片进一步处理)。写入到kernel的pcm数据会先被dsp芯片进行一些效果处理,比如一些EQ、ALC、NR处理等。处理过后的数据会通过dsp芯片的DAI接口通过I2S协议传输给codec芯片。codec芯片把获取的pcm数据通过数模转换成模拟信号输出。输出的模拟信号经过PA放大再输出给喇叭,然后我们就能听到自己播放的音乐了。示意图如下: