一 概述

安卓内核采用的是Linux内核,所以安卓也沿用了Linux内核内置的音频子系统。
Linux内核的音频子系统全称是Advanced Linux Sound Architecture,简称ALSA
ALSA官网为https://www.alsa-project.org/wiki/Main_Page,在官网上有一些编程手册以及API介绍,也可以直接到Linux内核源码的 Documentation/sound 目录下去查阅编程信息

ALSA的版本是随同Linux内核版本一起发布,可以在https://www.kernel.org/获取到最新的Linux内核和ALSA的源码。

二 ALSA在安卓架构中的位置

在安卓系统中,hal层往上的结构图可以在官网找到

关于HAL到Linux Kernel,谷歌的图简略了一些
对于Linux Kernel来说,HAL就是应用层,从应用层访问ALSA,详细的结构应该是如下图所示

在这张结构图中,HAL和Kernel之间还隔了一个Tiny Alsa,这是一个谷歌写的开源的库,用来替换Linux系统中的ALSA库,通过这个库,HAL可以利用几个简单的API来写入音频数据。

三 ALSA代码结构简介

在Linux内核中各种子系统都会有一个Core,由这个Core来拿主设备号,音频子系统也不例外,Alsa Core会注册Alsa主设备,设备号是116。

为了适应移动平台,有了ASOC(ALSA System on Chip),在这个架构下,音频驱动程序可以分为三种,分别是

  • Machine :用于描述一台设备的驱动,将Platform和Codec联系起来,在这个驱动里面注册声卡
  • Platform:音频平台驱动,描述了CPU上的信息
  • Codec:codec驱动,描述了各种外接的编解码器的信息

举例:
一款名为S5PV4418的处理器芯片,芯片上有个I2S接口,这个I2S接口的驱动程序就是Platform驱动,因为这个驱动可以适用在所有搭载了这颗CPU的板子上

一款名为ES8316的功放芯片,负责控制这颗芯片进行工作的驱动,就是Codec驱动,Codec驱动可以适用在所有使用ES8316作为codec的板子上

最后是Machine驱动,Machine驱动描述了Platform和Codec之间的连接信息,每一块板子,就会有自己的Machine驱动。

ALSA这么设计是为了解决之前ALSA中代码CPU和Codec代码过于耦合, 提高代码的复用性,减少重复工作。

四 代码位置

Alsa : kernel/sound/
TinyAlsa: 安卓源码/external/tinyalsa

五 设备节点与调试节点

Linux的用户层与内核驱动交互,基本都是通过设备的文件节点来的。
对于声卡,用户层通过以下的节点来交互。

/dev/snd/

  • control:控制节点,可以通过这个节点来控制声卡内部的通路
  • pcmC0D0c :capture的设备节点,其中C0表示声卡0,D表示该声卡上的0号设备,c表示Capture
  • pcmC0D0p :playback的设备节点,p表示playback

除了这里的设备节点,还有调试节点:

/proc/asound/

  • card0:声卡0,如果声卡注册失败,就不会有这个节点,可以进入这个节点,查看声卡上有哪些设备
  • cards:cat这个节点可以知道当前系统所有注册的声卡
  • pcm:获取当前设备的pcm信息

除了这个proc下的节点,如果在编译内核时enable了DEBUG_FS,还会有下面这个节点

/d/asoc/

  • codecs:cat这个节点可以查看当前注册的codec
  • dais:这个节点可以查看当前注册的dai
  • platforms:这个节点可以查看当前注册的platform
  • 还有一个声卡节点,会根据声卡名字变化,我这里是nanopi2-audio

