首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux ALSA声卡驱动之二:声卡创建

一、结构体struct snd_card: 1.1. snd_card是什么: snd_card可以说是整个ALSA音频驱动最顶层一个结构,整个声卡软件逻辑结构开始于该结构,几乎所有与声音相关逻辑设备都是...snd_card管理之下,声卡驱动第一个动作通常就是创建一个snd_card结构体。...list_head controls:记录该声卡下所有的控制单元链表 void *private_data:声卡私有数据,可以创建声卡时通过参数指定数据大小 二、声卡建立流程: 2.1.1....第二步,创建声卡芯片专用数据: 声卡专用数据主要用于存放该声卡一些资源信息,例如中断资源、io资源、dma资源等。...三、snd_card_create(): 这个接口Linux内核里面可能找不到,这里我们主要是学习思想! snd_card_create()/sound/core/init.c中定义。

32510
您找到你想要的搜索结果了吗?
是的
没有找到

Linux ALSA声卡驱动之三:PCM设备创建

一、PCM是什么: PCM是英文Pulse-code modulation缩写,中文译名是脉冲编码调制。...,经过解码后,最终送到音频驱动程序中就是PCM数据,反过来,录音时,音频驱动不停地把采样所得PCM数据送回给应用程序,由应用程序完成压缩、存储等任务。...每个声卡最多可以包含4个pcm实例,每个pcm实例对应一个pcm设备文件。pcm实例数量这种限制源于linux设备号所占用位大小,如果以后使用64位设备号,我们将可以创建更多pcm实例。...snd_pcm_set_ops 设置操作该pcm控制/操作接口函数,参数中snd_pcm_ops结构中函数通常就是我们驱动要实现函数 snd_card_register 注册声卡,在这个阶段会遍历声卡所有逻辑设备...结构体保存了声卡下某个逻辑设备上下文信息,他逻辑设备建立阶段被填充,逻辑设备被使用时就可以从该结构体中得到相应信息。

32910

Linux ALSA声卡驱动之四:Control设备创建

