ALSA(lib和util)交叉编译与测试

news/2024/7/3 1:35:21 标签: 操作系统, 嵌入式, shell

转载于 : http://www.programgo.com/article/34692458930/

情况简介

ALSA 是目前 Linux 系统上大量采用的音频设备库,通过 Alsa 架构能分离驱动和应用的开发。 Alsa 为上层提供API 的同时,也为下层提供了接口,在内核配置的时候指定“支持 Alsa” 就能得到内核支持,具体位置为:

Menuconfig -> Device Drivers -> Sound card support -> Advanced Linux Sound Architecture ,驱动层所添加的音频设备应该也会在这里出现。

由于我们的内核已经包含了对应音频设备的驱动,故不做深入。

 

有了 Alsa 内核驱动,我们还需要 Alsa Lib 和 Alsa Util 的支持,这 3 者的关系如下图所示:

Alsa Util

-------------

Alsa lib

-------------

Alsa Driver

 

Alsa Util 是纯应用层的软件,相当于 Alsa 设备的测试程序, Alsa Lib 则是支持应用 API 的中间层程序。移植 Alsa程序的顺序就是先后移植 Driver,Lib,Util 。

 

Alsa Lib 移植

Lib 移植不需要修改一丁点儿的源码,只需要重新编译 lib 以支持自己的平台。其源码可以从官网下载。编译过程如下:

1.       Configure

./configure --host=arm-none-linux-gnueabi --prefix=/home/jeff/Downloads/alsa-lib/out/arm-linux/ --enable-static --enable-shared –-with-configdir=/usr/local/share

配置会先对此命令中的配置项进行检查,然后实现配置。需要注意的是:配置如果出错,未必一定报错,而是会采用默认的配置选项。几个重要的配置项:

1 ) --host 指定编译器,这里指定为交叉编译器。注意运行本配置命令前务必保证编译器已经可以在 Shell 下直接执行了 

2 ) --prefix 指定编译后文件的安装路径,后续的安装命令会在该目录中创建 lib 和 include 两个目录

3 ) --with-configdir 指定 conf 文件的安装目录,该目录中对我们最有用的 alsa.conf ,此文件会被直接移植到你的目标系统中。

 

2.       make

直接运行:

Make

 

3.       make install

运行 install 有 2 点需要注意

1)  install 可能会在一些非用户目录安装一些文件,因此需要 root 权限

2)  install 也会执行一些编译命令,因此记得保证 root 权限下的交叉编译器同样可用。

 

Alsa Util 移植

Util 会生成用于播放,录制,配置音频的应用文件,对测试很有用处。编译过程如下:

1.       Configure

./configure --host=arm-none-linux-gnueabi --prefix=/home/jeff/Downloads/alsa-lib/out/arm-linux/ --enable-static --enable-shared CFLAGS="-I$PWD/../out/arm-linux/include" LDFLAGS="-L$PWD/../out/arm-linux/lib -lasound" --disable-alsamixer --disable-xmlto --with-alsa-inc-prefix=/home/jeff/Downloads/alsa-lib/out/arm-linux/include

其中几个重要的配置项:

1 ) --host 指定编译器,与 lib 的配置选项相同

2 ) --prefix 指定编译后文件的安装路径,与 lib 的配置选项相同

3 ) CFLAGS 用于编译时指定的编译选项,在这里将利用 lib 编译后生成的头文件,因此指定为该头文件所在目录

4 ) LDFLAGS 用于编译时指定连接库文件,与 CFLAGS 同样状况,将 lib 编译生成的库文件指定出来,

5 ) --with-alsa-inc-prefix 指定头文件目录,这个与 3) 类似,但必须指定,因为 Configure 程序会去该目录检查版本情况。如果不指定的话,则会直接去默认目录 即宿主机对应的 alsalib 目录中寻找,因此可能会有错误 )

 

2.       make

直接运行:

Make

必须编译成功。

网上有种方法教大家 1 ) make clean 2)configure 3)make install 这种方法确实不会报错,但其实是安装了预编译的可执行程序,该程序是基于 x86 体系的,无法用于嵌入式平台。

 

3.       make install

 

lib 和 util 安装到嵌入式平台

在目标板上,以下文件必须被拷贝至对应位置:

1)  lib 库文件,放在 /lib/ 中

2)  conf 文件,应放在 /usr/local/share 中,与编译时指定的目录相同

3)  应用文件, util 能产生 aplay,amixer,arecord 可执行程序,这些文件可放在 /usr/sbin 中

4)  必须保证有 /dev/snd/ 目录中,此目录下应包含以下几个设备文件 ( 驱动 ) ,

controlC0, pcmC0D0c, pcmC0D0p, timer

如果这些文件已经在 /dev/ 下,可拷贝到 snd 目录中。

 

运行测试程序

