1. 获得alsa-lib-1.2.3的源码. 可以进入alsa官网下载:AlsaProject
安装编译器,执行 sudo apt install gcc-arm-linux-gnueabi
用于测试alsa的应用程序源码, 我使用的下面这位博友的代码. 非常感谢这位博友将代码分享出来.
Linux下使用alsa-lib库完成音频开发: 实现放音和录音(从声卡获取PCM数据保存、向声卡写PCM数据输出) - 腾讯云开发者社区-腾讯云
2. 进入alsa-lib-1.2.3源码目录进行configure. 执行命令如下
./configure --host=arm-linux-gnueabi --build=arm-linux --enable-static --enable-shared=no --prefix=/home/joker/linux_learn/note/alsa/alsa_app/alsa-lib-1.2.3/opt --disable-old-symbols
prefix一项可以自由设置. 这里我将alsa_lib编译为静态库.
2.1 编译alsa_lib,执行下列命令.
make
make install
出现 alsa-lib-1.2.3/src/timer/timer.c:151: undefined reference to `snd_timer_open_symbols' 错误:
打开timer.c文件, 将snd_timer_open_symbols()函数注释掉就可以了.
3.进入alsa-lib-1.2.3目录, 将alsa测试程序源码playback_ok.c文件也复制到该目录,
静态编译执行:
arm-linux-gnueabi-gcc playback_ok.c opt/lib/libasound.a -ldl -lpthread -lm --static -I/home/joker/linux_learn/note/alsa/alsa_app/alsa-lib-1.2.3/opt/include
4.处于alsa-lib-1.2.3目录内, 由于prefix设置为alsa-lib-1.2.3/opt, 所以alsa-lib安装在此目录内.
由于prefix设置不恰当的缘故, 需在开发板创建对应目录. 执行:
mkdir -p /home/joker/linux_learn/note/alsa/alsa_app/alsa-lib-1.2.3/opt
4.1 处于alsa-lib-1.2.3源码目录内, 将输出目录opt的内容复制到 开发版的 /home/joker/linux_learn/note/alsa/alsa_app/alsa-lib-1.2.3/opt 目录即可.
其实只需要复制
opt/share/alsa/alsa.conf,
opt/share/alsa/cards/aliases.conf,
opt/share/alsa/pcm/default.conf 这三个文件即可.
5. 这样只需要将步骤3生成的a.out文件复制到开发板,即可正常运行.