Linux音频驱动-ALSA概述

转载 2018年04月17日 09:45:11

转载地址:https://blog.csdn.net/longwang155069/article/details/53260731

概述

ALSA(Advanced Linux Sound Architecture)是linux上主流的音频结构,在没有出现ALSA架构之前,一直使用的是OSS(Open Sound System)音频架构。关于OSS的退出以及ALSA的出现,可以看 Linux音频驱动-OSS和ALSA声音系统简介及其比较

关于OSS和ALSA音频架构之间的区别图如下:

主要的区别就是在OSS架构下,App访问底层是直接通过Sound设备节点访问的。而在ALSA音频架构下,App是通过ALSA提供的alsa-lib库访问底层硬件的操作,不再访问Sound设备节点了。这样做的好处可以简化App实现的难度。

同样ALSA为了兼容OSS,ALSA提供了内核模块来模拟OSS声音驱动,所以在OSS架构下编写的App无需修改就可以在ALSA下运行。另外libaoos库也可以模拟OSS,无需OSS相关的内核模块。

音频子系统文件目录结构

音频系统的文件位于kernel/sound下:
  1. root@test:~/k3.18/kernel/sound$ ls  
  2. ac97_bus.c  atmel    firewire  Kconfig   mips    pci     sh            sound_firmware.c  synth  
  3. aoa         core     i2c       last.c    oss     pcmcia  soc           sparc             usb  
  4. arm         drivers  isa       Makefile  parisc  ppc     sound_core.c  spi  
主要的目录的介绍信息如下:

ALSA接口信息

proc接口

关于音频的proc接口,位于/proc/asound目录下:(以我的pc机为例,ubuntu12.04)
  1. root@test:/proc/asound$ ls -l  
  2. 总用量 0  
  3. dr-xr-xr-x 5 root root 0 11月 22 13:41 card0  
  4. -r--r--r-- 1 root root 0 11月 22 13:41 cards  
  5. -r--r--r-- 1 root root 0 11月 22 13:41 devices  
  6. -r--r--r-- 1 root root 0 11月 22 13:41 hwdep  
  7. -r--r--r-- 1 root root 0 11月 22 13:41 modules  
  8. dr-xr-xr-x 2 root root 0 11月 22 13:41 oss  
  9. lrwxrwxrwx 1 root root 5 11月 22 13:41 PCH -> card0  
  10. -r--r--r-- 1 root root 0 11月 22 13:41 pcm  
  11. dr-xr-xr-x 2 root root 0 11月 22 13:41 seq  
  12. -r--r--r-- 1 root root 0 11月 22 13:41 timers  
  13. -r--r--r-- 1 root root 0 11月 22 13:41 version  
如下是我手机的中的详细信息,会个pc机上的有差别。
  1. test:/proc/asound # ls -l  
  2. total 0  
  3. dr-xr-xr-x 21 root root 0 2012-01-02 03:19 card0  
  4. -r--r--r--  1 root root 0 2012-01-02 03:19 cards  
  5. -r--r--r--  1 root root 0 2012-01-02 03:19 devices  
  6. -r--r--r--  1 root root 0 2012-01-02 03:19 pcm  
  7. lrwxrwxrwx  1 root root 5 2012-01-02 03:19 xxx -> card0  
  8. -r--r--r--  1 root root 0 2012-01-02 03:19 timers  
  9. -r--r--r--  1 root root 0 2012-01-02 03:19 version  
相比的话,差不了多少,只是手机上没有一些功能而已。接下来详细介绍每个目录的大体含义。

card0:    其中0代表的是声卡号,每个声卡系统都存在这样的目录。
cards:    列出系统中可用的,注册的声卡。
  1. root@test:/proc/asound$ cat cards   
  2.  0 [PCH            ]: HDA-Intel - HDA Intel PCH  
  3.                       HDA Intel PCH at 0xf7d00000 irq 45  
devices:  列出系统card下所有注册的device,包括control,pcm,timer,seq等等。
  1. root@test:/proc/asound$ cat devices   
  2.   1:        : sequencer  
  3.   2: [ 0- 2]: digital audio capture  
  4.   3: [ 0- 0]: digital audio playback  
  5.   4: [ 0- 0]: digital audio capture  
  6.   5: [ 0- 0]: hardware dependent  
  7.   6: [ 0]   : control  
  8.  33:        : timer  
hwdep:     列出所有硬件依赖(hardward dependent)的设备。此设备不是所有系统上都存在的。
modoles:  列出所有ALSA声卡驱动模块列表。
oss:          此目录下包含了ALSA用来模拟OSS的模拟仿真模块。
pcm:         列去出系统的cpm设备,包括capture和playback。
  1. root@test:/proc/asound$ cat pcm   
  2. 00-00: ALC662 rev1 Analog : ALC662 rev1 Analog : playback 1 : capture 1  
  3. 00-02: ALC662 rev1 Analog : ALC662 rev1 Analog : capture 1  
seq:        此目录保护一些音序相关的信息。
timers:    描述一些ALSA相关的定时器信息。
version:  描述ALSA版本信息。
  1. root@test:/proc/asound$ cat version   
  2. Advanced Linux Sound Architecture Driver Version 1.0.25.  

devices字段详细解释,会在后面更了解各个字段的含义。

有关proc的详细信息可以见:http://alsa.opensrc.org/Proc_asound_documentation#The_.2Fproc.2Fasound.2Foss.2F_directory

dev接口信息

关于sound的dev节点信息,位于/dev/snd下。
  1. root@test:/dev/snd$ ls -l  
  2. 总用量 0  
  3. drwxr-xr-x  2 root root       60 11月 16 10:47 by-path  
  4. crw-rw---T+ 1 root audio 116,  6 11月 16 10:47 controlC0  
  5. crw-rw---T+ 1 root audio 116,  5 11月 16 10:47 hwC0D0  
  6. crw-rw---T+ 1 root audio 116,  4 11月 16 11:00 pcmC0D0c  
  7. crw-rw---T+ 1 root audio 116,  3 11月 22 14:45 pcmC0D0p  
  8. crw-rw---T+ 1 root audio 116,  2 11月 16 10:47 pcmC0D2c  
  9. crw-rw---T+ 1 root audio 116,  1 11月 16 10:47 seq  
  10. crw-rw---T+ 1 root audio 116, 33 11月 16 10:47 timer  
上述是sound下的常见的设备文件。首先看看各个字段的含义:

介绍写各个设备文件的功能:
control:            用于声卡的控制。
pcmC0D0c:     用于录音的pcm设备。
pcmC0D0p:     用于播音的pcm设备。
seq:                 音序器接口。
timer:              定时器接口。

linux内核定义了如下的设备类型:
  1. enum {  
  2.     SNDRV_DEVICE_TYPE_CONTROL,  
  3.     SNDRV_DEVICE_TYPE_SEQUENCER,  
  4.     SNDRV_DEVICE_TYPE_TIMER,  
  5.     SNDRV_DEVICE_TYPE_HWDEP,  
  6.     SNDRV_DEVICE_TYPE_RAWMIDI,  
  7.     SNDRV_DEVICE_TYPE_PCM_PLAYBACK,  
  8.     SNDRV_DEVICE_TYPE_PCM_CAPTURE,  
  9.     SNDRV_DEVICE_TYPE_COMPRESS,  
  10. };  
通常更关心control和pcm设备。

代码入口分析

ALSA的proc接口信息的代码实现在kernel/sound/core/sound.c中。

大概的逻辑图如下:

下一步就需要分析是谁调用snd_register_device_for_dev函数来注册sound设备的。
 
以上只是列出了pcm和control设备的流程,并没有关心timer, seq等设备的流程。其实大致流程一致。
因为pcm,control,timer,seq等这些设备都在所谓的card下管理着。所以下面几节就从card,control,pcm三个方面入手

Linux ALSA声卡驱动之一:ALSA架构简介 分析 精辟

原文见链接Linux ALSA声卡驱动之一:ALSA架构简介 分析 精辟
  • zmbbb
  • zmbbb
  • 2017-04-24 16:48:26
  • 724

Linux ALSA声卡驱动原理分析- 设备打开过程和数据流程

  • 2011年08月22日 21:03
  • 648KB
  • 下载

linux音频alsa驱动分析之三 解码器

ASoC Codec Driver ASoC解码器驱动 ================= The codec driver is generic and hardware independ...
  • lininglive
  • lininglive
  • 2016-08-08 11:31:03
  • 1361

ALSA下音频驱动架构

ALSA下音频架构 ALSA是什么
  • shichaog
  • shichaog
  • 2014-10-22 17:20:59
  • 2191

Linux ALSA声卡驱动之一:ALSA系统架构

Linux ALSA 系统架构 ALSA 是Linux声卡驱动的架构,下面基于linux-2.6.32描述下ALSA系统架构。ALSA系统可以分为alsa-lib、alsa- driver,而als...
  • sanmaoljh
  • sanmaoljh
  • 2016-04-12 16:46:20
  • 901

linux音频alsa驱动分析之二 时钟

Audio Clocking 音频时钟 ============== This text describes the audio clocking terms in ASoC and dig...
  • lininglive
  • lininglive
  • 2016-08-08 11:09:10
  • 673

Linux ALSA 声卡驱动之二:声卡的创建

声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢! 1. struct snd_card   1.1. snd_card是什么 snd_car...
  • u011006622
  • u011006622
  • 2016-01-26 18:00:58
  • 426

ALSA声卡09_从零编写之参数设置_学习笔记

1、参数设置分析 (1)open: soc_pcm_open 依次调用cpu_dai, dma, codec_dai, machine的open或startup函数 只在dma的open函...
  • qingkongyeyue
  • qingkongyeyue
  • 2017-01-20 20:15:09
  • 598

alsa声卡驱动移植

1 配置内核支持UDA1341:  /* 下面是需要配置的宏,后面函数的编译取决这些宏 */ CONFIG_SND_S3C24XX_I2S   // s3c24xx-i2s.c CONFIG_S...
  • qq_21792169
  • qq_21792169
  • 2016-04-06 13:50:49
  • 3770

Linux ASoC音频驱动架构 及 Machine驱动代码分析

【软件框架】     在对要做的事情一无所知的时候,从全局看看系统的拓扑图对我们认识新事物有很大的帮助。Audio 部分的驱动程序框架如下图所示:     这幅图明显地分为 3 级。     上方蓝...
  • Qidi_Huang
  • Qidi_Huang
  • 2016-07-18 00:33:11
  • 2364
收藏助手
不良信息举报
您举报文章:Linux音频驱动-ALSA概述
举报原因:
原因补充:

(最多只允许输入30个字)