很多声卡驱动利用它存储硬件寄存器地址、bit-shift和bit-mask,这时,private_value字段可以按以下例子进行设置: .private_value = reg | (shift...对象,chip对象将会被赋值kcontrol->private_data字段,该字段可以回调函数中访问。...八、Control设备建立: Control设备和PCM设备一样,都属于声卡逻辑设备。...Control设备创建过程大体上和PCM设备创建过程相同。详细创建过程可以参考本博另一篇文章:Linux音频驱动之三:PCM设备创建。下面我们只讨论有区别的地方。...所以我们无需显式地创建control设备,只要建立声卡,control设备被自动地创建。 和pcm设备一样,control设备名字遵循一定规则:controlCxx,这里xx代表声卡编号。

17210

Linux ALSA声卡驱动之五:移动设备中ALSA(ASoC)

一、ASoC由来: ASoC--ALSA System on Chip ,是建立标准ALSA驱动层上,为了更好地支持嵌入式处理器和移动设备中音频Codec一套软件体系。...ASoc出现之前,内核对于SoC中音频已经有部分支持,不过会有一些局限性: Codec驱动与SoC CPU底层耦合过于紧密,这种不理想会导致代码重复,例如,仅是wm8731驱动,当时Linux...音频事件没有标准方法来通知用户,例如耳机、麦克风插拔和检测,这些事件移动设备中是非常普通,而且通常都需要特定于机器代码进行重新对音频路劲进行配置。...ASoC正是为了解决上述种种问题而提出,目前已经被整合至内核代码树中:sound/soc。ASoC不能单独存在,他只是建立标准ALSA驱动一个它必须和标准ALSA驱动框架相结合才能工作。...-2.6.35-ASoC中各个结构静态关系 ASoC把声卡实现为一个Platform Device,然后利用Platform_device结构中dev字段:dev.drvdata,它实际上指向一个snd_soc_device

23710

ALSA声卡驱动DAPM(二)-建立过程

一、创建widget:snd_soc_dapm_new_controls: snd_soc_dapm_new_controls函数完成widget创建工作,并把这些创建好widget注册声卡widgets...到此,widget已经被正确地创建并初始化,而且被挂在声卡widgets链表中,以后我们就可以通过声卡widgets链表来遍历所有的widget,再次强调一下snd_soc_dapm_new_controls...函数所完成主要功能: 为widget分配内存,并拷贝参数中传入驱动中定义好模板 设置power_check回调函数 把widget挂在声卡widgets链表中 二、为widget建立dapm...电源状态,前面我们已经知道,widget之间是使用snd_soc_path结构进行连接驱动要做是定义一个snd_soc_route结构数组,该数组每个条目描述了目的widget和源widget...,我们来分析一下:(注意linux3.10.28代码没有相应snd_soc_dapm_add_path函数,linux3.12才有设计snd_soc_dapm_add_path函数) 1 static

3.4K50

31.Linux-wm9876声卡驱动(移植+测试)

本节学习目的 1)分析LinuxOSS声卡系统 2)移植wm9876声卡 3)使用madplay应用程序播放mp3 1.声音三要素 采样频率 音频采样率是指录音设备一秒钟内对声音信号采样次数,...本节WM8976MODE脚接高电平,所以是3线控制 3.接下来便来分析linux内核声卡系统 linux声卡中存在两种声卡系统,一种是OSS(开放声音系统),一种是ALSA(先 进Linux声音架构...是因为, 当注册声卡系统驱动后,才会有设备节点,此时这里代码是没有驱动,后面会分析到 3.2 再来看看“sound”字符设备file_perations: ?...open(),里面是通过次设备号来调用__look_for_unit()函数,找到chains[chain]数组里驱动声卡sound_unit结构体,然后来替换系统声卡file_operations...如下图所示,找到一个支持s3c24xx板卡声卡驱动uda1341 ?

4.9K71

ALSA声卡驱动DAPM(一)-DPAM详解

最近使用tinymix 调试相应音频通道,但是一直不知道音频通道原理是什么。所以百度了一下,百度结果是与DPAM有关。...一、DAPM简介:  DAPM是Dynamic Audio Power Management缩写,直译过来就是动态音频电源管理意思,DAPM是为了使基于linux移动设备上音频子系统,在任何时候都工作最小功耗状态下...用户空间应用程序无需对代码做出修改,也无需重新编译,DAPM根据当前激活音频流(playback/capture)和声卡mixer等配置来决定那些音频控件电源开关被打开或关闭。...: DAPM框架中,把各种不同widget划分为不同种类,snd_soc_dapm_widget结构中id字段用来表示该widget种类,可选种类都定义一个枚举中: 1 enum snd_soc_dapm_type...platform域    位于该域上widget通常是针对平台或板子一些需要物理连接输入/输出接口,例如耳机、扬声器、麦克风,因为这些接口每块板子上都可能不一样,所以通常它们是machine驱动中进行定义和控制

8.3K60

Linux驱动实践:中断处理中【工作队列】 workqueue 是什么鬼?

目录 工作队列是什么 驱动程序 编译、测试 别人经验,我们阶梯! 大家好,我是道哥,今天我为大伙儿解说技术知识点是:【中断处理中下半部分机制-工作队列】。...刚开始介绍中断处理时候,曾经贴出下面这张图: 图中描述了中断处理中下半部分都有哪些机制,以及如何根据实际业务场景、限制条件来进行选择。...这篇文章,我们就通过实际代码操作,来演示一下工作队列(workqueue)使用方式。 工作队列是什么 工作队列是Linux操作系统中,进行中断下半部分处理重要方式!...关于工作队列基本知识点就介绍到这里,下面来实际操作验证一下。 驱动程序 之前几篇文章,驱动程序中测试中断处理操作流程都是一样,因此这里就不在操作流程上进行赘述了。...int, 0644); module_param(devname, charp, 0644); // 定义驱动程序 ID,中断处理函数中用来判断是否需要处理 #define MY_DEV_ID

1.7K40

linux驱动ioctl函数,Linux中与驱动相关ioctl函数