在我们当前的板子上存在着 4 个音频链路,分别是 :MIC, Line in, Line out, Headphone Out 。这 4 个链路都需要进行测试。

对于播放链路 (Line out, Headphone Out) ,相应的播放命令为:

aplay mysound.wav

 

对于录制链路 (Mic, Line in) ,相应的录制命令为:

arecord myvoice.wav –fdat –d 5

其中 -fdat 指定以 CD 音质录制, -d 代表录制 5 秒后退出。

 

命令 amixer 可以用来控制链路的通断以及相应配置。对于每一个系统,会有不一样的链路名称,通过amixer可以了解当前系统上所有链路的名称及状态。

命令amixer scontrols可以查看系统中的simple控制链路,相对应的还有完全版的控制链路(amixer controls),根据笔者的经验,这个simple控制链路足矣。

命令amixer scontent可以查看系统的所有simple链路极其当前状态。

 

以我目前的系统为例,为了让不同的链路工作,我们必须通过该命令进行设定。

Headphone Out

Amixer –c 0 sset ‘PCM’,0 100%,100% unmute playback

 

Line out

amixer –c 0 sset ‘Line’,0 100%,100% unmute playback

 

Line in

Amixer –c 0 sset ‘Right PGA Mixer Line1L’,0 100%,100% unmute cap

注意线路录音时应确定输入设备本身为有源设备,无源的 Microphone 是不能用来接线路输入的。

 

MIC

Amixer –c 0 sset ‘Right PGA Mixer Mic3L’,0 100%,100% unmute cap

 

转载于:https://www.cnblogs.com/tureno/articles/6259308.html


http://www.niftyadmin.cn/n/1536205.html

相关文章

图像识别技术

图像识别算法实现收藏 <script type"text/javascript"></script> <script></script> 以往的图像处理函数实现&#xff0c;多是针对图像句柄。算法实现 需要操作复杂的图像文件。 但是&#xff0c;这种方式算法实现和调试的周期比较长。为了加…

Isotig cDNA gene structure alternative splicing gene loci 表达谱

参考&#xff1a;高通量测序相关名词 Isotig 指在转录组de novo测序时&#xff0c;用454平台测序完成后组装出的结果&#xff0c;一个isotig可视为一个转录本。 Isogroup 指转录组de novo测序中&#xff0c;用454平台测序完成后组装出的结果获得的可聚类到同一个基因的转录本…

Visual C++实现二值图像处理

二值图像是一种简单的图像格式&#xff0c;它只有两个灰度级&#xff0c;即"0"表示黑色的像素点&#xff0c;"255"表示白色的像素点&#xff0c;至于如何从一幅普通的图像获得二值图像&#xff0c;请参考我近期在天极网上发表的《Visual C编程实现图像的分…

npm publish 报403错误:403 Forbidden - PUT https://registry.npmjs.org/ocean_test_npm - Forbidden

403 Forbidden - PUT https://registry.npmjs.org/ocean_test_npm - Forbidden 原因 刚注册好npm账号&#xff0c;便立即发布第一个包时便会报出错误。因为注册好账号后&#xff0c;没有在注册的邮箱中核实邮箱地址。 解决方法 到邮箱中找到Npm官网发送的邮件&#xff0c;点…

ibatis动态修改select出来的字段

今天自己做了一个测试 , 动态去select出来数据库的字段, 但是我传参数都是正确的 , 可就是无法出来结果, 返回对象NULL . 表示很郁闷 , 然后就google了一下 , 关键词 : ibatis sql select dynamic column 不得不说, google真心强大 !!! 第一条就是我想要的 . 好了 , 回到正题 …

CSS3新特性(阴影、动画、渐变、变形、伪元素等) CSS3与页面布局学习总结——CSS3新特性(阴影、动画、渐变、变形、伪元素等)...

目录 一、阴影1.1、文字阴影1.2、盒子阴影二、背景2.1、背景图像尺寸2.2、背景图像显示的原点三、伪元素3.1、before3.2、after3.3、清除浮动四、圆角与边框4.1、border-radius 圆角4.2、边框图片border-image五、变形 transform5.1、rotate()2D旋转5.2、设置原点 transform-or…

一份招聘需求的分析

今早&#xff0c;长期合作伙伴又给我们一份招聘需求&#xff0c;以下是招聘条件&#xff1a; 工作性质&#xff1a;全职 发布日期&#xff1a;2009/6/15 截止日期&#xff1a;2009/6/30 招聘人数&#xff1a;6 工作经验&#xff1a;不限 学  历&#xff1a;大专以上 语…

npm发布包遇到的坑

感觉发布过程中的坑让我踩的差不多了…在这里记录一下 基本流程 先简单记录一下发布流程 初始化包 npm init登录npm npm login发布包 npm publish问题 接下来就是遇到的问题了&#xff0c;每个问题都包含报错信息&#xff0c;请善用ctrl f搜索&#xff0c;下文报错中涉…