当前位置:网站首页>arm架构移植alsa-lib和alsa-utils一路畅通
arm架构移植alsa-lib和alsa-utils一路畅通
2022-07-25 13:04:00 【江麟】
目录
引言
- 基本上移植alsa-lib和alsa-utils的移植问题在这篇博文都能找到,如果没有在正文找到,请看目录中的疑难杂症
- 首先本文默认你的根文件系统是由网络引导的
获取源码
下载地址为https://www.alsa-project.org/main/index.php/Main_Page
最新版本是1.2.7.2,本文使用的版本是1.2.2
编译试错
- 注:这里并没有成功,只是慢慢复现我昨天遇到的坑,告诉读者我是怎么解决这些错误的,如果想一次成功请掠过编译试错这一步
新建文件夹(默认在刚才下载好的源码目录)
首先需要新建一些文件夹,以提供我们编译结果目录。
sudo mkdir /usr/share/arm-alsa
mkdir alsa-lib
mkdir alsa-utils
解压压缩包(默认在刚才下载好的源码目录)
tar -xvjf alsa-lib-1.2.2.tar.bz2
tar -xvjf alsa-utils-1.2.2.tar.bz2
编译alsa-lib
cd alsa-lib-1.2.2/
/* 注意这里的alsa-lib文件夹是我们新建文件夹那一步做的 */
./configure --host=arm-linux-gnueabihf --prefix=源码存放目录/alsa-lib --with-configdir=/usr/share/arm-alsa
make
sudo make install

如果出现这个错误,是因为 sudo 会切换到 root 用户下,但是此
时 root 用户下的环境变量中没有交叉编译器路径,因此会提示找不到“arm-linux-gnueabihf-gcc”,从而导致 libatopology.la 编译失败,按如下方法操作
sudo -s //切换到 root 用户
source /etc/profile //执行/etc/profile
make install //安装,此时已经工作在 root 下,因此不需要加“sudo”
su zuozhongkai //编译完成以后回原来的用户
编译alsa-utils
cd alsa-utils-1.2.2/
/*
--prefix=指定alsa-utils输出文件在哪个文件夹
--with-alsa-inc-prefix=由于alsa-utils依赖alsa-lib,所以指定alsa-lib的头文件目录
--with-alsa-prefix=由于alsa-utils依赖alsa-lib,所以指定alsa-lib的库目录
*/
./configure --host=arm-linux-gnueabihf --prefix=源码存放目录/alsa-utils --with-alsa-inc-prefix=源码存放目录/alsa-lib/include/ --with-alsa-prefix=源码存放目录/alsa-lib/lib/ --disable-alsamixer --disable-xmlto
make
sudo make install
复制alsa-lab和alsa-utils到开发板根目录
复制alsa-lab
cd alsa-lib //进入 alsa-lib
sudo cp lib/* 根文件系统目录/rootfs/lib/ -af
cd /usr/share/arm-alsa //进入 arm-alsa 目录,拷贝配置文件
mkdir 根文件系统目录/rootfs/usr/share/arm-alsa/
sudo cp * 根文件系统目录/rootfs/usr/share/arm-alsa/ -raf
复制alsa-utils
cd alsa-utils
sudo cp bin/* 根文件系统目录/rootfs/bin/ -rfa
sudo cp sbin/*根文件系统目录//rootfs/sbin/ -rfa
sudo cp share/* 根文件系统目录//rootfs/usr/share/ -rfa
打开开发板根文件系统中的/etc/profile 文件,加入以下内容
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf
在开发板上运行amixer工具测试
amixer --help

看样子是在32位系统上运行了64位的程序,且架构不兼容,我们去查看一下我们编译出来的文件属性
cd 源码存放目录/alsa-utils/bin
file amixer
这个文件是给x86架构编译的?
在ubuntu运行试一下,果然
./amixer --help

进入makefile看看交叉编译链是否配置成功
cd alsa-utils-1.2.2/
vi Makefile
看起来没问题啊,host指定正常
那我们想一下,我们执行安装的时候是用的sudo make install,因为生成文件有一些是需要在被系统保护的目录生成的,所以必须加sudo,sudo是管理员模式下运行的,那么我们管理员模式是否指定了交叉编译链目录?测试一下
编译成功
sudo -s
arm-linux-gnueabihf-gcc -v
果然没有,那么我们添加一下目录
export PATH=$PATH:交叉编译链目录/bin
清除刚才编译的文件目录
rm -rf alsa-lib/*
rm -rf alsa-utils/*
rm -rf /usr/share/arm-alsa/*
重新编译alsa-lib
cd alsa-lib-1.2.2/
make clean
/* 注意这里的alsa-lib文件夹是我们新建文件夹那一步做的 */
./configure --host=arm-linux-gnueabihf --prefix=源码存放目录/alsa-lib --with-configdir=/usr/share/arm-alsa
make
make install
随便检查一个输出文件,果然,arm架构,32位了
编译alsa-utils
cd alsa-utils-1.2.2/
make clean
/*
--prefix=指定alsa-utils输出文件在哪个文件夹
--with-alsa-inc-prefix=由于alsa-utils依赖alsa-lib,所以指定alsa-lib的头文件目录
--with-alsa-prefix=由于alsa-utils依赖alsa-lib,所以指定alsa-lib的库目录
*/
./configure --host=arm-linux-gnueabihf --prefix=源码存放目录/alsa-utils --with-alsa-inc-prefix=源码存放目录/alsa-lib/include/ --with-alsa-prefix=源码存放目录/alsa-lib/lib/ --disable-alsamixer --disable-xmlto
make
make install

