ALSA交叉编译与测试

来源:互联网 发布:身价最高淘宝模特是谁 编辑:程序博客网 时间:2024/05/16 09:59

ALSA交叉编译与测试

2011-04-14 17:59 1718人阅读 评论(6)收藏 举报

目录(?)[+]

情况简介

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

 

原创粉丝点击