最近在忙于一个项目,在嵌入式开发板(CS1800)上用alsa-lib捕获摄像头音频。以下是一点心得,写出来既防止自己日后忘记,也希望能给从事这方面的同志们一点帮助。
一、确保设备正确安装
当开发板上捕获到有摄像头的音频设备时,会在/dev目录下创建三个设备(这个可能要视情况而定,我的实验是三个设备),即pcmC0D0c、controlC0、timer。
二、创建目录/dev/snd,并建立相应符号链接
这一步具体原因我自己也不是很清楚,可能alsa-lib默认访问设备节点时,是在这个目录里面吧。
创建符号链接
ln -s /dev/pcmC0D0c /dev/snd/pcmC0D0c
ln -s /dev/controlC0 /dev/snd/controlC0
ln -s /dev/timer /dev/snd/timer
三、alsa-lib的移植
1、 解压 tar xvjf alsa-lib-1.0.22.tar.bz2
cd alsa-lib-1.0.22
./configure --host=arm-linux CC=arm-linux-gcc --prefix=/home/thirdlib --enable-static --enable-shared --disable- python --with-configdir=/usr/local/share --with-plugindir=/usr/local/lib/alsa_lib
在这里要注意 --with--configdir的选项。它将影响ALSA_CONFIG_DIR 目录。它默认是你的--prefix目录。在libasoud.so运行时
会报以下错误:
ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM default(此处为alsa-lib打印)
audio open error: No such file or directory(此处为应用层打印)
一般都是ALSA_CONFIG_DIR路径错误造成的。
--with-plugindir也是同样的道理,它是设为 ALSA_PLUGIN_DIR变量。
这一步过后,将会生成Makefile。
2、编译安装alsa-lib
make;make install
3、拷贝share目录到开发板上
在上面设置了 --with-configdir,那么当libasoud.so运行时就会在/usr/local/share目录下去找相应的配置文件。所以我们还需要将
这个配置文件拷贝到share目录下。
该配置文件就是在make install后,在安装目录下(即/home/thirdlib)的share/alsa目录,alsa.conf文件。所以我们将share这个
目录整个拷贝到开发板上的/usr/local/share目录中即可。
到此,大功告成。