OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 3896|回复: 0

给stm32mp157装上alsa-lib

[复制链接]

4

主题

9

帖子

0

精华

初级会员

Rank: 2

积分
199
金钱
199
注册时间
2016-1-27
在线时间
18 小时
发表于 2020-12-5 12:30:37 | 显示全部楼层 |阅读模式
    之前用busybox制作了根文件系统,替换掉了板子原来的根文件系统,busybox提供的只是基本的工具,还有基本的库,如果我们想要其他功能,
比如使用 aplay 这样的工具,或者我们写了使用 alsa-lib 的应用程序想在板子上跑,是跑不起来的,这时候就需要给板子装上 alsa-lib,所谓的第三方库。
安装第三方库的步骤基本上是:
    下载源码
    交叉编译
    拷贝编译好的库到相应的板子上

    在这里记录本人安装 alsa-lib 的一些步骤。安装 alsa-lib 具体步骤如下

1.打开 alsa 的官网,https://www.alsa-project.org,点击页面左边的 Download

1.JPG

跳转到另一个页面后,可以看到 alsa 包含的不只是 alsa-lib ,还有 Utilities (alsa-utils)
我们需要的是 alsa-lib 和 alsa-utils ,前者就是 alsa 库,后者包含了 aplay amixer 等工具。

2.JPG

点击 Library (alsa-lib) ,跳转到另一个页面后,可以看到有很多版本可以选,我之前接触的是
1.1.5 版本的,所以就下载这个版本的,如下图

3.JPG

下载完成之后返回到之前页面,点击 Utilities (alsa-utils) ,然后也选择 1.1.5 ,注意这里要和
alsa-lib 的版本匹配,alsa-utlis 是基于 alsa-lib 开发的。

这样就得到了 alsa-lib-1.1.5.tar.bz2 和 alsa-utils-1.1.5.tar.bz2,传到 ubuntu。

2.交叉编译 alsa-lib

(1) 解压  tar xjvf alsa-lib-1.1.5.tar.bz2,然后解压完的目录


使用 ./configure 配置,生成 Makefile,一般来说,linux 成熟的软件,从源码编译,
都是先用 ./configure 生成 Makefile

./configure --host=arm-none-linux-gnueabihf --prefix=/home/liu/lib/arm-lib/alsa-lib

注意:--host 指定交叉编译器的前缀,这里有个小细节,之前在编译内核的时候,
指定交叉编译器的前缀,最后是有"-",比如 arm-none-linux-gnueabihf-,但是这里
不用,为 arm-none-linux-gnueabihf,如果各位有机会自己尝试一下。--prefix 就是
指定库要安装在哪个目录。

(2) 执行

make

(3) make install

经过上面三个步骤,alsa-lib 就编译好了,查看 /home/liu/lib/arm-lib/alsa-lib 果然多出了
文件

6.JPG

3.交叉编译 alsa-utils

(1) 解压  tar xjvf alsa-utils-1.1.5.tar.bz2  

             cd alsa-utils-1.1.5/

(2)使用 configure 配置

./configure --prefix=/home/liu/lib/arm-lib/alsa-lib --host=arm-none-linux-gnueabihf --with-alsa-inc-prefix=/home/liu/lib/arm-lib/alsa-lib/include --with-alsa-prefix=/home/liu/lib/arm-lib/alsa-lib/lib --disable-xmlto --disable-alsamixer --disable-nls

可以看到配置 alsa-utils 更麻烦一些,因为 alsa-utils 基于 alsa-lib 开发,所以需要制定alsa-lib头文件的位置等。
--with-alsa-inc-prefix 表示 alsa-lib 头文件所在目录,--with-alsa-prefix 表示 alsa-lib 安装 的目录,后面的 --disable-xmlto

--disable-alsamixer --disable-nls 则是避免编译错误,如果没有这三个选项,会编译出错,目前看来加上了这三个选项
没有影响到后续的功能需求。

(3)make

make install

安装成功

3.拷贝编译好的库和工具到板子上

这里使用的方法就比较多了,可以使用 tftp , ssh,或者nfs

我习惯使用挂载 nfs 的方式拷贝文件。

(1) 把库拷贝到 nfs 目录中

我的目录是 ~/nfs_root

先创建文件夹
mkdir -p ~/nfs_root/lib/alsa

拷贝库到该目录中

cp -rfd /home/liu/lib/arm-lib/alsa-lib/lib/* ~/nfs_root/lib/alsa/

拷贝 bin 文件,就是 aplay 等到 nfs 目录中,

mkdir -p ~/nfs_root/lib/alsa/bin

cp -rfd /home/liu/lib/arm-lib/alsa-lib/bin ~/nfs_root/lib/alsa/bin/

(2)板子挂载 nfs ,拷贝 ubuntu nfs 目录中的文件到板子上

板子上执行

ifconfig eth0 192.168.1.150  #配个 ip
mkdir /mnt/mtd
mount -o nolock 192.168.1.155:/home/liu/nfs_root /mnt/mtd  #挂载nfs 到板子本地目录,192.168.1.155 是 ubuntu 的ip,/home/liu/nfs_root 是 ubuntu 的 nfs 目录
现在 /mnt/mtd 目录中的文件,就等同于 ubuntu /home/liu/nfs_root 中的文件

cp /mnt/mtd/lib/alsa/*.so* /usr/lib
cp /mnt/mtd/lib/alsa/*.la /usr/lib
mkdir /usr/lib/pkgconfig
cp /mnt/mtd/lib/alsa/pkgconfig/* /usr/lib/pkgconfig

以上步骤拷贝的是库,接下来拷贝 bin 文件
cp -rfd /mnt/mtd/lib/alsa/bin/ /usr/bin


(3)拷贝工作完成,接下来就是在板子上使用工具 aplay 等,
来验证我们安装的库正不正确

执行 aplay -l  报错,如下

9.JPG

错误是提示找不到 alsa.conf 文件。到网上查找答案,意思是,交叉编译的时候已经确定了
alsa.conf 所在的位置,所以也要在板子上在相应的文件创建一致的目录,再将 alsa.conf 拷贝
到板子上该目录中

mkdir -p /home/liu/lib/arm-lib/alsa-lib/share/alsa

再将ubuntu 上我们交叉编译得到的 alsa.conf 拷贝到 板子上 /home/liu/lib/arm-lib/alsa-lib/share/alsa

再次执行 aplay -l 没有报错了

10.JPG

(4)播放一首音乐看看

先用 amixer 设置以下

amixer -c 0 cset name='PCM Playback Switch' on

amixer -c 0 cset name='PCM Playback Volume' 50

aplay -c 2 -r 44100 -f S16_LE -Dhw:0,0 、/test/Beyond\ -\ 无悔这一生.wav

完美 (本来拍了个视频,发现不好上传)

总结:以上就是安装 alsa-lib 的一些步骤,也可以说基本上安装第三方库都是这个套路,
可以看到多多少少还是有些问题,如运行可能出现问题,都需要自己去解决。当然后续
如果使用 buildroot 这类集成的环境,就不会出现这样的问题,不过还是自己体验一下安装
第三方库,才知道具体的细节。


正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2024-5-29 14:03

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表