文章目录
本文主要介绍如何解决在开发板上使用 amixer 的问题,包括编译和安装 alsa-utils 及其依赖的 alsa-lib。
1 问题描述
在移植 alsa-utils 后,尝试在开发板中使用 amixer,运行以下命令:
amixer --help
出现如下错误信息:
/ # amixer --help
/bin/amixer: line 5: syntax error: unexpected ")"
1.1 错误分析
通过使用 file
命令查看 amixer 的文件类型,输入:
file ./bin/amixer
输出结果为:
./bin/amixer: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, BuildID[sha1]=834320e141830a0b11ba59b63027f80fe7c87e86, for GNU/Linux 3.2.0, with debug_info, not stripped
可以看出,编译出来的 amixer 是 x86 架构的,无法在 ARM 架构的开发板上运行。
2 解决方案
2.1 重新编译 alsa-lib
由于 alsa-utils 依赖于 alsa-lib,因此需要检查 alsa-lib 的文件架构。发现 alsa-lib 也不是 ARM 架构,需重新编译。
编译问题的原因是环境变量因用户切换而丢失,导致使用了系统默认的 x86 编译器。解决方法是从头到尾使用 root 身份进行编译,并刷新环境变量。
2.1.1 切换到 root 用户
使用以下命令切换到 root 用户:
sudo -s
2.1.2 检查编译器路径
确保在 /etc/profile
中有编译器的路径,输入以下命令查看:
cat /etc/profile
如果没有编译器的地址,则添加如下内容:
# gcc交叉编译链
export PATH=$PATH:/usr/local/arm/gcc-linaro-4.9.4-2017.01-x86_64_arm-linux-gnueabihf/bin
2.1.3 刷新环境变量
运行以下命令刷新环境变量:
source /etc/profile
2.1.4 配置与编译 alsa-lib
进入 alsa-lib 源码目录:
cd alsa-lib-1.2.2/
配置 alsa-lib:
./configure --host=<目标架构> --prefix=<安装路径> --with-configdir=<配置文件路径>
- <目标架构>:arm-linux-gnueabihf
- <安装路径>:比如 /home/zuozhongkai/linux/IMX6ULL/tool/alsalib
- <配置文件路径>:/usr/share/arm-alsa
进行编译:
make
进行安装:
make install
alsa-lib 安装完成后,可以再看一下文件架构,确保是 ARM 架构。
2.2 安装 alsa-utils
2.2.1 复制 alsa-lib 到开发板
将安装完成的 alsa-lib 文件拷贝到开发板的根文件系统:
cd alsa-lib
sudo cp lib/* /home/zuozhongkai/linux/nfs/rootfs/lib/ -af
cd /usr/share/arm-alsa
sudo cp * /home/zuozhongkai/linux/nfs/rootfs/usr/share/arm-alsa/ -raf
2.2.2 进入 alsa-utils 源码目录
进入 alsa-utils 源码目录:
cd alsa-utils-1.2.2/
2.2.3 配置 alsa-utils
配置 alsa-utils:
./configure --host=<目标架构> --prefix=<安装路径> --with-alsa-inc-prefix=<ALSA头文件路径> --with-alsa-prefix=<ALSA库文件路径> --disable-alsamixer --disable-xmlto
- <目标架构>:arm-linux-gnueabihf
- <安装路径>:这里我选择 /home/witheart/linux/tool/alsa-utils
- <ALSA头文件路径>:在刚刚安装完成的 alsa-lib 库里面找到头文件路径,我这里是 /home/witheart/linux/tool/alsa-lib/include/
- <ALSA库文件路径>:同上,/home/witheart/linux/tool/alsa-lib/lib/
举例:
./configure --host=arm-linux-gnueabihf --prefix=/home/witheart/linux/tool/alsa-utils --with-alsa-inc-prefix=/home/witheart/linux/tool/alsa-lib/include/ --with-alsa-prefix=/home/witheart/linux/tool/alsa-lib/lib/ --disable-alsamixer --disable-xmlto
2.2.4 编译与安装
编译:
make
安装 alsa-utils:
make install
2.2.5 验证 amixer 架构
在 Ubuntu 中查看 amixer 的架构:
file amixer
输出结果应为:
amixer: ELF 32-bit LSB executable, ARM, EABI5 version 1 (SYSV), dynamically linked, interpreter /lib/ld-linux-armhf.so.3, for GNU/Linux 2.6.31, BuildID[sha1]=0ea06b684b9c5e95c1de7f63771332d4f217587b, with debug_info, not stripped
可以看出,此时编译出来的软件就是 ARM 架构的。
2.3 拷贝 alsa-utils 到开发板
将安装完成的 alsa-utils 文件拷贝到开发板的根文件系统:
cd alsa-utils
sudo cp bin/* /home/zuozhongkai/linux/nfs/rootfs/bin/ -rfa
sudo cp sbin/* /home/zuozhongkai/linux/nfs/rootfs/sbin/ -rfa
sudo cp share/* /home/zuozhongkai/linux/nfs/rootfs/usr/share/ -rfa
在开发板根文件系统中的 /etc/profile
文件中加入如下内容:
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf
3 结果
在开发板上成功运行 amixer,并输出信息,证明可以正常使用。