热度 1||
一. 概述
ALSA是Advanced Linux Sound Architecture 的缩写,目前已经成为了linux的主流音频体系结构,想了解更多的关于ALSA的这一开源项目的信息和知识,请查看以下网址:http://www.alsa-project.org/。
在内核设备驱动层,ALSA提供了alsa-driver,同时在应用层,ALSA为我们提供了alsa-lib,应用程序只要调用alsa-lib提供的API,即可以完成对底层音频硬件的控制。
Menuconfig -> Device Drivers -> Sound card support -> Advanced Linux Sound Architecture ,驱动层所添加的音频设备应该也会在这里出现。
由于我们的内核已经包含了对应音频设备的驱动,故不做深入。
有了 Alsa 内核驱动,我们还需要 Alsa Lib 和 Alsa Util 的支持,这 3 者的关系如下图所示:
Alsa Util
-------------
Alsa lib
-------------
Alsa Driver
二.移植前准备
(详细参考http://blog.csdn.net/iamgooday/article/details/6323863 )
我的平台 fedora 10
交叉编译 arm linux
所以fedora 10的rpm都可以向这个网站下载
compat-gcc-34-g77-3.4.6-9.i386.rpm |
http://ftp-stud.hs-esslingen.de/pub/Mirrors/archive.fedoraproject.org/fedora/linux/releases/10/Everything/i386/os
| |
交叉编译器cross-3.0(天嵌交叉工具链的没有c库,我不知道用不用但是最好用上,防止以后出错) |
http://ftp.arm.linux.org.uk/pub/armlinux/toolchain/cross-3.0.tar.bz2
| |
alsa-lib-1.0.25.tar.bz2 |
| |
alsa-utils-1.0.25.tar.bz2 |
|
把编译器关联上
#gedit /etc/profile &
加上下面这两句
#pathmunge /opt/EmbedSky/4.3.3/bin
pathmunge /usr/bin
pathmunge /opt/EmbedSky/3.0/bin
如果你以前有编译器别忘了把以前的注释掉(前加#)
#pathmunge /opt/EmbedSky/4.3.3/bin
保存并输入
#source /etc/profile
使其生效。
查看是否编译器生效
#arm-linux-gcc –v (版本是3.0)
#g77 –v (版本是3.4.6)
平台建立成功
注:如果pc需要任何软件去
三.移植alsa_lib
#cd /opt/EmbedSky
#tar jxvf alsa-lib-1.0.25.tar.bz2
#cd alsa-lib-1.0.25
# ./configure --host=arm-none-linux-gnueabi --prefix=/usr/share/arm-alsa --enable-shared --disable-python --with-alsa-devdir=/dev --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找这些音频设备,但tq6410创建音频设备并不在/dev/snd里,而是在/dev/里,这就需要指定目录,不然会提示找不到pcmCxDx
#make
#make install
这样在/usr/share/arm-alsa 下就生成了arm-linux的库文件了
四.移植alsa_util
Util 会生成用于播放,录制,配置音频的应用文件,对测试很有用处。编译过程如下:
#cd ../
#tar jxvf alsa-utils-1.0.25.tar.bz2
#cd alsa-utils-1.0.25
#./configure --host=arm-none-linux-gnueabi --prefix=/usr/share/arm-alsa --enable-static --with-alsa-inc-prefix=/usr/share/arm-alsa/include --with-alsa-prefix=/usr/share/arm-alsa/lib --disable-alsamixer --disable-xmlto
1 ) --host 指定编译器,与 lib 的配置选项相同
2 ) --prefix 指定编译后文件的安装路径,与 lib 的配置选项相同
3 ) CFLAGS 用于编译时指定的编译选项,在这里将利用 lib 编译后生成的头文件,因此指定为该头文件所在目录
4 ) LDFLAGS 用于编译时指定连接库文件,与 CFLAGS 同样状况,将 lib 编译生成的库文件指定出来,
5 ) --with-alsa-inc-prefix 指定头文件目录,这个与 3) 类似,但必须指定,因为 Configure 程序会去该目录检查版本情况。如果不指定的话,则会直接去默认目录 ( 即宿主机对应的 alsalib 目录中寻找,因此可能会有错误 )
下面就开始打包把相关库和文件拷到开发板上了
五.lib 和 util 安装到嵌入式平台
Alsa库和utils:
#cd /usr/share
#tar jcvf arm-alsa.tar.bz2 arm-alsa
#mv arm-alsa.tar.bz2 /mnt/hgfs/linux-windows/
配置文件:
#cd /usr/share/
#tar jcvf arm-conf.tar.bz2
#mv arm-conf.tar.bz2 /mnt/hgfs/linux-windows/
进入tq2440释放文件
我用串口发送的
[root@EmbedSky /]#rz
arm-conf.tar.bz2
arm-alsa.tar.bz2
[root@EmbedSky /]# tar jxvf arm-alsa.tar.bz2
[root@EmbedSky /]cp arm-alsa/bin/* bin
[root@EmbedSky /]cp arm-alsa/lib/* lib
[root@EmbedSky /]# tar jxvf alsa_conf.tar.bz2 -C/usr/local/share/
六.测试程序
调节音量:
[root@EmbedSky /]amixer cset numid=4 on
[root@EmbedSky /]amixer cset numid=3 20
播放:
[root@EmbedSky /]aplay /Windows.wav
(详细参数说明参照http://blog.chinaunix.net/uid-20759926-id-3203934.html )
出现类似“Playing WAVE '/Windows.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stere”没有提示错误,证明移植成功,如果测试成功则能听见声音。但是很遗憾,我的tq6410没有声音,说明alsa驱动有问题,下一期将介绍tq6410的ac97 alsa驱动和移植简单原理分析,驱动入口详解,和自己写alsa驱动要实现的实用的代码。本次编译成功的arm linux库和程序可以到群138581843下载
Archiver|手机版|小黑屋|天嵌 嵌入式开发社区 ( 粤ICP备11094220号 )
GMT+8, 2024-5-18 14:42 , Processed in 1.031250 second(s), 17 queries .
Powered by Discuz! X3.4
Copyright © 2001-2020, Tencent Cloud.