ioctl是设备驱动程序中对设备I/O通道进行管理函数,所谓对I/O通道进行管理,就是对设备一些特性进行控制,例如,串口线上收发数据通过read/write操作,而串口波特率、校验位、停止位通过...例如,我们可以驱动程序中实现write时候检查一下是否有特殊约定数据流通过,如果有的话,那么后面就跟着控制命令(一般socket编程中常常这样做)。...要记住,用户程序所作只是通过命令码告诉驱动程序它想做什么,至于怎么解释这些命令和怎么实现这些命令,这都是驱动程序要做事情。...定义设备结构体 struct vdIn{ int fd; //设备描述符 char *videodevice; //设备节点,linux下,通用视频采集设备节点为/dev/video0 struct...设备节点赋值,”/dev/video0″是真实物理摄像头设备linux表示 if (videodevice == NULL || *videodevice == 0) { videodevice

2.2K180

Linux系统驱动之最简单LCD驱动_基于QEMU

资料下载 coding无法使用浏览器打开,必须用git工具下载: git clone https://e.coding.net/weidongshan/linux/doc_and_source_for_drivers.git...视频观看 百问网驱动大全 百问网技术交流群,百万嵌入式工程师聚集地: https://www.100ask.net/page/2248041 最简单LCD驱动_基于QEMU 本节视频对应源码GIT...QEMU来操作 真实开发板上讲解内容,会覆盖QEMU视频知识 1....为什么要用QEMU Linux驱动 = 驱动框架 + 硬件操作。 如果硬件操作足够简单,我们就可以把精力放在驱动程序框架上,这才是Linux核心。...使用QEMU,虚拟出一款简单LCD控制器,可以简化硬件操作,让我们把精力放在驱动框架上。 2.

2.8K10

Linux驱动开发IIC设备驱动投机取巧

前言 LinuxIIC驱动想必大家都耳熟能详,网上也有很多相关教程。 网上教程总结,比如: 方法问题描述Linux 3.X.X版本之后,设备树+驱动此方法是比较符合linux驱动写法。...他将会操作多个文件 上面的做法都有些困难及弊端存在,经过摸索了一遍LinuxI2C驱动框架,我发现可以很精简写一个I2C设备设备驱动。...而且是放在内核态中,这样处理一下GPIO或者中断什么都很方便。 投机取巧I2C驱动 I2C设备驱动说明 投机取巧I2C驱动是参考I2C总线驱动代码实现。...投机取巧I2C驱动不需要设备树,这也让一些不熟悉设备树小伙伴能编写一个设备驱动。 投机取巧I2C驱动精简,方便理解。...分析I2C总线驱动说明 I2C总线驱动代码linux源码中--i2c-dev.c中。 代码中可以看到他提供一套文件操作接口,open,read,write,close接口。

1.8K20

Linux 设备和驱动相遇

一个开发板 上一节最后我们讲到设备树三大作用,其最后一个作用也是最重要作用:设备信息集合。这一节结合设备信息集合详细讲解来认识一下设备和驱动是如何绑定。...我们看到一个开发板有很多设备,这些设备是如何一层一层展开呢?设备和驱动又是如何绑定呢?我们带着这些疑问进入本节主题。...第一节中讲了总线、设备和驱动模型原理,即任何驱动都是通过对应总线和设备发生联系,故虽然 soc 内部没有具体总线,但是内核通过 platform 这条虚拟总线,把控制器一个一个找到,一样遵循了内核高内聚...如果你板级文件里注册了这个函数,那么系统启动时候这个函数会被调用,如果没有定义,则会通过调用 of_platform_populate() 来展开挂在“simple-bus”下设备,如图(分别位于...接下来我们一起看下这些信息设备树里是怎么记录,为下一节动手定制开发板做好准备。 1.reg 寄存器 ?

2.4K40

Linuxinode是什么

最近在做运维指标的梳理工作,其中一个就是Linux系统中inode,这就想到了之前维护某套系统,逻辑是将主机报文,存储到本地文件,客户通过FTP下载这些文件,实现报文转发。...但是经常碰到客户程序执行异常场景,导致原始文件未删除,日积月累,虽然服务器磁盘空间未满,但是文件系统inode满了导致磁盘不可用。 为什么出现这种情况?Linuxinode作用到底是什么?...inode和block概述 文件是存储硬盘上,硬盘最小存储单位叫做扇区sector,每个扇区存储512字节。...通常情况下不需要关注单个inode大小,而是需要重点关注inode总数。inode总数格式化时候就确定了。...因此,日常应用监控中,还是要注意这种指标的监控,避免因为一些异常场景,导致系统不可用。

5.8K10

Linux驱动实践:如何编写【 GPIO 】设备驱动程序?

目录 示例程序目标 编写驱动程序 编写应用程序 卸载驱动模块 在前几篇文章中,我们一块讨论了: Linux 系统中,编写字符设备驱动程序基本框架,主要是从代码流程和 API 函数这两方面触发。...这篇文章,我们就以此为基础,写一个有实际应用功能驱动程序: 驱动程序中,初始化 GPIO 设备,自动创建设备节点; 应用程序中,打开 GPIO 设备,并发送控制指令设置 GPIO 口状态; 示例程序目标...编写驱动程序 以下所有操作工作目录,都是与上一篇文章相同,即:~/tmp/linux-4.15/drivers/。...从代码中可以看出:驱动程序使用 alloc_chrdev_region 函数,来动态注册设备号,并且利用了 Linux 应用层中 udev 服务,自动 /dev 目录下创建了设备节点。...加载驱动模块 加载驱动模块之前,先来检查一下系统中,几个与驱动设备相关地方。 先看一下 /dev 目录下,目前还没有设备节点( /dev/mygpio[0-3] )。

4.8K30

Linux驱动开发-编写超声波测距模块驱动

介绍 当前采用这种超声波测距模块各大高校实验室、毕设、课设里用很多,原理很简单,通过声波测距,发出声音碰到障碍物会反弹,声音空气里传播速度是已知,根据时间就能计算出测量距离。...示例代码 下面是超声波测距模块驱动代码,将超声波模块输出脚接在开发板支持中断IO口上,配置为上升沿触发,当超声波输出脚检测到高电平就进去中断服务函数,中断服务函数里调度工作队列,最终工作函数里完成高电平时间长度获取...,计算测量距离,直接在驱动代码里打印出来。...下面是测量结果: 2.1 驱动代码 #include #include #include #include..._linux_csb_init); /*驱动入口--安装驱动时候执行*/ module_exit(tiny4412_linux_csb_cleanup); /*驱动出口--卸载驱动时候执行*/

1.7K30

Linux音频驱动-OSS和ALSA声音系统简介及其比较

概述 昨天想在Ubuntu上用一下HTK工具包来绘制语音信号频谱图和提取MFCC结果,但由于前段时间把Ubuntu升级到13.04,系统声卡驱动是ALSA(Advanced Linux Sound.../dev/sndstat:测试声卡,执行cat /dev/sndstat会显示声卡驱动信息。...ALSA高级Linux声音系统简介 高级Linux声音体系(英语:Advanced Linux Sound Architecture,缩写为ALSA)是Linux内核中,为声卡提供驱动组件,以替代原先...从2.6版本开始ALSA成为Linux内核中默认标准音频驱动程序集,OSS则被标记为废弃。 ALSA由许多声卡声卡驱动程序组成,同时它也提供一个称为libasoundAPI库。...另外,ALSA还包含插件功能,使用插件可以扩展新声卡驱动,包括完全用软件实现虚拟声卡

5.1K31

Linux 总线、设备、驱动模型探究

举个例子,充电墙壁插座安静嵌入墙面上,无论设备是电脑还是手机,插座都能依然不动完成它使命——充电,没有说为了满足各种设备充电而去更换插座。其实这就是软件工程强调高内聚、低耦合概念。...那么 GITCHAT 驱动里需要定义 GITCHAT 基地址、中断号等信息。...没错,Linux 内核里就是运用了这种设计思想去对设备和驱动进行适配隔离,只不过在内核里我们不叫做适配层,而取名为总线,意为通过这个总线去把驱动和对应设备绑定一起,如图: ?...基于这种设计思想,Linux 把设备驱动分为了总线、设备和驱动三个实体,这三个实体在内核里职责分别如下: ?...最底层是不同板子板级文件代码,中间层是内核总线,最上层是对应驱动,现在描述板级代码已经和驱动解耦了,这也是 Linux 设备驱动模型最早实现机制,但随着时代发展,就像是人类贪婪促进了社会进步一样

6.4K41

谈谈Linux内核驱动coding style

最近在向Linux内核提交一些驱动程序,提交过程中,发现自己代码离Linux内核coding style要求还是差很多。...当初自己对内核文档里CodingStyle一文只是粗略浏览,真正写代码时候很多细节上会照顾不周。不过, 不遵守规则程序员队伍里,我并不是孤独。...如果去看drivers/staging下代码,就会发现很多驱动程序都没有严格遵守内核coding style,而且很多驱动程序TODO文件里,都会把"checkpatch.pl fixes"作为自己目标之一...Linux内核coding style里,switch和case要求有相同缩进。本例代码很少,错误也只有这一个,手动修改很方便。如果类似的缩紧错误很多怎么办?...比如,Linux内核coding style要求,行尾不能有空格(包括Tab),去除这些空格就可以借助sed。 我自己习惯很差,经常在代码行尾留下一些空格。

1.7K10
领券