安卓声卡驱动:1.ALSA简介相关推荐

  1. linux声卡驱动框架-ALSA简介

    ALSA(即Advanced Linux Sound Architecture), 是目前Linux的主流音频体系结构, 提供了音频和MIDI的支持, 其架构图如下所示 在内核设备驱动层,ALSA提供 ...

  2. 安卓声卡驱动:2.Machine驱动与声卡

    一 声卡简介 一个音频系统由硬件和驱动这些硬件的软件组成. 在一台设备上,如果硬件完整,且驱动硬件的软件全部初始化成功后,ALSA系统就会注册一个声卡,通过这个声卡,应用程序可以控制硬件设备的链路联通 ...

  3. 安卓声卡驱动:3.platform驱动

    一 platform驱动简介 按我的理解platform驱动在ALSA里面起管理FE的作用. 什么是FE,FE即Front End,与FE相对应的另一个名词时叫BE,即Back End. 通常认为音频 ...

  4. 万能声卡驱动(Alsa)的安装方法

    最近安装rh8.0,声卡是inter主板自带的AC'97声卡,没有linux驱动,经过一番折腾,终于搞定了,现在把经验分享给大家,祝linux下没有声音的朋友开心.         运行sndconf ...

  5. Linux的声卡驱动中ALSA与OSS的区别和简单流程介

    在声卡的驱动中一种是OSS(开放声音系统),一种是ALSA(先进Linux声音架构).OSS是一个商业声卡驱动程序,需要花钱购买.一般我们现在使用的是ALSA的声音架构. Advanced Linux ...

  6. 安卓声卡驱动:5.dai驱动

    一 dai驱动简介 dai驱动用于驱动component上的音频接口,dai驱动通常不会单独存在,dai驱动会与component驱动一起注册. 在注册codec时,就要求提供dai驱动,而platf ...

  7. 安卓声卡驱动:4.codec驱动

    一 codec驱动简介 硬件上的Audio codec是一种能够对数字数据流进行编码或解码的设备. codec的功能非常多,常见的有 数模转换,解码时把数字信息解码成原本的模拟信号,编码时把模拟信号转 ...

  8. 声卡驱动模式分类及简介

    MME,ASIO,DirectSound和WDM MultiMedia Extensions多媒体扩展(MME):级别最低的驱动,于Windows 3.1时代首次推出.由于等待时间长,Cubase V ...

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

    ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...

最新文章

  1. 树莓派python编程案例-树莓派Python编程指南.pdf
  2. pdo 连接数据库 报错 could not find driver 解决方法
  3. BugkuCTF-MISC题可爱的故事
  4. 一线互联网公司Java高级面试题总结
  5. 在Windows编译libssh
  6. 实现栈的基本操作(c语言)
  7. 【Altium Designer】:关于原理图绘制的基本学习
  8. 软考网络工程师考试大纲(2018年最新版)
  9. jlink 与 swd 接口定义
  10. java发包工具_小米范工具系列之四:小米范HTTP批量发包器
  11. 软工网络15团队作业8——Beta阶段敏捷冲刺(Day4)
  12. 根据周次显示日期范围_刚刚!总投资34亿元!京东方投建12英寸OLED微显示器件生产线...
  13. 迅为stm32mp157开发板资料手册+实战教程+视频教程
  14. Laravel执行定时任务
  15. linux上tftp上传文件失败,Linux下tftp上传文件失败的几条原因
  16. 【例16 Java从键盘读入学生成绩,找出最高分,并输出学生成绩等级】
  17. 常用的前端在线引用JS
  18. DFS and BFS
  19. Unity流水账2:视频播放之Video Player
  20. python双斜杠是什么意思_Python中正反斜杠(‘/’和‘\’)的意义与用法

热门文章

  1. 埃睿迪高振宇:大数据助力化工企业绿色转型的四个价值点
  2. 笔记本电脑攻略丨笔记本电脑配置怎么看与笔记本电脑验机方法
  3. Java 定时任务配置文件
  4. 股权和期权有什么区别
  5. 小萌谈Art(4)——从零开始学RobotArt
  6. 点晴oa系统搭服务器,点晴OA系统安装后提示:操作对象无效错误101,您没有ASPEncodeDLL.AspCoding对象的操作权限或该对象不存在请联系服务器管理员...
  7. Python, zsbd
  8. 青龙面板之饿了么吃货豆
  9. java千万级数据txt文件导入数据库
  10. python猜年龄练习