【踩坑日记】移植 alsa-utils 到开发板出现 /bin/amixer: line 5: syntax error: unexpected “)“ 的解决方案


本文主要介绍如何解决在开发板上使用 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,并输出信息,证明可以正常使用。

在这里插入图片描述


参考链接

  • 18
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

__Witheart__

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值