安卓声卡驱动:1.ALSA简介
一 概述
安卓内核采用的是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简介相关推荐
- linux声卡驱动框架-ALSA简介
ALSA(即Advanced Linux Sound Architecture), 是目前Linux的主流音频体系结构, 提供了音频和MIDI的支持, 其架构图如下所示 在内核设备驱动层,ALSA提供 ...
- 安卓声卡驱动:2.Machine驱动与声卡
一 声卡简介 一个音频系统由硬件和驱动这些硬件的软件组成. 在一台设备上,如果硬件完整,且驱动硬件的软件全部初始化成功后,ALSA系统就会注册一个声卡,通过这个声卡,应用程序可以控制硬件设备的链路联通 ...
- 安卓声卡驱动:3.platform驱动
一 platform驱动简介 按我的理解platform驱动在ALSA里面起管理FE的作用. 什么是FE,FE即Front End,与FE相对应的另一个名词时叫BE,即Back End. 通常认为音频 ...
- 万能声卡驱动(Alsa)的安装方法
最近安装rh8.0,声卡是inter主板自带的AC'97声卡,没有linux驱动,经过一番折腾,终于搞定了,现在把经验分享给大家,祝linux下没有声音的朋友开心. 运行sndconf ...
- Linux的声卡驱动中ALSA与OSS的区别和简单流程介
在声卡的驱动中一种是OSS(开放声音系统),一种是ALSA(先进Linux声音架构).OSS是一个商业声卡驱动程序,需要花钱购买.一般我们现在使用的是ALSA的声音架构. Advanced Linux ...
- 安卓声卡驱动:5.dai驱动
一 dai驱动简介 dai驱动用于驱动component上的音频接口,dai驱动通常不会单独存在,dai驱动会与component驱动一起注册. 在注册codec时,就要求提供dai驱动,而platf ...
- 安卓声卡驱动:4.codec驱动
一 codec驱动简介 硬件上的Audio codec是一种能够对数字数据流进行编码或解码的设备. codec的功能非常多,常见的有 数模转换,解码时把数字信息解码成原本的模拟信号,编码时把模拟信号转 ...
- 声卡驱动模式分类及简介
MME,ASIO,DirectSound和WDM MultiMedia Extensions多媒体扩展(MME):级别最低的驱动,于Windows 3.1时代首次推出.由于等待时间长,Cubase V ...
- Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介
ALSA声卡驱动: 1.Linux ALSA声卡驱动之一:ALSA架构简介和ASOC架构简介 2.Linux ALSA声卡驱动之二:Platform 3. Linux ALSA声卡驱动之三:Platf ...
最新文章
- 树莓派python编程案例-树莓派Python编程指南.pdf
- pdo 连接数据库 报错 could not find driver 解决方法
- BugkuCTF-MISC题可爱的故事
- 一线互联网公司Java高级面试题总结
- 在Windows编译libssh
- 实现栈的基本操作(c语言)
- 【Altium Designer】:关于原理图绘制的基本学习
- 软考网络工程师考试大纲(2018年最新版)
- jlink 与 swd 接口定义
- java发包工具_小米范工具系列之四:小米范HTTP批量发包器
- 软工网络15团队作业8——Beta阶段敏捷冲刺(Day4)
- 根据周次显示日期范围_刚刚!总投资34亿元!京东方投建12英寸OLED微显示器件生产线...
- 迅为stm32mp157开发板资料手册+实战教程+视频教程
- Laravel执行定时任务
- linux上tftp上传文件失败,Linux下tftp上传文件失败的几条原因
- 【例16 Java从键盘读入学生成绩,找出最高分,并输出学生成绩等级】
- 常用的前端在线引用JS
- DFS and BFS
- Unity流水账2:视频播放之Video Player
- python双斜杠是什么意思_Python中正反斜杠(‘/’和‘\’)的意义与用法