linux驱动:音频驱动(一)ALSA
一、【基础知识】
1、J2 《--HPR_OUT+HPL_OUT 《-- U13(TLV320AIC3104IRHBR)的HPROUT+HPLOUT
2、驱动源码
IPNC_RDK_V3.8.0.1/Source/ti_tools/ipnc_psp_arago/kernel/sound/soc/codecs/tlv320aic3x.c
3、依赖于I2C驱动
4、声卡驱动框架:ALSA(Advanced Linux Sound Architecture)
5、ALSA网站:http://www.alsa-project.org
6、结构体snd_card描述一个声卡设备
7、结构体snd_device描述子设备
8、声卡设备
lisa@ubuntu:kernel$ls /dev/snd/ -l
总用量 0
drwxr-xr-x 2 root root 60 十二 15 09:10 by-path
crw-rw---T+1 root audio 116, 6 十二 15 09:10 controlC0
crw-rw---T+1 root audio 116, 2 十二 15 09:10 midiC0D0
crw-rw---T+1 root audio 116, 5 十二 15 09:11 pcmC0D0c
crw-rw---T+1 root audio 116, 4 十二 15 09:36 pcmC0D0p
crw-rw---T+1 root audio 116, 3 十二 15 09:10 pcmC0D1p
crw-rw---T+1 root audio 116, 1 十二 15 09:10 seq
crw-rw---T+1 root audio 116, 33 十二 15 09:10 timer
lisa@ubuntu:kernel$ls /dev/snd/by-path/ -l
总用量 0
lrwxrwxrwx1 root root 12 十二 15 09:10pci-0000:02:03.0 -> ../controlC0
9、主设备号
Include/sound/core.h中
#defineCONFIG_SND_MAJOR 116 /* standardconfiguration */
10、sound目录说明:在《深度实践嵌入式。。。》640页
二、【驱动框架】
1、创建声卡:snd_card_new(linux 2.6.22以上被snd_card_create代替) --->
2、创建子设备:
snd_device_new(snd_pcm_new、snd_rawmidi_new、snd_ctl_new、snd_timer_new、snd_card_proc_new、snd_jack_new) --->
3、注册声卡:snd_card_register
三、【PCM功能】
PCM:脉冲编码调制,将模拟转换成数字
0、结构体包含关系
0.1struct snd_pcm --> snc_pcm_str --> snd_pcm_substream --> (snd_pcm_ops+ snd_pcm_runtime)
0.2snd_pcm_runtime --> snd_pcm_hardware
1、结构体描述PCM:struct snd_pcm
2、注册pcm:snd_pcm_new
3、pcm流与pcm子流:snc_pcm_str、snd_pcm_substream
4、子流中的重要结构体
4.1snd_pcm_ops:对pcm流的操作方法需要在具体声卡中实现
4.2snd_pcm_runtime:硬件描述、中断回调、DMA缓冲区及私有数据等成员需要在具体声卡中实现
4.2.1snd_pcm_hardware:硬件描述
5、pcm设备文件的建立
5.1 描述逻辑设备的结构体:snd_minor
5.2 建立过程:
snd_card_register--> snd_pcm_register -->snd_pcm_new --> snd_pcm_dev_register --> snd_register_device_for_dev --> (snd_kernel_minor获取设备号+device_create创建设备节点)
6、PCM设备文件的访问
6.1 文件操作f_ops的指定
操作集合是snd_pcm_f_ops数组中的一项,定义在sound/core/pcm_native.c中
6.2 注册字符设备
alsa_sound_init--> register_chrdev(major, “alsa”, &snd_fops)
snd_fops中只有一个snd_open函数,该函数根据次设备号从snd_miors数组中取出对应的snd_minor对象,并将文件的操作集合(file->f_op)用该对象的f_ops成员替换,具体到PCM设备(一个snd_minor对象),该文件操作集合就是snd_pcm_f_ops中的相应操作
四、【声卡控制项】
1、控制项创建
1.1 描述控制项结构体:snd_kcontorl(include/sound/control.h中)
1.2 创建控制项函数:snd_ctl_new1
1.3 将控制项添加到它所属的声卡中:snd_ctl_add
1.4 控制项回调函数:info、get、put
2、 Cotrol设备建立
snd_card_create--> snd_ctl_new --> snd_ctl_dev_register-->snd_register_device_for_dev -->(snd_kernel_minor获取设备号+device_create创建设备节点)
3、Cotrol设备文件的访问
过程与PCM相同,不同点:将文件操作集合替换成snd_ctl_f_ops
相关文章:

