
arm linux利用alsa驱动并使用usb音频设备

一.背景:
arm linux的内核版本是3.13.0
二.准备工作
添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项:
接下来就重新编译内核即可
三.交叉编译alsa-lib和alsa-utils (alsa-utils是一系列的音频设备控制工具,而alsa-lib是alsa-utils依赖的库,所以先将alsa-lib编译好)
3.1交叉编译alsa-lib
3.2交叉编译alsa-utils
四.将三编译好的库及工具都拷贝至arm开发板(笔者通常直接将编译好的都压缩好之后再复制到开发板进行解压,以避免直接复制造成软链接无法复制的情况)
五.使用alsa-utils中的工具进行各类操作
5.1录音:
arecord -D "plughw:0,0" demo.wmv
5.2播放:
aplay -D "plughw:0,0" demo.wmv
5.3获取控制信息:
amixer controls
输出信息如下:
numid=3,iface=MIXER,name='Master Mode Switch' numid=29,iface=MIXER,name='Master Mux' numid=4,iface=MIXER,name='Master Quality Switch' numid=2,iface=MIXER,name='Master Switch' numid=1,iface=MIXER,name='Master Volume' numid=7,iface=MIXER,name='PCM Mode Switch' numid=6,iface=MIXER,name='PCM Switch' numid=5,iface=MIXER,name='PCM Volume' numid=9,iface=MIXER,name='Mic Switch' numid=8,iface=MIXER,name='Mic Volume'
5.4 获取录音时的音量大小
从5.3可以获取到”numid=8,iface=MIXER,name='Mic Volume
'“这条信息,从Mic Volume可以得知是Mic的音量
amixer cget numid=8,iface=MIXER,name='Mic Volume'
5.4设置录音时的音量大小
amixer cset numid=8,iface=MIXER,name='Mic Volume' 255
六:注意事项:
如果将编译好的alsa-utils中的工具复制到fat32格式的存储设备的时候,注意fat32是不支持软链接的,此时需要直接复制一个aplay并将名称改为arecord:
cp aplay arecord
总结
以上所述是小编给大家介绍的arm linux利用alsa驱动并使用usb音频设备 ,希望对大家有所帮助!
相关推荐
-
零基础入门篇之Linux及Arm-Linux程序开发笔记
前言:本文记录了自己从一个完全不懂Linux的人如何一步步学会Linux程序开发的过程.当然也希望本文能够达到它的目的,让那些和我一样没有任何基础的人也能快速入门Linux程序开发. 一.Arm-Linux程序开发平台简要介绍 Arm-Linux程序的开发并不像我们以前接触的Windows程序开发那样,关于平台的搭建就繁琐很多,所以在正式进入程序开发之前先对这种开发模式进行简要介绍,让一个即使没有任何Linux开发经验的程序员也能够看懂后面的内容. 1.1程序开发所需系统及开发语言 开发arm-
-
arm linux利用alsa驱动并使用usb音频设备
一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: 接下来就重新编译内核即可 三.交叉编译alsa-lib和alsa-utils (alsa-utils是一系列的音频设备控制工具,而alsa-lib是alsa-utils依赖的库,所以先将alsa-lib编译好) 3.1交叉编译alsa-lib 3.2交叉编译alsa-utils 四.将三编译好的库及工具都拷贝至arm开发板(笔者通常直接将编译好的都压缩好之后再复制
-
Linux 块设备驱动代码编写
按照ldd的说法,linux的设备驱动包括了char,block,net三种设备.char设备是比较简单的,只要分配了major.minor号,就可以进行读写处理了.相对而言,block和net要稍微复杂些.net设备姑且按下不谈,我们在以后的博文中会有涉及.今天,我们可以看看一个简单的block是怎么设计的. 为了将block和fs分开,kernel的设计者定义了request queue这一种形式.换一句话说,所有fs对block设备的请求,最终都会转变为request的形式.所以,对于bl
-
详解linux电源管理驱动编写
对于嵌入式设备来说,合适的电源管理,不仅可以延长电池的寿命,而且可以省电,延长设备运行时间,在提高用户体验方面有很大的好处.所以,各个soc厂家在这方面花了很多的功夫.下面,我们可以看看linux是如何处理电源管理驱动的. 1.代码目录 drivers/regulator 2.查看目录下的Kconfig文件 menuconfig REGULATOR bool "Voltage and Current Regulator Support" help Generic Voltage and
-
Linux 字符设备驱动框架详细介绍
Linux 字符设备驱动框架 字符设备是Linux三大设备之一(另外两种是块设备,网络设备),字符设备就是字节流形式通讯的I/O设备,绝大部分设备都是字符设备,常见的字符设备包括鼠标.键盘.显示器.串口等等,当我们执行ls -l /dev的时候,就能看到大量的设备文件,c就是字符设备,b就是块设备,网络设备没有对应的设备文件.编写一个外部模块的字符设备驱动,除了要实现编写一个模块所需要的代码之外,还需要编写作为一个字符设备的代码. 驱动模型 Linux一切皆文件,那么作为一个设备文件,它的操作方
-
linux利用read命令获取变量中的值
前言 本文主要给大家介绍了关于linux利用read命令获取变量中值的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧. read的常用用法如下: read -[pstnd] var1 var2 ... -p提示语句 -n 字符个数 -s 屏蔽回显 -t 等待时间 -d 输入分界 read来获取变量,是通过屏幕中等待用户输入的,如果是用read命令从已知的变量来获取值要如何操作呢? 比如说: input_ips='127.127.127.10-127.127.127.14
-
Linux利用keepalived实现lvs的高可用性的操作方法
lvs+keepalived是什么? keepalived工作原理 keepalived是集群管理中保证集群高可用的一个服务软件,其功能类似于heartbeat,用来防止单点故障. keepalived是以VRRP协议为实现基础的,VRRP全称Virtual Router Redundancy Protocol,即虚拟路由冗余协议. 虚拟路由冗余协议,可以认为是实现路由器高可用的协议,即将N台提供相同功能的路由器组成一个路由器组,这个组里面有一个master和多个backup,master上面有
-
Linux利用lsof/extundelete工具恢复误删除的文件或目录
前言 Linux不像windows有那么显眼的回收站,不是简单的还原就可以了. linux删除文件还原可以分为两种情况,一种是删除以后在进程存在删除信息,一种是删除以后进程都找不到,只有借助于工具还原.这里分别检查介绍下 一,误删除文件进程还在的情况. 这种一般是有活动的进程存在持续标准输入或输出,到时文件被删除后,进程PID还是存在.这也就是有些服务器删除一些文件但是磁盘不释放的原因.比如当前举例说明: 通过一个shell终端对一个测试文件做cat追加操作: [root@21yunwei_ba
-
利用golang驱动操作MongoDB数据库的步骤
安装MongoDB驱动程序 mkdr mongodb cd mongodb go mod init go get go.mongodb.org/mongo-driver/mongo 连接MongoDB 创建一个main.go文件 将以下包导入main.go文件中 package main import ( "context" "fmt" "log" "go.mongodb.org/mongo-driver/bson" &quo
-
Linux利用inotify和rsync服务实现数据实时同步的原理解析
目录 文件定时同步的实现: 文件实时同步的实现: inotify inotify-tools包主要工具: inotifywait 命令: rsync工具 rsync有三种工作方式: 两种方式实现rsync服务器 方式一:通过rsync守护进程的方式实现rsync服务 以独立服务方式运行rsync并实现验证功能 工作原理: inotify+rsync+shell 脚本实现实时数据同步 文件定时同步的实现: 利用rsync结合cron计划任务实现: rsync -av --delete /data/
-
Linux内核设备驱动之内核的时间管理笔记整理
/****************** * linux内核的时间管理 ******************/ (1)内核中的时间概念 时间管理在linux内核中占有非常重要的作用. 相对于事件驱动而言,内核中有大量函数是基于时间驱动的. 有些函数是周期执行的,比如每10毫秒刷新一次屏幕: 有些函数是推后一定时间执行的,比如内核在500毫秒后执行某项任务. 要区分: *绝对时间和相对时间 *周期性产生的事件和推迟执行的事件 周期性事件是由系统系统定时器驱动的 (2)HZ值 内核必须在硬件定时器的帮
随机推荐
- vuejs指令详解
- JavaScript常用全局属性与方法记录积累
- notepad、editplus等软件常用的文本整理正则表达式
- Spring boot + mybatis + Vue.js + ElementUI 实现数据的增删改查实例代码(二)
- Java实现FTP批量大文件上传下载篇1
- ASP.NET MVC5网站开发用户注册(四)
- android中UI主线程与子线程深入分析
- Python聊天室实例程序分享
- go语言按显示长度截取字符串的方法
- 算法系列15天速成 第一天 七大经典排序【上】
- C++、C语言和JAVA开发的区别
- js实现网页图片延时加载 提升网页打开速度
- JS实现兼容性较好的随屏滚动效果
- 推荐js实现商品分类到搜索栏友好提示(人机交互)第1/3页
- html中的input标签的checked属性jquery判断代码
- Java用Cookie限制点赞次数(简版)
- SQL SERVER的数据类型
- SQL Server 2005 数据库转 SQL Server 2000的方法小结
- jquery中键盘事件小结
- ASP.NET jQuery 实例9 通过控件hyperlink实现返回顶部效果
其他
- vue如何动态设置select的disabled属性
- antdesign vue 时间选择valueFormat
- go 调用post接口
- android studio重装项目构建不成功
- 网络参数梯度为none
- vue请求后台时请求端口不一致怎么解决
- IDEA构建Spring5
- JS滚动图轮播一遍跳转到下一链接
- c语言 字符串 转义
- Javaweb购物车模块怎么实现
- .net支持docker吗
- kali 安装awvs网址打不开
- this.$set 三级属性修改
- asp 打开图片下载
- vue 数组索引绑定
- uniapp 微信小程序获得用户手机号
- K8S 集群 证书年限
- 接收串口数据实时画图
- 输入框光标重影怎么回事
- python 后台图像识别