最近在解决一个音频的问题,所以正好借这个机会来把音频的东西重新梳理一下,总结是一个很好的习惯,能方便自以后遇到问题快速排查问题 。
- 平台「MT8167」
- 内核版本「kernel 4.4」

文章插图
tinyalsa调用读取函数

文章插图
IOCTL调用流程

文章插图
读取数据到应用层
内核注册声卡流程

文章插图
注册

文章插图
注册PCM

文章插图
创建pcm设备

文章插图
创建pcm设备
内核驱动里面的platform、machine和codec如果看alsa驱动,不能清楚这三个「怪兽」的联系,会很容易陷入迷宫里面之中不能自拔 。
- machine 「可以理解成一个主板、一套代码是可以适配很多很多主板的」
- platform 「这个代表的是CPU型号,平台相关的东西」
- codec「也就是音频芯片,有编解码的AD或者DA」

文章插图
三者联系
machine、platform、codec 关键结构体machine用来指定使用哪个platform和codec 。

文章插图
machine

文章插图
【Linux ALSA 图解】
platform

文章插图
codec
总结比较简单,主要是画了几张图片,这些图片对初学者或者是排查问题理清楚框架是有作用的,音频下还有一些ring_buff和路由相关的,自己如何计算没一帧数据的大小,下一次再总结下 。
推荐阅读
- Linux 下的交互式进程浏览器 htop 3.0.0 发布
- 带你玩转 Linux Shellcode
- 在Linux中查找已连接网络的WiFi密码
- 呕心沥血整理的linux服务器一条龙服务
- Linux select/poll机制原理分析
- Linux安全技巧汇总,防止扫描,禁止空密码,强制用V2等
- 使用growpart工具完成Linux系统盘分区扩容
- Linux下如何知道是否有人在使坏?
- 树莓派无屏上手指南
- linux操作系统上安装docker
