Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介

news/2025/1/1 21:58:47/

ALSA声卡驱动:

           1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介

            2.Linux ALSA声卡驱动之二:Platform

            3. Linux ALSA声卡驱动之三:Platform之Cpu_dai

            4. Linux ALSA声卡驱动之四:Codec 以及Codec_dai

            5.Linux ALSA声卡驱动之五:Machine 以及ALSA声卡的注册

            6.Linux ALSA声卡驱动之六:PCM的注册流程

            7.Linux ALSA声卡驱动之七:录音(Capture) 调用流程

 

 

 

 

一.  ALSA 简介

       

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体系的中间层代码

 

1.2 ALSA驱动代码文件结构  

 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文件夹里面的代码

 

 

1.3 ALSA设备文件结构

    1.3.1    /dev/snd        ls -l

    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 --〉                       定时器

 

      1.3.2   /sys/devices/platform/soc-audio        ls -l

         

       drwxr-xr-x 3 root root 0 2020-03-09 06:40 DEEP_BUFFER_DL_OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 DL1AWBCAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_I2S_RX_Capturedrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_I2S_RX_Playbackdrwxr-xr-x 3 root root 0 2020-03-09 06:40 FM_MRG_TXdrwxr-xr-x 3 root root 0 2020-03-09 06:40 HDMI_OUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 HP_IMPEDANCEdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0DL1OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0OUTPUTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 I2S0_AWB_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MRGRXdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MRGRXCAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia1drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia2drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia3drwxr-xr-x 3 root root 0 2020-03-09 06:40 MultiMedia_DL2drwxr-xr-x 3 root root 0 2020-03-09 06:40 PLATOFRM_CONTROLdrwxr-xr-x 3 root root 0 2020-03-09 06:40 TDM_Debug_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 ULDLOOPBACKdrwxr-xr-x 3 root root 0 2020-03-09 06:40 VOIP_CALL_BT_CAPTUREdrwxr-xr-x 3 root root 0 2020-03-09 06:40 VOIP_CALL_BT_PLAYBACKdrwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD1drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD1_BTdrwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD2drwxr-xr-x 3 root root 0 2020-03-09 06:40 Voice_MD2_BTlrwxrwxrwx 1 root root 0 2020-03-09 08:27 driver -> ../../../bus/platform/drivers/soc-audiodrwxr-xr-x 2 root root 0 2020-03-09 06:40 powerdrwxr-xr-x 3 root root 0 2020-03-09 06:40 soundlrwxrwxrwx 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 数组中定义。

 

 

  •     1.3.3   /proc/asound/card0    查看声卡0下面挂载的设备

    

 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
  •   1.3.3.1查看具体pcm设备的信息

   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
  • 1.3.4   /proc/asound/

         

 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首字母。

二.  ASOC 简介

        

       ASoC把音频系统同样分为3大部分:Machine,Platform和Codec

        Platform  一般是指某一个SoC平台,比如MT6582, MT6595, MT6752等等,与音频相关的通常包含该SoC中的ClockFAEI2SDMA等等,该模块负责DMA的控制和I2S的控制, 由CPU厂商负责编写此部分代码。

Codec  字面上的意思就是编解码器, Codec 里面包含了 I2S 接口、 DAC ADC Mixer PA (功放),通常包含多种输入( Mic Line-in I2S PCM )和多个输出(耳机、喇叭、听筒, Line-out ), Codec Platform一样,是可重用的部件。该模块负责AFIx的控制和DAC部分的控制(也可以说是芯片自身的功能的控制), 由Codec厂商负责编写此部分代码
Machine 是指某一款机器,可以是某款设备,某款开发板,又或者是某款智能手机,由此可以看出Machine几乎是不可重用的,每个Machine上的硬件实现可能都不一样,CPU不一样,Codec不一样,音频的输入、输出设备也不一样,Machine为CPU、Codec、输入输出设备提供了一个载体 用于描述一块电路板, 它指明此块电路板上用的是哪个Platform和哪个Codec, 由电路板商负责编写此部分代码。 绑定 platform driver codec driver
   以下是machine  codec  platform 它们之间的关系图

 

   以上三部分还可以细分:

  •    platform:platform+cpu_dai     
  •   codec:codec+codec+codec_dai

 


http://www.ppmy.cn/news/908906.html

相关文章

Linux ALSA 之七:ALSA ASoc DPCM

ALSA ASoc DPCM 一、DPCM 简介二、DPCM Machine Driver三、Writing a DPCM DSP Driver 一、DPCM 简介 二、DPCM Machine Driver 三、Writing a DPCM DSP Driver 针对 DPCM 的 FE & BE DAI 如下所示: DPCM 描述参考链接如下: ALSA driver—DPCM …

MAC:屏蔽独立显卡的声卡模块,使用ALC883集成声卡

安装好独立显卡ASUS ATI HD5670以后,发现之前正常发声的集成声卡ALC883(VoodooHDA.kext V0.2.61版本)无法出声音了。 用System Info工具查看有2个Audio Controller被识别了. 解决方法是修改VoodooHDA.kext的Info.plist,屏蔽独立显…

P5198 [USACO19JAN] Icy Perimeter S

[USACO19JAN] Icy Perimeter S 题目背景 USACO一月月赛银组第二题 题目描述 Farmer John要开始他的冰激凌生意了!他制造了一台可以生产冰激凌球的机器,然而不幸的是形状不太规则,所以他现在希望优化一下这台机器,使其产出的冰…

❤ Git 遇到 The file will have its original line endings in your working directory

❤ The file will have its original line endings in your working directory 执行 git add * 出现警告信息:The file will have its original line endings in your working directory 原因是路径中存在 / 的符号转义问题,false就是不转换符号默认是…

三星note9运行linux,三星Note9:SPen可远程控制手机

原标题:三星Note9:SPen可远程控制手机 作为“安卓机皇”的存在,三星Note9虽然还未发布,但却备受关注。虽然说在外观上面,三星Note9并没有取得太大的突破,但是SPen似乎有了质的飞跃。 这次SPen注定成为三星N…

android note分析,三星Note9七大亮点解析

三星Note9七大亮点解析 2018-08-10 14:18:56 0点赞 0收藏 0评论 作为大屏手机的先行者,三星Note系列无疑是成功的,至少大屏、S Pen以及便捷的商务功能等都给消费者留下了深刻的印象。虽然Note系列经历了Note7时代的惨痛教训,但三星显然不想放…

android 5.0 note4,三星Note4用户手册更新:安卓5.0有何新变

IT之家讯 1月15日消息,部分三星Galaxy S5用户已经收到了Android 5.0更新,想必很多三星Galaxy Note 4用户也在寻思自己的设备会在何时更新这个新版系统,毕竟这两款手机都是三星去年的旗舰设备。 从现有信息来看,三星Galaxy Note 4会…

三星note升级android9,三星Note9官方台版安卓9固件rom升级更新包:BRI-N960FXXS3CSI5

咱们的这个三星Galaxy Note9手机的相关固件包也是来分享一下了,这个固件包也就是原版的系统包了,非常的实用,这个固件包版本是BRI-N960FXXS3CSI5,也是多件套形式的rom包了,下载下来解压出来,采用odin工具进…