首页 > 其他 > 详细

ALSA架构简介

时间:2020-09-26 18:57:28      阅读:54      评论:0      收藏:0      [点我收藏+]

一、概述

ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构。

在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。如下图1.1所示:

技术分享图片

 

                                                                       图1.1 alsa软件体系结构

从图1.1可以看出,用户空间的alsa-lib对应用程序提供统一的API接口。在内核空间中,alsa-soc其实是对alsa-driver的进一步封装,它针对嵌入式设备提供了一系列增强的功能。本博客仅对嵌入式系统中的alsa-driver和alsa-soc进行讨论。

二.ALSA设备文件结构

在ubuntu系统中,看一下alsa设备的文件结构:

cd /dev/snd

ls -l

crw-rw----+ 1 root audio  controlC0
crw-rw----+ 1 root audio  midiC0D0
crw-rw----+ 1 root audio  pcmC0D0c
crw-rw----+ 1 root audio  pcmC0D0p
crw-rw----+ 1 root audio  pcmC0D1p
crw-rw----+ 1 root audio  seq
crw-rw----+ 1 root audio  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中,定义了以下设备类型:

#define    SNDRV_DEV_TOPLEVEL    ((__force snd_device_type_t) 0)
#define    SNDRV_DEV_CONTROL    ((__force snd_device_type_t) 1)
#define    SNDRV_DEV_LOWLEVEL_PRE    ((__force snd_device_type_t) 2)
#define    SNDRV_DEV_LOWLEVEL_NORMAL ((__force snd_device_type_t) 0x1000)
#define    SNDRV_DEV_PCM        ((__force snd_device_type_t) 0x1001)
#define    SNDRV_DEV_RAWMIDI    ((__force snd_device_type_t) 0x1002)
#define    SNDRV_DEV_TIMER        ((__force snd_device_type_t) 0x1003)
#define    SNDRV_DEV_SEQUENCER    ((__force snd_device_type_t) 0x1004)
#define    SNDRV_DEV_HWDEP        ((__force snd_device_type_t) 0x1005)
#define    SNDRV_DEV_INFO        ((__force snd_device_type_t) 0x1006)
#define    SNDRV_DEV_BUS        ((__force snd_device_type_t) 0x1007)
#define    SNDRV_DEV_CODEC        ((__force snd_device_type_t) 0x1008)
#define    SNDRV_DEV_JACK      ((__force snd_device_type_t) 0x1009)
#define    SNDRV_DEV_LOWLEVEL    ((__force snd_device_type_t) 0x2000)

通常,我们更关心pcm和control这两种设备。

三. 驱动代码的文件结构

技术分享图片

 

ALSA架构简介

原文:https://www.cnblogs.com/-glb/p/13722212.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!