***************************************************************************************************************************

作者:EasyWave                                                                   时间:2014.10.25

类别:Linux应用-ALSA音频架构ALSA-lib的移植于编译      声明:转载,请保留链接

注意:如有错误,欢迎指正。这些是我学习的日志文章......

***************************************************************************************************************************

一:ALSA音频架构简介

ALSA是Advanced Linux Sound Architecture,高级Linux声音架构的简称,它在Linux操作系统上提供了音频和MIDI(Musical Instrument Digital Interface,音乐设备数字化接口)的支持。在2.6系列内核中,ALSA已经成为默认的声音子系统,用来替换2.4系列内核中的OSS(Open Sound System,开放声音系统)。ALSA的主要特性包括:高效地支持从消费类入门级声卡到专业级音频设备所有类型的音频接口,完全模块化的设计,

支持对称多处理(SMP)和线程安全,对OSS的向后兼容,以及提供了用户空间的alsa-lib库来简化应用程序的开发。

ALSA是一个完全开放源代码的音频驱动程序集,除了像OSS那样提供了一组内核驱动程序模块之外,ALSA还专门为简化应用程序的编写提供了相应的函数库,与OSS提供的基于ioctl的原始编程接口相比,ALSA函数库使用起来要更加方便一些。利用该函数库,开发人员可以方便快捷的开发出自己的应用程序,细节则留给函数库内部处理。当然 ALSA也提供了类似于OSS的系统接口,不过ALSA的开发者建议应用程序开发者使用音频函数库而不是驱动程序的API。

二:ALSA官方网站

我这里下载的不是最新版本的alsa-lib-1.0.28,而是alsa-lib-1.0.26,其主要原因当然是为了版本的稳定性才选择低一点版本。而ALSA-lib的文件架构如下所示:

三:ALSA移植和编译

在ALSA-lib的移植当中,还是出现过很多奇怪的问题,当然这个跟我当前所有的uClibc的版本有关,对于低于uClibc-0.9.23的版本地uClibc,需要对ALSA的库源码进行更新,否则会出现编译失败的问题,这个我一一道来。

1):‘versionsort‘ undeclared的错误

‘versionsort‘ undeclared错误的提示信息如下所示:

这个是由于uClibc如果低于0.9.23的话,就会出现这个问题,因为在uClibc-0.9.32以下的版本没有versionsort函数导致的,这个可以在uClibc的源码中看到的,在uClibc-0.9.32的版本里就有versionsort函数,如下所示:

低于这个版本uClibc的就没有这个函数和文件的,那么就需要下载一个补丁包,并且将其移植到ALSA-lib中去。如果你的uClibc本身的版本就比这个高的话,可以跳过这个部分。其补丁包文件如下所示:

将这个补丁打上,采用如下命令,如下所示:

这个只是第一步,如果只是这样打下补丁,还是会出现‘versionsort‘ undeclared错误的提示,不过不是在parse.c文件中,而是在conf.c文件中,如下所示:

这样就不能采用上面的方法再来打补丁的方式来解决,否则会出现versionsort重复定义的错误,怎么办呢,那就只能将versionsort移植到alsa-lib库中去。首先从alsa-lib/src/ucm/parse.c中复制出versionsort的那部分函数代码,重新新建一个versionsort.c文件在alsa-lib/src/下,如下所示:

同时修改上图中的Makefile.am文件,加上这个文件,如下所示:

还需要在alsa-lib/include/local.h文件中加入一行代码,如下所示:

重新修改编译脚本build.sh文件,加上一行代码:autoreconf -ivf,如下所示:

重新编译整个alsa-lib库。

2):‘ atomic_add‘之类的重复定义的错误

如果在编译中遇到这个问题的话,就需要修改configure和configure.ac文件,如果没有这类错误就不需要修改。如下所示:

就需要将-D__arm__拿掉,之后重新编译整个alsa-lib库...

3):--with-versioned的问题

这个问题是最难找的问题,不过不加--with-versioned=no的话,会出现静态库调用snd_pcm_hw_params_get_buffer_size(x,x)可以正确的返回buffer_size的大小,而动态库却无法正确返回,总是返回0。这个地方我整整查了两天,才找到是这里导致的问题。

四:ALSAlib库移植总结

在移植过程中出现过很多状况,不过这也是一个学习的机会,不过好在问题都全部找到并解决啦。

原文:http://blog.csdn.net/wavemcu/article/details/40453235

