ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。
在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。
用户空间的alsa-lib对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。内核空间中,alsa-soc其实是对alsa-driver的进一步封装,他针对嵌入式设备提供了一些列增强的功能
Kernel-4.4/sound/core该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分。
Kernel-4.4/sound/soc 针对system-on-chip体系的中间层代码
sound
/aoa 苹果主板驱动
/arm arm架构相关驱动
/atmel atmel设备驱动
/core 该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分
/drivers 不同架构中一些驱动共享文件放置一些与CPU、BUS架构无关的公用代码
/i2c ALSA自己的I2C控制代码
/isa isa声卡的上层模块
/mips MIPS声卡设备驱动
/oos oos架构
/parisc gsc声卡驱动
/pci pci声卡
/ppc powerPC架构有关
/sh SUPERH声卡驱动
/soc system-on-chip
/sparc Sparc声卡驱动
/synth synth中间层
/usb usb-audio驱动
从上面驱动代码结构中我们可以知道,我们主要关心core和soc文件夹里面的代码
crw-rw---- 1 system audio 14, 12 2020-03-09 06:40 adsp
crw-rw---- 1 system audio 14, 4 2020-03-09 06:40 audio
crw-rw---- 1 system audio 116, 2 2020-03-09 06:40 controlC0
crw-rw---- 1 system audio 14, 3 2020-03-09 06:40 dsp
crw-rw---- 1 system audio 14, 0 2020-03-09 06:40 mixer
crw-rw---- 1 system audio 116, 3 2020-03-09 06:40 pcmC0D0p
crw-rw---- 1 system audio 116, 19 2020-03-09 06:40 pcmC0D10c
crw-rw---- 1 system audio 116, 20 2020-03-09 06:40 pcmC0D11p
crw-rw---- 1 system audio 116, 21 2020-03-09 06:40 pcmC0D12p
crw-rw---- 1 system audio 116, 22 2020-03-09 06:40 pcmC0D13c
crw-rw---- 1 system audio 116, 23 2020-03-09 06:40 pcmC0D14c
crw-rw---- 1 system audio 116, 24 2020-03-09 06:40 pcmC0D15p
crw-rw---- 1 system audio 116, 25 2020-03-09 06:40 pcmC0D16c
crw-rw---- 1 system audio 116, 26 2020-03-09 06:40 pcmC0D17c
crw-rw---- 1 system audio 116, 28 2020-03-09 06:40 pcmC0D18c
crw-rw---- 1 system audio 116, 27 2020-03-09 06:40 pcmC0D18p
crw-rw---- 1 system audio 116, 29 2020-03-09 06:40 pcmC0D19p
crw-rw---- 1 system audio 116, 4 2020-03-09 06:40 pcmC0D1c
crw-rw---- 1 system audio 116, 30 2020-03-09 06:40 pcmC0D20p
crw-rw---- 1 system audio 116, 31 2020-03-09 06:40 pcmC0D21p
crw-rw---- 1 system audio 116, 35 2020-03-09 06:40 pcmC0D22c
crw-rw---- 1 system audio 116, 34 2020-03-09 06:40 pcmC0D22p
crw-rw---- 1 system audio 116, 37 2020-03-09 06:40 pcmC0D23c
crw-rw---- 1 system audio 116, 36 2020-03-09 06:40 pcmC0D23p
crw-rw---- 1 system audio 116, 38 2020-03-09 06:40 pcmC0D24p
crw-rw---- 1 system audio 116, 6 2020-03-09 06:40 pcmC0D2c
crw-rw---- 1 system audio 116, 5 2020-03-09 06:40 pcmC0D2p
crw-rw---- 1 system audio 116, 8 2020-03-09 06:40 pcmC0D3c
crw-rw---- 1 system audio 116, 7 2020-03-09 06:40 pcmC0D3p
crw-rw---- 1 system audio 116, 10 2020-03-09 06:40 pcmC0D4c
crw-rw---- 1 system audio 116, 9 2020-03-09 06:40 pcmC0D4p
crw-rw---- 1 system audio 116, 12 2020-03-09 06:40 pcmC0D5c
crw-rw---- 1 system audio 116, 11 2020-03-09 06:40 pcmC0D5p
crw-rw---- 1 system audio 116, 14 2020-03-09 06:40 pcmC0D6c
crw-rw---- 1 system audio 116, 13 2020-03-09 06:40 pcmC0D6p
crw-rw---- 1 system audio 116, 16 2020-03-09 06:40 pcmC0D7c
crw-rw---- 1 system audio 116, 15 2020-03-09 06:40 pcmC0D7p
crw-rw---- 1 system audio 116, 17 2020-03-09 06:40 pcmC0D8p
crw-rw---- 1 system audio 116, 18 2020-03-09 06:40 pcmC0D9p
crw-rw---- 1 system audio 116, 1 2020-03-09 06:40 seq
crw-rw---- 1 system audio 14, 1 2020-03-09 06:40 sequencer
crw-rw---- 1 system audio 14, 8 2020-03-09 06:40 sequencer2
crw-rw---- 1 system audio 116, 33 2020-03-09 06:40 timer
controlC0 --> 用于声卡的控制,例如通道选择,混音,麦克风的控制等
midiC0D0 --> 用于播放midi音频
pcmC0D10c --〉 用于录音的pcm设备:pcm:pcm设备 ,C0:声卡号0,一般设备就一个声卡 D10 设备号是10 c:capture 录音 如果是p:play 播放 。
pcmC0D11p --〉 用于播放的pcm设备
seq --〉 音序器
timer --〉 定时器
drwxr-xr-x 3 root root 0 2020-03-09 06:40 DEEP_BUFFER_DL_OUTPUT
drwxr-xr-x 3 root root 0 2020-03-09 06:40 DL1AWBCAPTURE
drwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_I2S_RX_Capture
drwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_I2S_RX_Playback
drwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_MRG_TX
drwxr-xr-x 3 root root 0 2020-03-09 06:40 HDMI_OUT
drwxr-xr-x 3 root root 0 2020-03-09 06:40 HP_IMPEDANCE
drwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0DL1OUTPUT
drwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0OUTPUT
drwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0_AWB_CAPTURE
drwxr-xr-x 3 root root 0 2020-03-09 06:40 MRGRX
drwxr-xr-x 3 root root 0 2020-03-09 06:40 MRGRXCAPTURE
drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia1
drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia2
drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia3
drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia_DL2
drwxr-xr-x 3 root root 0 2020-03-09 06:40 PLATOFRM_CONTROL
drwxr-xr-x 3 root root 0 2020-03-09 06:40 TDM_Debug_CAPTURE
drwxr-xr-x 3 root root 0 2020-03-09 06:40 ULDLOOPBACK
drwxr-xr-x 3 root root 0 2020-03-09 06:40 VOIP_CALL_BT_CAPTURE
drwxr-xr-x 3 root root 0 2020-03-09 06:40 VOIP_CALL_BT_PLAYBACK
drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD1
drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD1_BT
drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD2
drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD2_BT
lrwxrwxrwx 1 root root 0 2020-03-09 08:27 driver -> ../../../bus/platform/drivers/soc-audio
drwxr-xr-x 2 root root 0 2020-03-09 06:40 power
drwxr-xr-x 3 root root 0 2020-03-09 06:40 sound
lrwxrwxrwx 1 root root 0 2020-03-09 08:27 subsystem -> ../../../bus/platform
DEEP_BUFFER_DL_OUTPUT 设备名称,对于mtk平台来说是在mtk-soc-machine.c mt_soc_dai_common 数组中定义。
id pcm10c pcm13c pcm16c pcm18p pcm20p pcm22p pcm24p pcm3c pcm4p pcm6c pcm7p
oss_mixer pcm11p pcm14c pcm17c pcm19p pcm21p pcm23c pcm2c pcm3p pcm5c pcm6p pcm8p
pcm0p pcm12p pcm15p pcm18c pcm1c pcm22c pcm23p pcm2p pcm4c pcm5p pcm7c pcm9p
cd pcm10c
ls
info sub0 xrun_debug
cat info
card: 0
device: 10
subdevice: 0
stream: CAPTURE
id: DL1_AWB_Record mt-soc-codec-dl1awb-dai-10
name:
subname: subdevice #0
class: 0
subclass: 0
subdevices_count: 1
subdevices_avail: 1
MultiMedia1_PLayback mt-soc-codec-tx-dai-0 : : playback 1
-- MultiMedia1_PLayback:对应mt_soc_dai_common 里面的stream_name
-- mt-soc-codec-tx-dai:对应mt_soc_dai_common 里面的codec_dai_name
-- -0 :对应mt_soc_dai_common 数组的顺序
--playback:此pcm是playback类型(播放)
--capture:此pcm是capture类型(录音)
--1 :snd_card下面顺序挂载的第几个pcm设备 ,tinycap -D 0 -d 1 -D 0 表示:声卡0 ,-d 1 表示录音的pcm设备是1号,d是device首字母。
Platform 一般是指某一个SoC平台,比如MT6582, MT6595, MT6752等等,与音频相关的通常包含该SoC中的Clock、FAE、I2S、DMA等等,该模块负责DMA的控制和I2S的控制, 由CPU厂商负责编写此部分代码。
以上三部分还可以细分: