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 交叉编译以及声卡驱动测试 (转)的更多相关文章

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

    本节学习目的 1)分析Linux中的OSS声卡系统 2)移植wm9876声卡 3)使用madplay应用程序播放mp3 1.声音三要素 采样频率 音频采样率是指录音设备在一秒钟内对声音信号的采样次数, ...

  2. 36、ALSA声卡驱动和应用

    (注意:内核上电的时候会把一些没运行的控制器模块的时钟都关掉,所有在写驱动的时候需要在使用的使用使用clk_get和clk_enable使能时钟) (说明:与ALSA声卡对应的是OSS架构,第二期视频 ...

  3. 十七、S3C2440 音频解码芯片WM8976声卡驱动移植、madplay测试

    学习目标:1. WM9876接口和工作原理:2. WM9876驱动移植:3. WM9876应用测试:4. 问题总结 1. WM9876接口和工作原理  本节使用了JZ2440开发板移植WM9876驱动 ...

  4. Ubuntu下声卡驱动解决方法alsa

    一.首先介绍一下什么是ALSA : Advanced Linux Sound Architecture 的简称为 ALSA ,译成中文的意思是先进的Linux声音架构(这是google翻译的):一谈到 ...

  5. ALSA声卡驱动中的DAPM详解之六:精髓所在,牵一发而动全身

    设计dapm的主要目的之一,就是希望声卡上的各种部件的电源按需分配,需要的就上电,不需要的就下电,使得整个音频系统总是处于最小的耗电状态,最主要的就是,这一切对用户空间的应用程序是透明的,也就是说,用 ...

  6. ALSA声卡驱动中的DAPM详解之三:如何定义各种widget

    上一节中,介绍了DAPM框架中几个重要的数据结构:snd_soc_dapm_widget,snd_soc_dapm_path,snd_soc_dapm_route.其中snd_soc_dapm_pat ...

  7. Linux ALSA声卡驱动之二:声卡的创建

    1. struct snd_card 1.1. snd_card是什么 snd_card可以说是整个ALSA音频驱动最顶层的一个结构,整个声卡的软件逻辑结构开始于该结构,几乎所有与声音相关的逻辑设备都 ...

  8. Linux&nbsp;ALSA声卡驱动之一:ALS…

    声明:本博内容均由http://blog.csdn.net/droidphone原创,转载请注明出处,谢谢! 一.  概述 ALSA是Advanced Linux Sound Architecture ...

  9. ALSA声卡驱动中的DAPM详解之七:dapm事件机制(dapm event)

    前面的六篇文章,我们已经讨论了dapm关于动态电源管理的有关知识,包括widget的创建和初始化,widget之间的连接以及widget的上下电顺序等等.本章我们准备讨论dapm框架中的另一个机制:事 ...

随机推荐

  1. [Cypress] Test React’s Controlled Input with Cypress Selector Playground

    React based applications often use controlled inputs, meaning the input event leads to the applicati ...

  2. Aizu/Aoj 0121 Seven Puzzle

    这题应该算是经典的八数码问题的弱化版吧:给你一个4x2的方版,上面有0-7 八个数字,每次只能让编号0的方格跟他的上下左右的方格交换:所以也就是把方格0当做空格看待,每次只有空格周围的方格能够向空格处 ...

  3. TestNG升级

    TestNG 6.5.1 or above is required,please update your TestNG or uncheck 'Use project TestNG jar' from ...

  4. 《深入浅出 Java Concurrency》——原子操作

    part1 从AtomicInteger開始 从相对简单的Atomic入手(java.util.concurrent是基于Queue的并发包.而Queue.非常多情况下使用到了Atomic操作.因此首 ...

  5. HDU Distinct Values

    /* 一开始想到的是 对于每个区间操作 先按左端点排序(包含的区间 留这打的区间) 我们维护pos表示 a数组找到了哪 对于当前这个区间 只需要找 pos--r这个区间 用set维护能用的数 没放到a ...

  6. win10查看系统启动项,并且禁用

    打开任务管理器,有一个叫做start up的选项卡,里面的东西就是启动项. 右键选中需要disable的,然后禁用.

  7. poj--2236--棋盘问题(dfs)

    棋盘问题 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 31183   Accepted: 15469 Descriptio ...

  8. nyoj--744--蚂蚁的难题(一)

    蚂蚁的难题(一) 时间限制:1000 ms  |  内存限制:65535 KB 难度:2 描述 小蚂蚁童鞋最近迷上了位运算,他感觉位运算非常神奇.不过他最近遇到了一个难题: 给定一个区间[a,b],在 ...

  9. B1567 [JSOI2008]Blue Mary的战役地图 二分答案+hash

    一开始以为是dp,后来看了一下标签...二分答案?之前也想过,但是没往下想,然后之后的算法就顺理成章,先求出第一个地图的所有子矩阵的hash值,然后求第二个,在上一个地图例二分查找,然后就没了. 算法 ...

  10. Windows下Python + AutoCAD 多义线绘图小结

    简介 在windows下台下, 使用comtypes库, 通过ActiveX操作autocad, 从而读取AutoCAD数据 comtypes.client AutoCAD ActiveX GetAc ...