嵌入式linux alsa,嵌入式Linux下ALSA音频架构ALSA-lib移植与编译心得相关推荐

  1. Android 音频架构

    Android 音频架构定义了音频功能的实现方式,并指出实现中所涉及的相关源代码. 应用框架 应用框架包含应用代码,该代码可使用 android.media API 与音频硬件进行交互.在内部,此代码 ...

  2. 【嵌入式流媒体开发】Linux ALSA 声卡数据采集与播放

    文章目录 ALSA框架 环境搭建 ALSA 交叉编译移植 alsa-lib alsa-util 配置USB声卡 查看声卡设备并测试 查看音卡: 录音测试 播放测试 音频采集常见参数 WAV文件头 编程 ...

  3. 嵌入式linux音频播放器设计,基于嵌入式Linux下Madplay音频播放器设计论文.docx

    基于嵌入式Linux下Madplay音频播放器设计论文 滁州职业技术学院计算机应用技术专业毕业论文PAGE I 滁州职业技术学院信息工程系--2015届计算机应用专业毕业论文 姓 名: 周杰 班 级: ...

  4. 【正点原子Linux连载】第二十三章 音频应用编程-摘自【正点原子】I.MX6U嵌入式Linux C应用编程指南V1.1

    第二十三章 音频应用编程 ALPHA I.MX6U开发板支持音频,板上搭载了音频编解码芯片WM8960,支持播放以及录音功能! 本章我们来学习Linux下的音频应用编程,音频应用编程相比于前面几个章节 ...

  5. 在linux下进行嵌入式系统设计,一种应用于测控系统的基于Linux的嵌入式系统的设计...

    描述 1.前言 随着网络控制技术的快速发展,工业以太网得到逐步完善,在工业控制领域获得越来越广泛的应用.工业以太网使用了TCP/IP协议,便于联网,并具有高速控制网络的优点.随着32位嵌入式CPU价格 ...

  6. linux 无线传输,嵌入式Linux下图像存储与无线传输技术研究

    摘要: 随着嵌入式系统和无线通信技术的迅速发展,以嵌入式操作系统为平台,构建文件系统实时存储数据并依赖于无线网络传输数据的技术得到越来越广泛的应用,尤其是应用于远程无线监控系统中的视频图像业务的实时存 ...

  7. 嵌入式linux中断驱动,嵌入式Linux下硬件中断驱动程序的开发.pdf

    嵌入式Linux下硬件中断驱动程序的开发.pdf 2003 年 6 月 航空精密制造技术 Jun. 2003 第 39 卷 第 3 期 AVIATION PRECISION MANUFACTURING ...

  8. 华山服务器安装linux系统,RHEL7/Centos7下使用QEMU搭建u-boot+Linux+NFS嵌入式开发环境(2018...

    目录 1交叉编译环境搭建 交叉编译器下载链接: 1.1交叉编译器下载 将其下载到/usr目录下并解压. 解压命令: tar -xvf gcc-linaro-7.2.1-2017.11-i686_arm ...

  9. 嵌入式Linux开发,Ubuntu22下交叉编译内核报错: multiple definition of `yylloc‘; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0

    一.问题描述 嵌入式Linux开发,Ubuntu22下交叉编译内核报错: /usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple ...

最新文章

  1. 如何在python中显示电脑中的图片-python如何实现多个图片显示在屏幕上?
  2. ARM函数调用时参数传递规则
  3. 庐山真面-Oxite的HelloWorld
  4. 为什么有的S4系统看不到Adapt UI按钮
  5. 六元均匀直线阵的各元间距为_给棉花地选购滴灌带时记住这几点,不再为棉花滴水时发愁...
  6. 云优YUNUCMS企业网站管理系统
  7. Linux 搜索 查找find命令 详解
  8. [渝粤教育] 西南科技大学 机电传动控制 在线考试复习资料
  9. mysql----------mysql5.7如何配置主从数据库
  10. php批量打印快递单,ecshop批量打印快递单的方法
  11. Hdu--5064(DP)
  12. QRCode简单生成二维码
  13. Android生命周期
  14. docker参数详解
  15. php 获取array的长度_php中获取数组长度的方法
  16. Allegro原理图反标教程
  17. 机器人搏击大赛冠军_喜报|2019中国智能机器人格斗大赛,石大学子在轮式自主格斗A、B组中包揽双冠!...
  18. unix纪元 OpenJ_Bailian - 3860
  19. 解决OpenOffice文件预览转换xlsx文件出现com.sun.star.lang.IllegalArgumentException: URL seems to be an unsupported
  20. 程序员网页版工具集合

热门文章

  1. xgboost重要参数2为主但不全要参照1
  2. Google Colab 免费GPU服务器使用教程 挂载云端硬盘
  3. Levenshtein distance 编辑距离算法
  4. TVM设计与构架构建
  5. 一篇学会HttpServletRequest
  6. python join 的使用
  7. Python 删除list 里面的空值
  8. Android 自定义View ——Matrix (矩阵)
  9. android 创建 file 文件,文本 并写入内容
  10. DialogFragment 的使用