ALSA交叉编译与测试
来源:互联网 发布:身价最高淘宝模特是谁 编辑:程序博客网 时间:2024/05/16 09:59
ALSA交叉编译与测试
目录(?)[+]
情况简介
ALSA是目前Linux系统上大量采用的音频设备库,通过Alsa架构能分离驱动和应用的开发。Alsa为上层提供API的同时,也为下层提供了接口,在内核配置的时候指定“支持Alsa”就能得到内核支持,具体位置为:
Menuconfig -> Device Drivers -> Soundcard support -> Advanced Linux Sound Architecture,驱动层所添加的音频设备应该也会在这里出现。
由于我们的内核已经包含了对应音频设备的驱动,故不做深入。
有了Alsa内核驱动,我们还需要Alsa Lib和Alsa Util的支持,这3者的关系如下图所示:
Alsa Util
-------------
Alsa lib
-------------
Alsa Driver
Alsa Util是纯应用层的软件,相当于Alsa设备的测试程序,AlsaLib则是支持应用API的中间层程序。移植Alsa程序的顺序就是先后移植Driver,Lib,Util。
Alsa Lib移植
Lib移植不需要修改一丁点儿的源码,只需要重新编译lib以支持自己的平台。其源码可以从官网下载。编译过程如下:
1. Configure
./configure --host=arm-none-linux-gnueabi --prefix=/home/jeff/Downloads/alsa-lib/out/arm-linux/ --enable-static --enable-shared –-with-configdir=/usr/local/share
配置会先对此命令中的配置项进行检查,然后实现配置。需要注意的是:配置如果出错,未必一定报错,而是会采用默认的配置选项。几个重要的配置项:
1)--host指定编译器,这里指定为交叉编译器。注意运行本配置命令前务必保证编译器已经可以在Shell下直接执行了。
2)--prefix指定编译后文件的安装路径,后续的安装命令会在该目录中创建lib和include两个目录
3)--with-configdir指定conf文件的安装目录,该目录中对我们最有用的alsa.conf,此文件会被直接移植到你的目标系统中。
2. make
直接运行:
Make
3. make install
运行install有2点需要注意
1) install可能会在一些非用户目录安装一些文件,因此需要root权限
2) install也会执行一些编译命令,因此记得保证root权限下的交叉编译器同样可用。
Alsa Util移植
Util会生成用于播放,录制,配置音频的应用文件,对测试很有用处。编译过程如下:
1. Configure
./configure --host=arm-none-linux-gnueabi --prefix=/home/jeff/Downloads/alsa-lib/out/arm-linux/ --enable-static --enable-shared CFLAGS="-I$PWD/../out/arm-linux/include" LDFLAGS="-L$PWD/../out/arm-linux/lib -lasound" --disable-alsamixer --disable-xmlto --with-alsa-inc-prefix=/home/jeff/Downloads/alsa-lib/out/arm-linux/include
其中几个重要的配置项:
1)--host指定编译器,与lib的配置选项相同
2)--prefix指定编译后文件的安装路径,与lib的配置选项相同
3)CFLAGS用于编译时指定的编译选项,在这里将利用lib编译后生成的头文件,因此指定为该头文件所在目录
4)LDFLAGS用于编译时指定连接库文件,与CFLAGS同样状况,将lib编译生成的库文件指定出来,
5)--with-alsa-inc-prefix指定头文件目录,这个与3)类似,但必须指定,因为Configure程序会去该目录检查版本情况。如果不指定的话,则会直接去默认目录(即宿主机对应的alsalib目录中寻找,因此可能会有错误)
2. make
直接运行:
Make
必须编译成功。
网上有种方法教大家1)make clean 2)configure 3)makeinstall 这种方法确实不会报错,但其实是安装了预编译的可执行程序,该程序是基于x86体系的,无法用于嵌入式平台。
3. make install
lib和util安装到嵌入式平台
在目标板上,以下文件必须被拷贝至对应位置:
1) lib库文件,放在 /lib/中
2) conf文件,应放在/usr/local/share中,与编译时指定的目录相同
3) 应用文件,util能产生aplay,amixer,arecord可执行程序,这些文件可放在/usr/sbin中
4) 必须保证有/dev/snd/目录中,此目录下应包含以下几个设备文件(驱动),
controlC0, pcmC0D0c, pcmC0D0p, timer
如果这些文件已经在/dev/下,可拷贝到snd目录中。
运行测试程序
在我们当前的板子上存在着4个音频链路,分别是:MIC, Line in, Line out,Headphone Out。这4个链路都需要进行测试。
对于播放链路(Lineout, Headphone Out),相应的播放命令为:
aplay mysound.wav
对于录制链路(Mic,Line in),相应的录制命令为:
arecord myvoice.wav –fdat –d 5
其中-fdat指定以CD音质录制,-d代表录制5秒后退出。
命令amixer可以用来控制链路的通断以及相应配置。对于每一个系统,会有不一样的链路名称,通过amixer可以了解当前系统上所有链路的名称及状态。
命令amixer scontrols可以查看系统中的simple控制链路,相对应的还有完全版的控制链路(amixer controls),根据笔者的经验,这个simple控制链路足矣。
命令amixer scontent可以查看系统的所有simple链路极其当前状态。
以我目前的系统为例,为了让不同的链路工作,我们必须通过该命令进行设定。
Headphone Out
Amixer –c 0 sset ‘PCM’,0 100%,100% unmute playback
Line out
amixer –c 0 sset ‘Line’,0 100%,100% unmute playback
Line in
Amixer –c 0 sset ‘Right PGA Mixer Line1L’,0 100%,100% unmute cap
注意线路录音时应确定输入设备本身为有源设备,无源的Microphone是不能用来接线路输入的。
MIC
Amixer –c 0 sset ‘Right PGA Mixer Mic3L’,0 100%,100% unmute cap
- ALSA交叉编译与测试
- ALSA交叉编译与测试
- ALSA交叉编译与测试
- ALSA交叉编译与测试
- ALSA交叉编译与测试
- ALSA(lib和util)交叉编译与测试
- 【转】ALSA(lib和util)交叉编译与测试
- ALSA(lib和util)交叉编译与测试
- ALSA(lib和util)交叉编译与测试
- ALSA(lib和util)交叉编译与测试
- ALSA(lib和util)交叉编译与测试
- ALSA交叉编译与测试-应用程观音频驱动一
- ALSA交叉编译与测试-应用程观音频驱动二
- 交叉编译alsa lib
- 交叉编译alsa-lib
- alsa交叉编译
- 杂谈:交叉编译alsa
- alsa交叉编译
- 在windows 下安装nodejs 和npm
- EL表达式
- VisionMobile:电信运营商创新工具箱(八)第六章 不确定下的处理:探索式规划
- android 增加 在build.prop 中的ro.sf.hwrotation角度支持
- Android & Linux的suspent和resume执行流程
- ALSA交叉编译与测试
- oracle中TIMESTAMP与DATE比较
- 【编程 · 美工】jQuery实现卡片页
- ffmpeg 入门教程编译通过版 tutorial03.c(ffmpeg 0.8.11)
- 马云的语录汇总
- linux并发控制之读写自旋锁
- Android开发_如何调用系统默认浏览器访问
- C++使用模版实现按成员变量或者成员函数排序
- ALSA交叉编译与测试