zoukankan      html  css  js  c++  java
  • 【转】ALSA(lib和util)交叉编译与测试

    情况简介

    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

    sudo ./configure --host=arm-none-linux-gnueabi --prefix=/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build --with-alsa-devdir=/dev --enable-static --enable-shared  --disable-python  --with-configdir=/usr/local/share/alsa --with-plugindir=/usr/local/lib/alsa_lib

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

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

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

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

    4) (本人增加) --with-alsa-devdir 指定音频设备的目录。(pcmC0D0c/pcmC0D0p/pcmC0D1p等)alsa_lib 默认到/dev/snd找这些音频设备,但有时候创建音频设备并不在/dev/snd里,而是在/dev/里或者其它目录里,这就需要指定目录,不然会提示找不到pcmCxDx 。

    2.make

    直接运行:

    make 或者 sudo 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/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build --enable-static --enable-shared CFLAGS="-I/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build/include" LDFLAGS="-L/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build/lib -lasound" --disable-alsamixer --disable-xmlto --with-alsa-inc-prefix=/home/jamie/dvsdk/alsa/alsa-lib-1.0.24.1/build/include

    其中几个重要的配置项:

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

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

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

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

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

    2.  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

    MIC

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

    转自:http://blog.csdn.net/iamgooday/article/details/6323863

    PS:我在编译util 1.0.24.2时出现make错误,后来发现是version.h有问题,修改就好了,不知道为什么,version.h里面的内容会变乱了。

  • 相关阅读:
    JDBC 实例--JDBC通过工具类DBUtil连接到数据库,让我们不再恐惧操作数据库
    揭开JDBC的神秘面纱,让JDBC数据库的连接参数不再神秘
    实验六 最小代价生成树
    实验五 背包问题和带时限的作业排序
    实验四 图的遍历算法设计与实现
    实验三 跳表算法设计与实现
    实验二 伸展树算法设计与实现
    算法实例一 算法问题求解基础--欧几里得递归算法和递归算法
    2013年 蓝桥杯预赛 java 本科A 题目
    java常用开发工具类之 图片水印,文字水印,缩放,补白工具类
  • 原文地址:https://www.cnblogs.com/tinz/p/2366151.html
Copyright © 2011-2022 走看看