当前位置: 首页 > news >正文

alsa-lib和alsa-utils移植

目录

1.  ALSA的体系结构

2.静态编译

2.1 alsa-lib编译

2.2 alsa-utils编译

3. 动态编译

3.1 alsa-lib

3.2 alsa-utils

4. 参考


1.  ALSA的体系结构

官方主页  AlsaProject
主要跟编程相关是

  •   alsa-lib. ALSA 应用库(最常用)
    • ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.22.tar.bz2
  • alsa-driver 一些常见芯片的ALSA驱动代码,一般内核会集成.
    • ftp://ftp.alsa-project.org/pub/driver/alsa-driver-1.0.22.1.tar.bz2
  •   alsa-firmware 一些DSP或ASIC的专用的微码(运在芯片之上,启动时由LINUX装入到硬件中).
    • ftp://ftp.alsa-project.org/pub/firmware/alsa-firmware-1.0.20.tar.bz2
  •   alsa-utils 一般ALSA小的测试工具.如aplay/arecord 播放和录音小程序.
    • ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.22.tar.bz2
  • alsa-oss 用alsa接口模拟旧的oss接口.
    • ftp://ftp.alsa-project.org/pub/oss-lib/alsa-oss-1.0.17.tar.bz2

2.静态编译

2.1 alsa-lib编译

    打开READEME、INSTALL文件,大致浏览一遍 需要先 基本流程就是 ./configure && make && make_install,先后完成配置、编译和安装工作。

(1)首先 进行配置 主要指定 主机和交叉编译工具链

      ./configure --host=aarch64-linux --prefix=/mnt/d/work/code/alsa-lib-1.2.6.1/tmp --enable-shared=yes --enable-static=no --disable-python CC=/mnt/d/work/code/tx511_mpw/prebuilts/host/gcc/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc

解释:

     --prefix:后面install的目录,也就是编译出来后的文件所存放的目录。绝对路径。

     --enable-shared=yes --enable-static=no:动态编译还是静态编译,只能选择一个,必须选择

     --host:主机

     CC:交叉编译工具链

以下两个还未验证:

--with-configdir=/usr/local/share
--with-plugindir=/usr/local/lib/alsa_lib

     --with--configdir:

 在这里要注意 --with--configdir的选项.它将影响 include/config.h中的 ALSA_CONFIG_DIR 目录.

 它默认是你的--prefix目录.这样在嵌入式交叉编译将是一个桌面机的路径,在libasoud.so运行.会提示,如果出来这个提示,一般都是ALSA_CONFIG_DIR路径错误造成的.

 ALSA lib pcm.c:2145:(snd_pcm_open_noupdate) Unknown PCM default

aplay: main:546: audio open error: No such file or directory


--with-plugindir: 也是同样道理了.它是设为 ALSA_PLUGIN_DIR 宏.
 (2)编译 make
 (3)安装 make install

开发板发布注意:

在开发板上发布alsa库.除了libasound.so库以外,必须还要把 alsa.conf发布到板上--with-configdir所指向目录下的alsa目录,否则还是会报"audio open error: No such file or directory".
这个文件可以在make install后在你安装目录下的share找到alsa目录,把这个目录整个拷贝到开发板即可.     

2.2 alsa-utils编译

打开READEME、INSTALL文件,大致浏览一遍 需要先 基本流程就是 ./configure && make && make_install,先后完成配置、编译和安装工作。

(1)首先 进行配置 主要指定 主机和交叉编译工具链

./configure CC=/mnt/d/work/code/tx511_mpw/prebuilts/host/gcc/gcc-arm-10.2-2020.11-x86_64-aarch64-none-linux-gnu/bin/aarch64-none-linux-gnu-gcc LDFLAGS="-L/mnt/d/work/code/alsa-lib-1.2.6.1/tmp/lib -lasound -latopology" --host=aarch64-linux --prefix=/mnt/d/work/code/alsa-utils-1.2.6/tmp --enable-static     CFLAGS="-I/mnt/d/work/code/alsa-lib-1.2.6.1/tmp/include"    --disable-xmlto --disable-alsamixer --with-libiconv-prefix=/mnt/d/work/code/alsa-lib-1.2.6.1/tmp

解释:

      --prefix:后面install的目录,也就是编译出来后的文件所存放的目录。绝对路径。

      --host:主机

     CC:交叉编译工具链

     --disable-alsamixer:表示不编译生成alsamixer这个应用程序,因为该程序依赖于ncurses这个图形界面库,目前我们对于该库还不能交叉编译,故放弃

    LDFLAGS: 链接库所在位置,主要是libasound等

    CFLAGS: 所需头文件。

 遇到问题:

(1.1)mv: cannot stat `t-ja.gmo': No such file or directory

        方法一:sudo apt-get install gettext

        方法二:创建改文件。

(1.2)configure: error: No linkable libasound was found.

         前面编译alsa-lib用的是静态编译,此处需要动态,所以需要把alsa-lib动态编译一次。

(2)make

(3)sudo make install

3. 动态编译

3.1 alsa-lib

      注意 alsa-lib 编译过程中会生成一些配置文件,而这些配置信息的路径都是绝对路径,因此
为了保证 ubuntu 和开发板根文件系统中的路径一致!我们需要在 ubuntu 和开发板中各创建一
个路径和名字完全一样的目录,这里我们都创建一个/usr/share/arm-alsa 目录,ubuntu 中创建命
令如下:

cd /usr/share          //进入 ubuntu 的/usr/share 目录
sudo mkdir arm-alsa    //创建 arm-alsa 目录
      最后在开发板根文件系统中也创建一个 /usr/share/arm-alsa 目录,命令如下:
mkdir /usr/share/arm-alsa -p     //开发板根文件系统创建 arm-alsa 目录

      这样 ubuntu 和开发板根文件系统都有一个“/usr/share/arm-alsa”目录,我们交叉编译的时候就不怕存在引用绝对路径了,因为 ubuntu 和开发板中的配置文件路径都是一模一样的。由于 alsa-utils 要用到 alsa-lib 库,因此要先编译 alsa-lib 库。alsa-lib 就是 ALSA 相关库文件,应用程序通过调用 ALSA 库来对 ALSA 框架下的声卡进行操作。先创建一个名为“alsa-lib”的目录用来保存 alsa-lib 的编译结果,然后将 alsa-lib-1.2.2.tar.bz2 拷贝到 ubuntu 中并解压,命令如下:

tar -vxjf alsa-lib-1.2.2.tar.bz2 //解压 alsa-lib
      解压完成以后就会得到一个名为“ alsa-lib-1.2.2 ”的文件夹,这个就是 alsa-lib 的源码。进入
alsa-lib-1.2.2 目录,然后配置并编译,命令如下:
cd alsa-lib-1.2.2/ //进入 alsa-lib 源码目录
./configure --host=arm-linux-gnueabihf --prefix=/data/yangguoyu/code/tool/alsa-lib --with-configdir=/usr/share/arm-alsa CC=交叉编译工具链的位置 //配置

      注意, “--with-configdir”用于设置 alsa-lib 编译出来的配置文件存放位置,这里设置为前面创建的“/usr/share/arm-alsa”目录。配置完成以后就可以编译了,命令如下:

make               //编译
sudo make install  //安装
      编译完成以后前面创建的“ alsa-lib ”目录就会保存相应的编译结果。
      ubuntu /usr/share/arm-alsa 目录下的内容如下 所示

      将中lib 目录下的所有文件拷贝到开发板根文件系统的/usr/lib 目录下,将/usr/share/arm-alsa 目录下的所有文件拷贝到开发板的/usr/share/arm-alsa 目录下,命令如下:

cd alsa-lib                //进入 alsa-lib
sudo cp lib/* /xxx/rootfs/lib/ -af
cd /usr/share/arm-alsa     //进入 arm-alsa 目录,拷贝配置文件
sudo cp * /xxxx/rootfs/usr/share/arm-alsa/ -raf

3.2 alsa-utils

      alsa-utils 是 ALSA 的一些小工具集合,我们可以通过这些小工具还测试我们的声卡。将 alsa-utils-1.2.2.tar.bz2 复制到 ubuntu 中并解压,命令如下:

tar -vxjf alsa-utils-1.2.2.tar.bz2 //解压

      解压成功以后会得到一个名为“alsa-utils-1.2.2”的文件夹,此文件夹就是 alsa-utils 源码。重新创建一个名为“alsa-utils”的目录用于存放 alsa-utils-1.2.2 的编译结果。按照如下命令编译alsa-utils:

cd alsa-utils-1.2.2/ //进入
./configure --host=arm-linux-gnueabihf --prefix=/data/yangguoyu/code/tool/alsa-utils --with-alsa-inc-prefix=/data/yangguoyu/code/tool/alsa-lib/include/ --with-alsa-prefix=/data/yangguoyu/code/tool/alsa-lib/lib/ --disable-alsamixer --disable-xmlto CC=/交叉编译工具链位置
make //编译
sudo make install

      注意!上面在配置 alsa-utils 的时候使用了“--disable-alsamixer”来禁止编译 alsamixer 这个工具,但是这个工具确非常重要,它是一个图形化的声卡控制工具,需要 ncurses 库的支持。ncurses 库笔者已经交叉编译成功了(参考 63.5 小节),但是尝试了很多次设置,就是无法编译alsa-utils 中的 alsamixer 工具。网上也没有找到有效的解决方法,大家都是禁止编译 alsamixer的。所以这里就没法使用alsamixer这个工具了,但是可以使用alsa-utils提供的另外一个工具:amixer,alsamixer 其实就是 amixer 的图形化版本。两者的功能都是一样的,只是 alsamixer 使用起来更人性化一点。在这里希望知道如何编译出 alsa-utils 中 alsamixer 工具的朋友能够指点迷津,可以在 www.openedv.com 论坛上发帖。

      编译完成以后就会在前面创建的“ alsa-utils ”目录下生成 bin sbin share 三个文件夹,如
图 下 所示:

      将图binsbin share 这三个目录中的所有文件分别拷贝到开发板根目录下的 /bin、/sbin /usr/share/alsa 目录下,命令如下:

cd alsa-utils
sudo cp bin/* /xxx/rootfs/bin/ -rfa
sudo cp sbin/* /xxx/rootfs/sbin/ -rfa
sudo cp share/* /xxx/rootfs/usr/share/ -rfa
      打开开发板根文件系统中的 /etc/profile 文件,在里面加入如下所示内容:
export ALSA_CONFIG_PATH=/usr/share/arm-alsa/alsa.conf
ALSA_CONFIG_PATH 用于指定 alsa 的配置文件,这个配置文件是 alsa-lib 编译出来的。

4. 参考

alsa 音频库的移植_林伟的博客-CSDN博客

https://www.iteye.com/blog/wx1569578408-2500463

新浪博客

相关文章:

  • SAP 电商云 Spartacus 服务器端渲染的单步调试详细步骤
  • 尚硅谷Vue系列教程学习笔记(12)
  • Flutter 高级教程之如何开发iOS Widget小组件展示SQLite本地数据库数据(教程含完整源码)
  • 5大指标:评估RPA项目的ROI,实现投资回报最大化
  • 神经网络模型的基本原理,神经网络模型是干嘛的
  • 猿创征文|【vue3学习】vue3中实现深拷贝
  • TiUP 镜像参考指南
  • 鹏城AI靶场助力大规模高质量中文语料数据集安全开放
  • 安装node, 配置npm全局安装位置,安装Vue.
  • 神经网络理论及应用答案,神经网络理论名词解释
  • 国产香氛品牌别样的生意经
  • Java-基于SSM的健身后台管理系统
  • 【CCIE 实验】BGP 13条选路原则实验
  • 购买发票自动化软件(或者文档管理系统)需要注意的问题
  • 磁盘被未知资源耗尽lsof -n|grep deleted
  • 2017-09-12 前端日报
  • 5、React组件事件详解
  • Android Studio:GIT提交项目到远程仓库
  • AWS实战 - 利用IAM对S3做访问控制
  • canvas 高仿 Apple Watch 表盘
  • css属性的继承、初识值、计算值、当前值、应用值
  • node和express搭建代理服务器(源码)
  • php的插入排序,通过双层for循环
  • PHP的类修饰符与访问修饰符
  • 开源地图数据可视化库——mapnik
  • 小程序滚动组件,左边导航栏与右边内容联动效果实现
  • 字符串匹配基础上
  • Java数据解析之JSON
  • ​草莓熊python turtle绘图代码(玫瑰花版)附源代码
  • # Panda3d 碰撞检测系统介绍
  • # 睡眠3秒_床上这样睡觉的人,睡眠质量多半不好
  • (1)SpringCloud 整合Python
  • (13):Silverlight 2 数据与通信之WebRequest
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Bean工厂的后处理器入门)学习Spring的第七天
  • (Matlab)基于蝙蝠算法实现电力系统经济调度
  • (python)数据结构---字典
  • (Redis使用系列) SpringBoot中Redis的RedisConfig 二
  • (ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY)讲解
  • (二十四)Flask之flask-session组件
  • (附源码)spring boot北京冬奥会志愿者报名系统 毕业设计 150947
  • (附源码)ssm基于jsp高校选课系统 毕业设计 291627
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • **PHP二维数组遍历时同时赋值
  • .NET BackgroundWorker
  • .net php 通信,flash与asp/php/asp.net通信的方法
  • .net web项目 调用webService
  • .Net 知识杂记
  • .net程序集学习心得
  • .net的socket示例
  • .NET多线程执行函数
  • @Bean注解详解
  • @RequestMapping处理请求异常
  • [ai笔记9] openAI Sora技术文档引用文献汇总