asla架构和alsa-lib音频库的移植

匿名 (未验证) 提交于 2019-12-03 00:19:01

转载地址:https://blog.csdn.net/reille/article/details/5845913

alsa 是在LINUX出现比较晚的音频处理库,主要是针对原有的OSS的库进行改进.性能更好,支持多个播放源等.但相应的,增加的编程的复杂性.





【ALSA的体系结构】

http://www.alsa-project.org/


主要跟编程相关是:

ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.22.tar.bz2

ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.22.1.tar.bz2

ftp://ftp.alsa-project.org/pub/firmware/alsa-firmware-1.0.20.tar.bz2

ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.22.tar.bz2

ftp://ftp.alsa-project.org/pub/oss-lib/alsa-oss-1.0.17.tar.bz2

其中alsa-driver,alsa-firwware是内核开发者所接触的东西,对于已经正常运行硬件,通常意味着这一部分已经整合到内核当中,无需修改.而alsa-utils主要是测试一些小工具.

因此对于一个应用程序开发者,或者嵌入式应用开发者,接触到主要是alsa-lib编译出来的库libasound.



【Linux ALSA 驱动测试】

以下是我在RHEL 5上测试ALSA的结果,在ARM或MIPS开发板上类似

如果安装ALSA,在/proc会看到相应设备:
用cat /proc/asound/devices








正常情况下,在你的/dev/snd会看到如下设备结点(有例外, 就是内核驱动调整了结点位置)
用ls -l /dev/snd

[root@hxy alsa-lib-1.0.22]# ls -l /dev/snd
total 0







通常桌面版已经安装了alsa-utils.可以执行一下aplay -h,测试是否输出.如果可以来播入一下wav文件来测试整个环境是否正常工作.

以下是一些用alsa-utils测试样例
















【嵌入式LINUX下 alsa库移植】


在ARM-LINUX/MIPS LINUX下移植ALSA库,首先保证设备驱动结点正确无误.

如果没有这些节点,可用下面命令创建:


然后主要移植 alsa-lib

alsa-lib的移植.
解压 tar xvjf alsa-lib-1.0.22.tar.bz2
cd alsa-lib-1.0.22
生成Makefile


在这里要注意 --with--configdir的选项.它将影响 include/config.h中的 ALSA_CONFIG_DIR 目录.
它默认是你的--prefix目录.这样在嵌入式交叉编译将是一个桌面机的路径,在libasoud.so运行.会提示,如果出来这个提示,一般都是ALSA_CONFIG_DIR路径错误造成的.

aplay: main:546: audio open error: No such file or directory


--with-plugindir也是同样道理了.它是设为 ALSA_PLUGIN_DIR 宏.




开发板发布注意:
在开发板上发布alsa库.除了libasound.so库以外,必须还要把 alsa.conf发布到板上--with-configdir所指向目录下的alsa目录,否则还是会报"audio open error: No such file or directory".
这个文件可以在make install后在你安装目录下的share找到alsa目录,把这个目录整个拷贝到开发板即可.

alsa-utils移植


生成Makefile


注意这里LDFLAGS是必须,否则会找不到libasound.另外 alsamixer 是一个ncurses程序,基本上在嵌入式终端上很难移植.所以这里取消掉.--disable-xmlto也是因为找不到库.

编译 make
安装 make install

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!