按照复制alsa-lab和alsa-utils到开发板根目录这一步复制文件,即可成功。
疑难杂症
关于configure: error: No linkable libasound was found
1.如果出现以上错误,首先检查目录、命令是否无误
2.alsa-lib和alsa-utils不是同一个用户下编译的,这个坑昨天晚上我踩了,如果lib编译出来是x86运行的,那么alsa-utils配置就没问题,如果lib编译出来的是arm架构运行,那么alsa-utils配置就会出这个错误,保持在同一用户编译,由于可能输出文件夹需要超级用户模式,所以保持在root下编译,并且在root用户下配置一下交叉编译链,具体参考目录中的编译成功这一小节
关于单板运行不成功
/bin/amixer: line 1:ELF: not found
/bin/amixer: line 2: H
: not found
/bin/amixer: line 3: P: not found
/bin/amixer: line 4: syntax error: unexpected ")"
如果报了这个错误,只有一种可能,你编译出来的文件不是单板使用的而是x86使用的,在ubuntu上找到这个文件,file一下,目录是alsa-utils编译目标目录/bin/amixer,你一定是如下的:
参考目录中的编译成功小节即可解决
边栏推荐
- 迁移PaloAlto HA高可用防火墙到Panorama
- Pytorch creates its own dataset and loads the dataset
- 程序员成长第二十七篇:如何评估需求优先级?
- 零基础学习CANoe Panel(13)—— 滑条(TrackBar )
- Business visualization - make your flowchart'run'(3. Branch selection & cross language distributed operation node)
- ECCV 2022 | climb to the top semantickitti! Semantic segmentation of LIDAR point cloud based on two-dimensional prior assistance
- [ai4code final chapter] alphacode: competition level code generation with alphacode (deepmind)
- 卷积神经网络模型之——LeNet网络结构与代码实现
- Summary of Niuke forum project deployment
- 我的创作纪念日
猜你喜欢

零基础学习CANoe Panel(16)—— Clock Control/Panel Control/Start Stop Control/Tab Control

如何理解Keras中的指标Metrics

Shell common script: check whether a domain name and IP address are connected

Business visualization - make your flowchart'run'(3. Branch selection & cross language distributed operation node)

MLX90640 红外热成像仪测温传感器模块开发笔记(五)

Eccv2022 | transclassp class level grab posture migration

Emqx cloud update: more parameters are added to log analysis, which makes monitoring, operation and maintenance easier

深度学习的训练、预测过程详解【以LeNet模型和CIFAR10数据集为例】

0715RHCSA

word样式和多级列表设置技巧(二)
随机推荐
[ai4code final chapter] alphacode: competition level code generation with alphacode (deepmind)
Cyberspace Security penetration attack and defense 9 (PKI)
[review SSM framework series] 15 - Summary of SSM series blog posts [SSM kill]
Azure Devops(十四) 使用Azure的私有Nuget仓库
需求规格说明书模板
[机器学习] 实验笔记 – 表情识别(emotion recognition)
录制和剪辑视频,如何解决占用空间过大的问题?
错误: 找不到或无法加载主类 xxxx
Emqx cloud update: more parameters are added to log analysis, which makes monitoring, operation and maintenance easier
Pytorch creates its own dataset and loads the dataset
Date and time function of MySQL function summary
State mode
【AI4Code】CodeX:《Evaluating Large Language Models Trained on Code》(OpenAI)
业务可视化-让你的流程图'Run'起来(3.分支选择&跨语言分布式运行节点)
VIM tip: always show line numbers
【CSDN 年终总结】结束与开始,一直在路上—— “1+1=王”的2021总结
牛客论坛项目部署总结
Zero basic learning canoe panel (16) -- clock control/panel control/start stop control/tab control
Docker学习 - Redis集群-3主3从-扩容-缩容搭建
0717RHCSA