Linux ALSA声卡驱动之一:ALSA架构概述

一、概述
1、硬件

由上可见,播放音频时,通常CPU通过总线传送给CODEC音频PCM数据,然后CODEC进行DA转换、放大、增益等一系列处理,最后传送给speaker,录音流程反之。
2、软件架构

用户空间的alsa库对应用程序提供统一的API接口,这样可以隐藏了驱动层的实现细节,简化了应用程序的实现难度。内核空间中,alsa soc其实是对alsa驱动的封装统一,为了兼容不同平台的驱动,同时风格更统一,下面会进一步讨论。
3、音频驱动架构

音频驱动里有三个很重要的部分,cpu_dai、codec_dai、platform,cpu即主控器以及i2s配置等(主控器包含i2s),codec即把模拟的音频信号,转化为数字信号,并且经过功放增益等处理,本方案为wm8960芯片,platform即为pcm音频格式的一系列处理,众所周知,音频数据处理不是简单地播放、录音,而是按照一定的格式,一定的规则有序的进行传输,platform里面的程序就是做这些处理。
二、结构
1、alsa设备文件结构
crw-rw----+ 1 root audio 116, 8 2011-02-23 21:38 controlC0
crw-rw----+ 1 root audio 116, 4 2011-02-23 21:38 midiC0D0
crw-rw----+ 1 root audio 116, 7 2011-02-23 21:39 pcmC0D0c
crw-rw----+ 1 root audio 116, 6 2011-02-23 21:56 pcmC0D0p
crw-rw----+ 1 root audio 116, 5 2011-02-23 21:38 pcmC0D1p
crw-rw----+ 1 root audio 116, 3 2011-02-23 21:38 seq
crw-rw----+ 1 root audio 116, 2 2011-02-23 21:38 timer

我们可以看到以下设备文件:
controlC0 -->                 用于声卡的控制,例如通道选择,混音,麦克风的控制等
midiC0D0  -->                用于播放midi音频
pcmC0D0c --〉               用于录音的pcm设备
pcmC0D0p --〉               用于播放的pcm设备
seq  --〉                        音序器
timer --〉                       定时器
其中,C0D0代表的是声卡0中的设备0,pcmC0D0c最后一个c代表capture,pcmC0D0p最后一个p代表playback,这些都是alsa-driver中的命名规则。从上面的列表可以看出,我的声卡下挂了6个设备,根据声卡的实际能力,驱动实际上可以挂上更多种类的设备,在include/sound/core.h中,定义了以下设备类型:
 通常,我们更关心的是pcm和control这两种设备。
2、目录结构
sound
            /core
                     /oss
                    /seq
            /ioctl32
            /include
            /drivers
            /i2c
            /synth
                    /emux
            /pci
                    /(cards)
            /isa
                    /(cards)
            /arm
            /ppc
            /sparc
            /usb
            /pcmcia /(cards)
            /oss
            /soc
                    /codecs

core               该目录包含了ALSA驱动的中间层,它是整个ALSA驱动的核心部分
core/oss        包含模拟旧的OSS架构的PCM和Mixer模块
core/seq        有关音序器相关的代码
include          ALSA驱动的公共头文件目录,该目录的头文件需要导出给用户空间的应用程序使用,通常,驱动模块私有的头文件不应放置在这里
 drivers           放置一些与CPU、BUS架构无关的公用代码
i2c                 ALSA自己的I2C控制代码
pci                 pci声卡的顶层目录,子目录包含各种pci声卡的代码
isa                 isa声卡的顶层目录,子目录包含各种isa声卡的代码
soc                针对system-on-chip体系的中间层代码
soc/codecs    针对soc体系的各种codec的代码,与平台无关

猜你喜欢

转载自blog.csdn.net/moonlinux20704/article/details/88353619