ref :

https://www.cnblogs.com/yutingliuyl/p/6718875.html

https://blog.csdn.net/yuanxinfei920/article/details/52954941


背景:
平台:
  host平台   :Ubuntu 18.04
  arm平台    : S5P6818
  arm-gcc    :4.8.1
 
  alsa-lib        :1.0.22

  alsa-utils        :1.0.22

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-lib是ALSA 应用库(必需基础库),alsa-utils包含一些ALSA小的测试工具.如aplay、arecord 、amixer播放、录音和调节音量小程序,对于一些应用开发者只需要以上两个软件包就可以了。

 
主机准备 :

为了方便管理,创建有关的目录

mkdir alsa
cd alsa
mkdir  compressed  install  source

下载并解压有关的源码:

cd compressed

wget -c ftp://ftp.alsa-project.org/pub/utils/alsa-utils-1.0.22.tar.bz2
wget -c ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.0.22.tar.bz2

#解压下载的包

.tar.bz2
.tar.bz2

编译:

编译 alsa-lib

cd ../source/alsa-lib-

创建以下脚本

##    schips@dingtalk.com
#    https://gitee.com/schips/
#    Mon  Sep  :: AM HKT
#
#!/bin/sh
OUTPUT=/home/schips/arm/alsa/install/alsa_lib
mkdir $OUTPUT -p && rm $OUTPUT/* -rf

 ./configure \
--host=arm-xilinx-linux-gnueabi \
--prefix=$OUTPUT \
--enable-static \
--enable-shared  \
--disable-Python \
--with-configdir=/usr/local/share
#--with-plugindir=/usr/local/lib/alsa_lib

sudo make clean
sudo make && sudo  sudo  PATH=$PATH make install
关于配置参数的2点说明:
()  如果需要自定义include/config.h中ALSA_CONFIG_DIR的值,可通过参数--with-configdir指定,即alsa.conf文件安装路径,默认值是--prefix下的/share/alsa/
()  如果需要自定义include/config.h中ALSA_PLUGIN_DIR的值,可通过参数--with-plugindir指定,即smixer的安装路径,默认值是--prefix下的/lib/alsa-lib/
在这里笔者建议:配置时最好用--with-configdir指定好alsa.conf文件安装路径,,不要让它在默认的输出路径中。这样方便在编译移植以后不会污染板子上的文件系统

由于不希望修改root环境变量,所以在最后的make install 引入了环境变量
 
 
 
编译 alsa-utils
cd ../alsa-utils-

创建以下脚本
#
#
#    schips@dingtalk.com
#    https://gitee.com/schips/
#    Mon  Sep  :: AM HKT
##
#!/bin/sh
OUTPUT=/home/schips/arm/alsa/install/alsa_utils
ALSALIB_DIR=/home/schips/arm/alsa/install/alsa_lib/
mkdir $OUTPUT -p && rm $OUTPUT/* -rf

./configure \
--host=arm-xilinx-linux-gnueabi \
--disable-alsamixer  \
--disable-xmlto \
CPPFLAGS=-I$ALSALIB_DIR/include  \
LDFLAGS=-L$ALSALIB_DIR/lib  \
--with-alsa-prefix=$ALSALIB_DIR/lib  \
--with-alsa-inc-prefix=$ALSALIB_DIR/include  \
--prefix=$OUTPUT

make && make install
开发板准备:
拷贝有关的文件
alsa-lib

(1)  将参数--prefix指定的路径值/lib下的所有文件移植到arm linux系统的文件系统的/usr/lib/目录中

(2)  将share文件夹中的alsa文件夹复制(包括了alsa.conf)到arm linux系统的文件系统中的/usr/local/share (这个路径由 --with-configdir  参数指定)

(3)  其它内容可选,但是如果移植,那么它们在arm linux系统中的目录路径必须和其在pc机上的安装路径相同

alsa-utils

(1)  将参数--prefix指定的路径值/bin/目录中的文件移植到arm linux系统中的/usr/bin或其它目录中,如果移植到其它目录中,则需要将该目录添加到环境变量PATH指的执行路径中

(2)  将参数--prefix指定的路径值/sbin/目录中的文件移植到arm linux系统中的/usr/bin或其它目录中,如果移植到其它目录中,则需要将该目录添加到环境变量PATH指的执行路径中

(3)  其它内容可选,但是如果移植,那么它们在arm linux系统中的目录路径必须和其在pc机上的安装路径相同

创建有关的设备文件

使用以下脚本:

#!/bin/sh

mkdir /dev/snd
cd /dev/snd

若出现以下的可忽略

mkdir: can't create directory '/dev/snd': File exists
    mknod: controlC0: File exists
    mknod: pcmC0D0p: File exists
    mknod: pcmC0D0c: File exists
    mknod: timer: File exists
      
      # 对于有关设备的解释
      controlC0  :用于声卡的控制,如麦克风的控制或者混音的控制;
      pcmC0D0c:用于录音的pcm设备;
      pcmC0D0p:用于播放的pcm设备;
      Seq: 音序器;
      Timer:定时器;

测试:

录音和播放

arecord -d3 -c1 -r16000 -twav -fS16_LE example.wav

说明:
-d:录音时长(duration)  秒
-c:音轨(channels)
-r:采样频率(rate)  每一秒采集多少个样本
-t:封装格式(type)
-f:量化位数(format)16bit  小端

执行如下命令播放

aplay example.wav

录音和播放
arecord -d3 -c1 -r16000 -twav -fS16_LE example.wav
说明:
-d:录音时长(duration)  秒
-c:音轨(channels)
-r:采样频率(rate)  每一秒采集多少个样本
-t:封装格式(type)
-f:量化位数(format)16bit  小端

执行如下命令播放
aplay example.wav

Arm-Linux 移植 alsa的更多相关文章

  1. arm linux 移植 x265

    背景 本来想着把 x265编译到ffmpeg里面,搞定了x265的编译:但是一直报ERROR: x265 not found using pkg-config这个错误,我按照网上的资料,查看了ffbu ...

  2. arm linux利用alsa驱动并使用usb音频设备

    一.背景: arm linux的内核版本是3.13.0 二.准备工作 添加alsa驱动到内核中,也就是在编译内核的时候加入以下选项: 接下来就重新编译内核即可 三.交叉编译alsa-lib和alsa- ...

  3. Linux 安装 go 以及 arm linux 移植 go

    背景 Go是一门全新的静态类型开发语言,具有自动垃圾回收,丰富的内置类型,函数多返回值,错误处理,匿名函数,并发编程,反射等特性. 从Go1.4之后Go语言的编译器完全由Go语言编写,所以为了从源代码 ...

  4. arm linux 移植 MQTT (paho、mosquitto)

    前言 我们在这里做2件事情: 1)编译 paho.mqtt.mosquitto 2个开源项目的c版本库(mosquitto库没有用上) 2)编译好 依赖 paho.mqtt的库编写例程 + mosqu ...

  5. arm linux 移植 ffmpeg 库 + x264

    背景 Ffmpeg 中带有h264的解码,没有编码,需要添加x264.libx264是一个自由的H.264编码库,是x264项目的一部分,使用广泛,ffmpeg的H.264实现就是用的libx264. ...

  6. arm linux 移植 PHP

    背景: PHP 是世界上最好的语言. host平台 :Ubuntu 16.04 arm平台 : 3531d arm-gcc :4.9.4 php :7.1.30 zlib :1.2.11 libxml ...

  7. arm linux 移植支持 HP打印机

    背景 由于业务需要,需要hi3531d主板上加入对于HP打印机的支持. 通过与产品经理,技术主管的沟通:通用支持是不现实的,只要求彩色打印,先不考虑打印机的价格,只要支持一款打印机即可. 注意: Li ...

  8. arm linux 移植 gdb/gdbserver

    背景 调试工具gdb的使用对于嵌入式Linux开发人员来说是一项不可少的技能. 目前,嵌入式 Linux系统中,主要有三种远程调试方法,分别适用于不同场合的调试工作:用ROM Monitor调试目标机 ...

  9. arm linux 移植 udhcp 与 使用

    背景 在一些网络环境下,需要静态IP不够现实,需要使用DHCP进行自动获取IP地址. udhcpc是一个面向嵌入式系统的非常小的DHCP客户端,字母的缩写微μ- DHCP -客户端client(μDH ...

  10. arm linux 移植 rsync

    背景: 在产品开发中可以使用rsync进行大文件的拷贝,断点续传. host平台 :Ubuntu 16.04 arm平台 : 3531d   rsync   :3.1.3 arm-gcc :4.9.4 ...

随机推荐

  1. cmd命令net和sc

    来看windows中启动和关闭服务的方法:在cmd下可有两种方法打开,分别是net和sc. 1.net用于打开没有被禁用的服务, NET命令是功能强大的以命令行方式执行的工具. 它包含了管理网络环境. ...

  2. SC3聚类 | 拉普拉斯矩阵 | Laplacian matrix | 图论 | R代码

    Laplacian和PCA貌似是同一种性质的方法,坐标系变换.只是拉普拉斯属于图论的范畴,术语更加专业了. 要看就把一篇文章看完整,再看其中有什么值得借鉴的,总结归纳理解后的东西才是属于你的. 问题: ...

  3. Oracle中的统计信息

    一.什么是统计信息 统计信息主要是描述数据库中表,索引的大小,规模,数据分布状况等的一类信息.例如,表的行数,块数,平均每行的大小,索引的leaf blocks,索引字段的行数,不同值的大小等,都属于 ...

  4. Fixed-Length Frames 谈谈网络编程中应用层(基于TCP/UDP)的协议设计

    http://blog.sina.com.cn/s/blog_48d4cf2d0101859x.html 谈谈网络编程中应用层(基于TCP/UDP)的协议设计 (2013-04-27 19:11:00 ...

  5. Spring AOP Log

    spring aop action中验证用户登录状态 - CASER_HDMI的博客 - CSDN博客https://blog.csdn.net/CASER_HDMI/article/details/ ...

  6. disruptor 单生产者多消费者

    demo1 单生产者多消费者创建. maven 依赖 <!-- https://mvnrepository.com/artifact/com.lmax/disruptor --> < ...

  7. [原][landcover]全球地表植被样例图片

    图由南水之源提供,感谢    流socket  制作总结 原截图如下:按字母顺序排序 asphalt asphalt_bright asphalt_white brightRockOnly broad ...

  8. php环境选择

    第一个    PHPStudy 推荐这个.简单好用. 链接:https://pan.baidu.com/s/1yWRDjfnadkkUE-JX5pqZmg 提取码:4imw 第二个 PHPnow 第三 ...

  9. 【Leetcode_easy】1030. Matrix Cells in Distance Order

    problem 1030. Matrix Cells in Distance Order 参考 1. Leetcode_easy_1030. Matrix Cells in Distance Orde ...

  10. CSS Position定位过多是否会影响浏览器渲染速度

    一直有个传说就是页面里的Position多了会影响浏览器渲染速度,今天做个测试看看结果如何. 检验的方法: 动态创建一定数量的div > 开始计算时间 > 导入css文件渲染 > o ...