秘籍 | 机器学习数据集网址大全
作者 | Will Badr译者 | Linstancy整理 | Jane出品 | AI科技大本营(ID:rgznai100)要找到一定特定的数据集可以解决各种机器学习问题,是一件很难的事情。越来越多企业或研究机构将自己的数据集公开,已经成为全球的趋势,…

为asa防火墙配置ssh登陆
由于最近事情超多,单位下发某些令人恶心的制度,今天突然说北京分公司和总公司之间要做***的连接,虽然俺是个CCNP,但是对于***来说接触的少之又少,并且工作繁忙,每天头大,北京分公司的安全ie同事…

70.nodejs操作mongodb
转自:https://www.cnblogs.com/whoamme/p/3467374.html 首先安装nodejs mongodb npm install mongodb var mongodb require(mongodb); var server new mongodb.Server(localhost, 27017, {auto_reconnect:true}); var db new mongodb.Db(mydb, server, {saf…

明晚8点公开课 | 用AI给旧时光上色!详解GAN在黑白照片上色中的应用
在改革开放40周年之际,百度联合新华社推出了一个刷屏级的H5应用——用AI技术为黑白老照片上色,浓浓的怀旧风勾起了心底快被遗忘的时光。想了解如何给老照片上色?本次公开课中,我们邀请到了百度高级研发工程师李超,他的…

linux驱动:音频驱动(二)ASoc
五、【ASoC声卡驱动框架】 1、ASoC将嵌入式设备的音频系统从软件层面划分为3个组件 1.1 codec驱动:音频编解码器驱动,与平台无关,实现音频控制项添加、音频接口实现、DAPM(动态音频电源管理)、音频编解码器的IO功能 …

把32位的SharePoint服务器场迁移到64位, 应该怎么做?
总体步骤如下: 1. 迁移已经存在了的数据库服务器到新的数据库服务器. 先迁移这一层的目的是避免可能发生的一些由64位系统对32位系统执行查询或写入操作所引起的性能问题. 2. 迁移WFE服务器到64位环境下. 准备工作: 1. 重新编译已经存在的32位的应用程序和自定义的程序集(web p…

testem方便的web tdd 测试框架使用
备注:单元测试,对于日常的开发是比较重要的,testem 简化了我们的代码编写,以及运行。主要特性:a. 支持的测试框架有:jasmine quint mocha buster.js ,同时也包含一些其他的适配器,支…
linux驱动:音频驱动(三)ASoc之machine驱动及card初始化
一、machine驱动及card初始化

程序员老在改Bug,就不能一次改好吗?
作者丨伍杏玲来源 | 程序人生(ID:coder_life)程序员的日常三件事:写Bug、改Bug、背锅。连程序员都自我调侃道,为什么每天都在加班?因为我的眼里常含Bug。但是真的有这么多Bug要改吗?就不能一次改…

一场库文件的远程修复
一场库文件的远程修复系统环境RHEL 4.7一、原因:发现每天早上7点1分备份的数据库文件时间不对,登录上去后date下发现时间是正确。二、尝试解决:1)setup->Timezone configuration-> Asia/Shanghai保存后,发现由原…
linux驱动:音频驱动(四)ASoc之machine设备
linux驱动:音频驱动(四)ASoc之machine设备

Sql server Insert执行的秘密(下) 带外键的INSERT分析
2019独角兽企业重金招聘Python工程师标准>>> 这一篇分析一下带外键表的INSERT的例子。 本文所用的数据表结构如上图所示;其中Blog表上BlogID是自增的主键,并在CreateUserID和CreateTime列上分别建有两个非唯一索引。 我们要往Blog表中插入一…

熬夜写代码,不如换女装入GitHub获上千Star?
作者 | 琥珀出品 | AI科技大本营(ID: rgznai100)程序员如何以合规手段快速获得 GitHub 上千 Star?新年刚过,GitHub Trending 上一个名为“Dress”的开源项目迅速蹿红,并成功掀起了不少程序员及吃瓜群众的热议。项目地址…

CCNp笔记(EIGRP)
EIGRP<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />特性1属于混合路由协议具有距离矢量路由协议的特性,又有链路状态路由协议的特性。2属于高级距离矢量路由协议3快速收敛4保证100%无环路5增量更新6支持默认4条最多…
linux驱动:音频驱动(五)ASoc之codec驱动
linux驱动:音频驱动(五)ASoc之codec驱动

科大讯飞市值腰斩背后,AI产业集体思考如何落地?
作者丨郭敏本文经授权转载自钛媒体(ID:taimeiti)【导语】在过去的一年里,科大讯飞受到了多方质疑,质疑的声音不外乎盈利疲软、靠政府补助、技术优势逐渐变弱等,种种质疑背后,其实整个 AI 产业从…

