alsa-lib 交叉编译以及声卡驱动测试 (转)
l 下载alsa-utils, alsa-lib, 版本要一致
http://www.alsa-project.org/main/index.php/Download
l 编译alsa-lib
./configure --host=arm-none-linux-gnueabi --disable-python --prefix=/usr/share/arm-alsa/
如果出现下列错误信息,--disable-pyhont
collect2: ld returned 1 exit status
make[3]: *** [smixer-python.la] 错误 1
make[3]: Leaving directory `/home/enzo/work/tq2440/alsa/alsa-lib-1.0.26/
modules/mixer/simple'
make[2]: *** [all-recursive] 错误 1
make[2]: Leaving directory `/home/enzo/work/tq2440/alsa/alsa-lib-1.0.26/
modules/mixer'
make[1]: *** [all-recursive] 错误 1
make[1]: Leaving directory `/home/enzo/work/tq2440/alsa/alsa-lib-1.0.26/
modules'
--with-alsa-inc-prefix和--with-alsa-prefix分别指定了交叉编译util应用所需要的alsa- lib的头文件和库文件;--disable-alsamixer表示不编译生成alsamixer这个应用程序,因为该程序依赖于ncurses这个图 形界面库,目前我们对于该库还不能交叉编译,故放弃
变换到root身份
# sudo su
alsa-lib在make install时还需要交叉编译,因此需要将交叉编译器的路径加入到PATH环境变量中
#export PATH=$PATH:/usr/local/arm/4.3.2/bin && make install
l 编译alsa-utils
./configure --host=arm-none-linux-gnueabi --prefix=/usr/share/arm-alsa/ --with-alsa-inc-prefix=/usr/share/arm-alsa/include --with-alsa-prefix=/usr/share/arm-alsa/lib --disable-xmlto --disable-alsamixer
l 复制alsa-lib, alsa-utils 到开发板
开发板的复制路径不是随便设置,必须和主机编译时相同的路径,否则动态库无法找到某些文件
所以要把/usr/share/arm-alsa文件夹得内容复制到开发板/usr/share/arm-alsa
复制alsa lib到开发板/lib文件夹下
/dev 目录下已经包含一下设备
/dev/controlC0 ,/dev/pcmC0D0p , /dev/pcmC0D0c, /dev/mixer, /dev/timer
[root@EmbedSky /]# ls /dev/pcm*
/dev/pcmC0D0c /dev/pcmC0D0p
[root@EmbedSky /]# ls /dev/con*
/dev/console /dev/controlC0
[root@EmbedSky /]# ls /dev/mix*
/dev/mice /dev/mixer
[root@EmbedSky /]# ls /dev/tim*
/dev/timer
测试aplay程序
[root@EmbedSky bin]# ./aplay test1.wav
ALSA lib confmisc.c:768:(parse_card) cannot find card '0'
ALSA lib conf.c:4246:(_snd_config_evaluate) function snd_func_card_driver returned error: No such file or directory
ALSA lib confmisc.c:392:(snd_func_concat) error evaluating strings
ALSA lib conf.c:4246:(_snd_config_evaluate) function snd_func_concat returned error: No such file or directory
ALSA lib confmisc.c:1251:(snd_func_refer) error evaluating name
ALSA lib conf.c:4246:(_snd_config_evaluate) function snd_func_refer returned error: No such file or directory
ALSA lib conf.c:4725:(snd_config_expand) Evaluate error: No such file or directory
ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM default
aplay: main:696: audio open error: No such file or directory
此时需要创建声卡节点到/dev/snd/
需要手动创建节点
if [ ! -d /dev/snd/ ]; then
echo "make snd node."
mkdir /dev/snd
ln -s /dev/pcmC0D0c /dev/snd/pcmC0D0c
ln -s /dev/pcmC0D0p /dev/snd/pcmC0D0p
ln -s /dev/timer /dev/snd/timer
ln -s /dev/controlC0 /dev/snd/controlC0
ln -s /dev/mixer /dev/snd/mixer
fi
export PATH=$PATH:/usr/share/arm-alsa/bin
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/share/alsa/alsa.conf
# volumn设置声音大小
amixer cset numid=1 45
成功配置后
l Alsa声卡配置
** alsa声卡可以正常工作,amixer 设置
*** amixer 用法
#amixer cset numid=N value //设置变量,numid对应contents的id
#amixer cget numid=N //获取amixer的某个设置
[root@EmbedSky /mnt]# amixer contents
numid=1,iface=MIXER,name='Master Playback Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=63,step=0
: values=50
numid=7,iface=MIXER,name='Tone Control - Bass'
; type=INTEGER,access=rw------,values=1,min=0,max=15,step=0
: values=0
numid=8,iface=MIXER,name='Tone Control - Treble'
; type=INTEGER,access=rw------,values=1,min=0,max=3,step=0
: values=0
numid=10,iface=MIXER,name='PCM Playback De-emphasis'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'None'
; Item #1 '32Khz'
; Item #2 '44.1Khz'
; Item #3 '48Khz'
: values=0
numid=5,iface=MIXER,name='Mic Sensitivity'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=1
numid=6,iface=MIXER,name='Mic Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
: values=0
numid=16,iface=MIXER,name='ADC +6dB Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=17,iface=MIXER,name='ADC Polarity Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=2,iface=MIXER,name='Capture Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=1
numid=12,iface=MIXER,name='AGC Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=13,iface=MIXER,name='AGC Target Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=3,step=0
: values=3
numid=14,iface=MIXER,name='AGC Timing'
; type=INTEGER,access=rw------,values=1,min=0,max=7,step=0
: values=0
numid=3,iface=MIXER,name='Analog1 Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
: values=27
numid=4,iface=MIXER,name='Analog2 Volume'
; type=INTEGER,access=rw------,values=1,min=0,max=31,step=0
: values=27
numid=15,iface=MIXER,name='DAC +6dB Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=18,iface=MIXER,name='DAC Polarity Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=20,iface=MIXER,name='DC Filter Enable Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=19,iface=MIXER,name='Double Speed Playback Switch'
; type=BOOLEAN,access=rw------,values=1
: values=off
numid=11,iface=MIXER,name='Input Mux'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Differential'
; Item #1 'Analog1'
; Item #2 'Analog2'
; Item #3 'Both'
: values=0
numid=9,iface=MIXER,name='Sound Processing Filter'
; type=ENUMERATED,access=rw------,values=1,items=4
; Item #0 'Flat'
; Item #1 'Minimum1'
; Item #2 'Minimum2'
; Item #3 'Maximum'
: values=0
l 声卡测试
** 播放
[root@EmbedSky /mnt]# aplay sound_check.wav
Playing WAVE 'sound_check.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo
** 录音
播放命令
arecord -d 1 -t wav -c2 -r 8000 -f S16_LE test1.wav
arecord -d 60 -t wav -c2 -r 8000 -f S16_LE test1.wav
-d 录音时间,单位秒
-c 声道数
-r 采样频率
-f 采样格式, 16bit 小端
** 播放的同时录音
1. 分别开两个终端,其中一个播放, 播放的声音无断断续续等异常
aplay sound_check.wav
另一个随机录音
arecord -d 3 -t wav -c2 -r 8000 -f S16_LE test1.wav
2. 录音1分钟, 另一个终端随机播放, 然后听录音后的文件,没有任何噪声,中断和异常
arecord -d 60 -t wav -c2 -r 8000 -f S16_LE test1.wav
aplay test1.wav
** 双声道录音后播放是否正常(未测试)
** 交叉编译其他程序:
Add included file in program: #include <alsa/asoundlib.h>
~# arm-none-linux-gnueabi-gcc -lasound -L/usr/share/arm-alsa/lib/ -I/usr/share/arm-alsa/include/ -o test my_test.c
alsa-lib 交叉编译以及声卡驱动测试 (转)的更多相关文章
- 31.Linux-wm9876声卡驱动(移植+测试)
本节学习目的 1)分析Linux中的OSS声卡系统 2)移植wm9876声卡 3)使用madplay应用程序播放mp3 1.声音三要素 采样频率 音频采样率是指录音设备在一秒钟内对声音信号的采样次数, ...
- 36、ALSA声卡驱动和应用
(注意:内核上电的时候会把一些没运行的控制器模块的时钟都关掉,所有在写驱动的时候需要在使用的使用使用clk_get和clk_enable使能时钟) (说明:与ALSA声卡对应的是OSS架构,第二期视频 ...
- 十七、S3C2440 音频解码芯片WM8976声卡驱动移植、madplay测试
学习目标:1. WM9876接口和工作原理:2. WM9876驱动移植:3. WM9876应用测试:4. 问题总结 1. WM9876接口和工作原理 本节使用了JZ2440开发板移植WM9876驱动 ...
- Ubuntu下声卡驱动解决方法alsa
一.首先介绍一下什么是ALSA : Advanced Linux Sound Architecture 的简称为 ALSA ,译成中文的意思是先进的Linux声音架构(这是google翻译的):一谈到 ...
- ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身
设计dapm的主要目的之一,就是希望声卡上的各种部件的电源按需分配,需要的就上电,不需要的就下电,使得整个音频系统总是处于最小的耗电状态,最主要的就是,这一切对用户空间的应用程序是透明的,也就是说,用 ...
- ALSA声卡驱动中的DAPM详解之三:如何定义各种widget
上一节中,介绍了DAPM框架中几个重要的数据结构:snd_soc_dapm_widget,snd_soc_dapm_path,snd_soc_dapm_route.其中snd_soc_dapm_pat ...
- Linux ALSA声卡驱动之二:声卡的创建
1. struct snd_card 1.1. snd_card是什么 snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都 ...
- Linux ALSA声卡驱动之一:ALS…
声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢! 一. 概述 ALSA是Advanced Linux Sound Architecture ...
- ALSA声卡驱动中的DAPM详解之七:dapm事件机制(dapm event)
前面的六篇文章,我们已经讨论了dapm关于动态电源管理的有关知识,包括widget的创建和初始化,widget之间的连接以及widget的上下电顺序等等.本章我们准备讨论dapm框架中的另一个机制:事 ...
随机推荐
- HDU 3934
/*这是用的有旋转卡壳的思想. 首先确定i,j,对k进行循环,知道找到第一个k使得cross(i,j,k)>cross(i,j,k+1),如果k==i进入下一次循环. 对j,k进行旋转,每次循环 ...
- Oracle动态显示日志
1.查看日志文件位置. IND_USER@PROD>select inst_id,name,value from v$diag_info; INST_ID NAME ...
- 《随笔》pyqt 获取 TreeWidget 选中项的内容
感谢朋友支持本博客,欢迎共同探讨交流.因为能力和时间有限,错误之处在所难免.欢迎指正! 假设转载,请保留作者信息. 博客地址:http://blog.csdn.net/qq_21398167 原博文地 ...
- 聚类k-means/k-means++/fcm学习笔记
聚类主要是一种无监督学习.用来发现未标注数据的隐藏结构,主要是用来给数据分组.聚类算法一般有硬聚类(k-means,k-means++)和软聚类FCM(fuzzy c-means).聚类眼下广泛应用于 ...
- Narrow Art Gallery
Time Limit: 4000ms, Special Time Limit:10000ms, Memory Limit:65536KB Total submit users: 11, Accepte ...
- Android基础新手教程——3.4 TouchListener PK OnTouchEvent + 多点触碰
Android基础新手教程--3.4 TouchListener PK OnTouchEvent + 多点触碰 标签(空格分隔): Android基础新手教程 本节引言: 如题,本节给大家带来的是To ...
- java封装AES加密算法
在实际coding中会常常遇到往数据库存入密码时加密.URL传參时的加密.由此简单封装了下java中的AES加密算法. 0.import类 import java.security.SecureRan ...
- 现代英特尔® 架构上的 TensorFlow* 优化——正如去年参加Intel AI会议一样,Intel自己提供了对接自己AI CPU优化版本的Tensorflow,下载链接见后,同时可以基于谷歌官方的tf版本直接编译生成安装包
现代英特尔® 架构上的 TensorFlow* 优化 转自:https://software.intel.com/zh-cn/articles/tensorflow-optimizations-on- ...
- 配置Windows群集
故障转移群集 l 一个群集支持8个节点,(64位操作系统支持16个节点) l 可以使用故障转移群集的服务:SQL Server(数据库), Exchange(邮件),文件和打印服务,DHCP服务等 ...
- 利用网络Socket和多线程实现一个双向聊天
接收键盘输入然后向对方发送消息的线程 package cn.com.chat; import java.io.BufferedReader; import java.io.BufferedWriter ...