1.下载源码,源码路径:https://www.alsa-project.org/files/pub/lib/
2.配置Makeflie文件,如交叉编译工具链路径,编译固件输出路径,模块使能,是否需要生成静态库等;
# 1. 进入 alsa-lib 源码目录
cd /home/kfb/workplace/rk3506/app/alsa_test/Lib/alsa-lib-1.2.12
# 2. 清理旧配置和编译结果
make distclean
# 3. 重新配置(启用静态库),每一行代码的详细解释看下文。
./configure \
--host=arm-buildroot-linux-gnueabihf \
--prefix=$(pwd)/output \
--disable-python \
--disable-topology \
--disable-mixer \
--disable-rawmidi \
--disable-seq \
--disable-timer \
--disable-hwdep \
--disable-tests \
--disable-utils \
--enable-static \
--disable-shared \
CC=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-gcc \
CXX=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-g++ \
AR=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-ar \
RANLIB=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-ranlib \
STRIP=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-strip
# 4. 编译
make -j4 V=1
# 5. 安装到 output
make install
3.make -j4;
4.make install(这一步才会生成对应的静态库文件);

5.如果报以下类似路径错误,往下看:

错误原因:编译alsa库时,路径已经强制定死,烧录目标板时找不到该路径。
修改路径--prefix=/usr \ 并重新编译即可:
# 1. 进入 alsa-lib 源码目录
cd /home/kfb/workplace/rk3506/app/alsa_test/Lib/alsa-lib-1.2.12
# 2. 清理旧配置和编译结果
make distclean
# 3. 重新配置(启用静态库),每一行代码的详细解释看下文。
./configure \
--host=arm-buildroot-linux-gnueabihf \
--prefix=/usr \
--disable-python \
--disable-topology \
--disable-mixer \
--disable-rawmidi \
--disable-seq \
--disable-timer \
--disable-hwdep \
--disable-tests \
--disable-utils \
--enable-static \
--disable-shared \
CC=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-gcc \
CXX=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-g++ \
AR=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-ar \
RANLIB=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-ranlib \
STRIP=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-strip
# 4. 编译
make -j4 V=1
# 5. 安装到当前路径install,没有会自动创建
make install DESTDIR=$PWD/install
总体作用总结
这条 configure命令的整体效果是:
1.交叉编译 alsa-lib
2.只生成静态库 libasound.a
3.裁剪掉不必要模块
4.安装到源码目录下的 output/
5.完全使用 Buildroot 提供的 ARM 工具链。
configure配置相关说明
“./configure \”:用于检测系统环境、工具链、依赖库,并生成 Makefile。
“--host=arm-buildroot-linux-gnueabihf \”:指定目标平台(host),编译出来的程序将在 ARM + glibc + hard float 架构上运行。
“--prefix=$(pwd)/output \”:设置编译输出路径,$(pwd)表示当前源码目录。
“--disable-python \”:禁用python,避免引入 Python 头文件和运行时依赖。
“--disable-topology \”:禁用 ALSA topology 模块,以此类推禁用不需要的模块。
“--enable-static \”:重点,我是要编译静态库,所以要使能。
“CC=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-gcc \”:强制指定交叉工具链(非常重要)
“CXX=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-g++ \”:指定 C++ 编译器,alsa-lib 主要是 C,但 configure 仍会检测 C++ 工具链。
“AR=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-ar \”:指定归档工具,用于生成 .a静态库。
“RANLIB=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-ranlib \”:指定 ranlib,用于生成静态库的索引(symbol index)。
“STRIP=/home/kfb/workplace/rk3506/arm-buildroot-linux-gnueabihf/bin/arm-buildroot-linux-gnueabihf-strip”:指定 strip,用于去掉调试符号(在 make install-strip时使用)。
异常排查思路
make编译后没有固件输出,排查方法,当前目录下会有一个config.log,可以查看编译情况具体是哪里有问题。
909

被折叠的 条评论
为什么被折叠?