zabbix系列之邮件告警(三)
设置邮件告警有两种方式:1)、通过Linux自带的mail发送告警邮件2)、通过第三方邮箱发送(如QQ邮箱、163邮箱等)告警邮件1、修改 zabbx_server.conf 文件,指定脚本路径,没有则添加[rootcentos1 ~]# vim /usr/l…

Python告诉你:为何年终奖多发一元,到手却少两千多?
作者 | shenzhongqiang来源 | Python数据与分析(ID:ML_Python)年终奖多发一元,到手却要少两千多,甚至更多。听到这个消息的时候,大家是不是觉得有点意外,意外之余还有点淡淡的忧伤?上…

[译]一个系统管理员眼中的DevOps
前言 原文发表在Patrick Debois大神的官网上,传送门>> 通篇围绕运维工作进行阐述,始终是在强调运维人员和开发人员需要通力协作,这大概也是DevOps理念的核心价值所在吧!大概是因为作者来自比利时吧!翻译的时候还…
linux驱动:音频驱动(六)ASoc之codec设备
linux驱动:音频驱动(六)ASoc之codec设备

屏蔽“网页上有错误”提示,屏蔽java script 错误的代码
<script>window.onerrorhide_error_message;functionhide_error_message(){returntrue;}</script>代码再简写一点,就是: <script type"text/java script ">window.onerrorfunction(){returntrue;}</script >原来只要让…

linux驱动:音频驱动(七)交叉编译alsa库及工具集alsa-utils
0、编译时用到的库 libunistring0_0.9.3-5_i386.deb libgettextpo0_0.18.1.1-5ubuntu3_i386.deb gettext_0.18.1.1-5ubuntu3_i386.deb 1、下载源码 alsa-lib-1.0.27.tar.bz2 alsa-utils-1.0.27.2.tar.bz2 一、交叉编译alsa lib 1、su 进入root用户 2、进入/home/MY/evm-lin…

Python一键转Java?“Google翻译”你别闹
作者 | 若名出品 | AI科技大本营(ID:rgznai100)近日,Reddit 上有网友放出了一张疑似 Google 翻译添加了能让编程语言间互相转换的图片,立即引发数千名程序员网友的跟帖热议。图片显示,Google 翻译中添加了编程语言进行…

我所感兴趣的iOS10新特性
###SiriKit Siri API 的开放自然是 iOS 10 SDK 中最激动人心也是亮眼的特性。SiriKit 为我们提供一全套从语音识别到代码处理,最后向用户展示结果的流程。Apple 加入了一套全新的框架 Intents.framework 来表示 Siri 获取并解析的结果。你的应用需要提供一些关键字表…

如何将三万行代码从Flow移植到TypeScript?
作者 | David Gomes译者 | 弯月责编 | 郭芮来源 | CSDN(ID:CSDNnews)【编者按】在内存安全中,类型安全是很重要的一个命题。为了确保JavaScript项目运行的类型安全,本文的作者介绍了2016年时使用Flow的经历࿱…

CRM——插件流程回顾
1. Django项目启动 自动加载文件 制作启动文件1. 注册strak 在apps.py 类里面增加如下 def ready(self):from django.utils.module_loading import autodiscover_modulesautodiscover_modules("stark")2. 在已经注册的app中创建stark.py文件 加载2. 在stark中模仿Adm…
Linux驱动:TI达芬奇系列kernel中cup类型的判断,以cpu_is_ti81xx()为例
cpu_is_ti81xx() 为真 cpu.h (arch\arm\plat-omap\include\plat) 1、 # define cpu_is_ti81xx() is_ti81xx() # define cpu_is_ti814x() is_ti814x() 2、 #define IS_TI_CLASS(class, id) \ static inline int is…

IT人请注意你的身体![转]
IT人请注意你的身体![转]IT一直是很多人的梦想,外行的无数人挤破了脑袋想进这个圈子,在一般人看来,他们是时代的宠儿,他们可以不修边幅,他们工作时间可以身着便装,他们可以不受早九晚五的束缚,他…

WF4.0实战(六):控制WPF动画
这个例子改造了王晓冬老师的:用WF流程控制WPF动画。 本文用一个小例子演示了在WF中定义两个操作步骤,用来控制WPF页面元素的动画。王冬老师当时使用的是WF3.0,现在我改成WF4.0。 先看效果: 活动: 流程: 实现:实现很简单…

嵌入式学习:存储器总结
1、nor flash:NOR采用的并行接口,其特点读取的速度比之NAND快乐很多倍,其程序可以直接在NOR里面运行。但是它的擦除速度比较慢,集成度低,成本高的。现在的NOR的容量一般在2M左右,一般是用在代码量小的嵌入式…