嵌入式Linux平台Alsa库移植
- 1. Alsa-lib
- 2. Alsa-utils
- Aplay播放避坑
1. Alsa-lib
alsa-lib下载地址:https://www.alsa-project.org/files/pub/lib/
这里使用的版本是alsa-lib-1.0.29
下载完成并解压,进入alsa-lib-1.0.29目录
编译配置如下:
./configure --host=arm-linux --prefix="" --with-versioned=no
make
make install DESTDIR="$PWD/_install"
–host指定了交叉编译工具
–prefix设置为空
–with-versioned=no 注意:该项必须配置,否则后续aplay播放会有问题!
DESTDIR 指定了库和配置文件的安装位置
我这里只测试了aplay功能,需要用到的库及配置文件如下:
lib/libasound.so
lib/libasound.so.2
lib/libasound.so.2.0.0
share/alsa/alsa.conf
share/alsa/cards/aliases.conf
share/alsa/init/00main
share/alsa/init/default
share/alsa/pcm/default.conf
share/alsa/pcm/dmix.conf
share/alsa/pcm/dsnoop.conf
以上文件拷贝至目标板即可
2. Alsa-utils
alsa-utils下载地址:https://www.alsa-project.org/files/pub/utils/
这里使用与alsa-lib相同的版本:alsa-utils-1.0.29
下载解压后进入alsa-utils-1.0.29目录,编译配置如下:
./configure \--host=arm-linux \--prefix="" \CFLAGS="-I$PWD/../alsa-lib-1.0.29/_install/include/" \LDFLAGS="-L$PWD/../alsa-lib-1.0.29/_install/lib -lasound" \--disable-alsamixer \--disable-xmlto \make
make install DESTDIR="$PWD/_install"
值得注意的是:需要指定刚才编译的alsa-lib相关库的路径
编译完成后,我们在_install/bin目录下就得到了aplay、amixer等相关工具,
在_install/share/sounds/alsa目录下得到了一些wav音频测试文件
将其拷贝至目标板即可
Aplay播放避坑
使用Aplay播放wav音频时,可能有人和我一样会遇到下面的报错:
not enough memory
或者
Can't use period equal to buffer size
查看aplay源码发现在set_params(void)中调用
snd_pcm_hw_params_get_period_size(params, &chunk_size, 0);
出现问题,无法准确获取chunk_size
解决方案就是在编译alsa-lib时:
.configure配置中加入:–with-versioned=no
希望我的经验能帮到你!