Linux ALSA 图解

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

  • 平台「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

platform

codec

总结

比较简单,主要是画了几张图片,这些图片对初学者或者是排查问题理清楚框架是有作用的,音频下还有一些ring_buff和路由相关的,自己如何计算没一帧数据的大小,下一次再总结下。


  

 

  推荐阅读:

    专辑|Linux文章汇总

    专辑|程序人生

    专辑|C语言

嵌入式Linux

微信扫描二维码,关注我的公众号 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/467387.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

将一段复杂文本变成字符串的赋值语句

因为需要在C#的代码中,写入一大段的js代码和网页代码,试验已经没有问题了。实现时却碰到一个小问题,就是大段的js和html代码,应该以什么方式存在。最省事的方式,其实就是存在一个单独的文件中,每次读入即可…

ARM 原子操作里的两个汇编指令

今天一个读者朋友给我留言,问了这个问题,ARM原子操作的汇编代码,还给我截图了两个不同的解释,让我说哪个是正确的。原子操作的起因是为了内核同步,保证数据在正确性,之前已经吹过一波,可以看这几…

秒,在解答这个C语言题目上,我们都败了

看这篇文章之前,我觉得可以先看看下面这篇文章 看printk引发的一点思考不管我们用的printk还是printf,它们的核心都是可变参数的函数,所以可以拼接很多参数传递给函数实体,然后函数实体里面可以通过某种方式解析这些参数。看看这个…

Linux kernel 同步机制(下篇)

之前的文章Linux kernel同步机制在上一部分,我们讨论了最基本常见的几类同步机制,这一部分我们将讨论相对复杂的几种同步机制,尤其是读写信号量和RCU,在操作系统内核中有相当广泛的应用。读写信号量(rw_semaphore&…

白话设计模式——Abstract Factory

Abstract Factory,把英文直接翻译过来的话就是“抽象工厂”,既然是工厂,那就肯定是生产产品的地方。不过,它不是生产同一类的产品,而是生产同一系列的产品。举个例子,广州本田现在生产3种汽车,O…

工程师实战:单片机裸机程序框架是怎样炼成的?

前言 前不久,我有位做测试的朋友转去做开发的工作,面试遇到了一个问题,他没明白,打电话问了我。题目大概就是:在单片机裸机开发时,单片机要处理多个任务,此时你的程序框架是怎样的呢&#xff1f…

c 语言指针教学视频,[C语言] 猎豹网校 C和指针视频教程

资源介绍21days_Cpp_二进制和十六进制.mp4xa0xa080x86_内联汇编.mp4xa0xa0ABG2C_for_循环.mp4xa0xa0ABG2C_关系运算符.mp4xa0xa0ABG2C_字符串.mp4xa0xa0ABG2C_循环.mp4xa0xa0ABG2C_数学运算.mp4xa0xa0ABG2C_更高级的运算符.mp4xa0xa0ABG2C_测试多个值.mp4xa0xa0ABG2C_终止循环.…

图解http

今天是周五,按照正常的情况,今天下班后将会经历一周中最愉快的时光,愉快的时间总是会有那么一些短暂,所以我就送给大家一个资料 「图解http」这是一个微信好友发给我的,他一直给我发送了很多很多消息,比如什…

为什么执行自己的程序要在前面加./

前言在Linux中,我们执行内置命令时,直接输入命令名称即可,如:$ mv a b #将a重命名为b而在执行自己写好的程序时,却要带上./,例如:$ hello hello: command not found $ ./hello hello world这是为…

C语言怎么计算数据类型范围?

之前在网上看到的一个讨论,是谁决定了数据类型的范围?比如说,怎么确定 char 就是 -128~127 ,而不是 -127~128 呢?说下规定signed 的取值范围是 -(2N-1) to 2N-1 - 1unsigned 的取值范围是 0 to (2N-1) (2N-1 - 1)只要…

双十一为何规则复杂,套路多多

为啥不直接打5折?为了让你把“穷人”俩字写到自己脸上啊。 双十一快到了,今年我又一次有了不太想参加的感觉。作为一个阅读理解不太灵光的人,去年的活动我就整得不太明白——优惠券都是十块十块的,也不知道该咋用;还有预付款、整点秒杀之类的…

团建是什么鬼?

2012年我入职TCL,在TCL我体会到了团队建设的文化,也正是经历了那段职场,我明白了很多「可意味不可言传」。那时候我们经常五十成群出去吃饭、喝酒、唱歌;上学那会我很不喜欢团队活动,特别是室内的活动,总感…

Alpha 答辩总结

【Alpha展示评审表格】 小组序号小组名称格式(20%)内容(20%)PPT(20%)演讲(20%)答辩(20%)总分1天机组1515151516762PMS1617171616824“像我这么能打的还有五个…

一粒沙子变成芯片的全过程

推荐阅读:专辑|Linux文章汇总专辑|程序人生专辑|C语言嵌入式Linux微信扫描二维码,关注我的公众号

要学会拒绝

Img「聊天截图」这是今晚上跟一个朋友聊天的截图,之后、突然想到这个话题,今年因为疫情,很多人抱怨工作不好找,我这个朋友,也是在疫情之下,可能是干得不开心,也可能还是干得不开心,可…

linux设备模型之kset/kobj/ktype分析

1. 概述今天来聊一下Linux设备模型的基石:kset/kobject/ktype。sysfs文件系统提供了一种用户与内核数据结构进行交互的方式,可以通过mount -t sysfs sysfs /sys来进行挂载;Linux设备模型中,设备、驱动、总线组织成拓扑结构&#x…

VLAN 路由实验图解

VLAN 路由实验图解(交换机为cisco1900系列)注:PC1:192.168.1.2 255.255.255.0PC2:192.168.2.2 255.255.255.0PC3:192.168.1.3 255.255.255.0PC4:192.168.2.3 255.255.255.0Fa0/0.1:192.168.1.1 255.255.255…

第 120 场双周赛 解题报告 | 珂学家 | 前后缀拆解 启发式合并

前言 忘名可以再记,回忆永不再来 整体评价 好像有一段时间没写周赛题解了,_. 感觉今天手感特别好,下午的几场比赛,包括传智杯都能打出超神战绩。 T3这题属于前后缀拆解,然后单调栈上二分(可以引入哨兵机制)&#xf…

音频系统,Alsa 里面的buff 是怎么计算的?

相关文章(干货)Ai音箱和Linux音频驱动小谈Linux ALSA 图解我在MTK平台下调试音频ALSA我们知道声音是模拟信号,模拟信号转成数字信号就一定有大小,既然有大小,那我们就需要开辟内存来保存这些数据。---- 我们知道,视频流的一帧就是…

用一句话证明你是程序员,你会怎么说

这个文章没有正文突然想到的一个话题,感觉很有意思如果用一句话透露出你是一个程序员你会怎么表露自己了?留言偷偷告诉我?