学习内容: madplay 移植
版本:V1.1
作者:Feng dong rui
整理日期:2009.09.24
嵌入式技术交流群:92388278
交流邮箱:1986fdr@163.com
基于 s3c2440 的 madplay 移植
在 mini2440 移植声卡后,赶紧找了移植 madplay 的资料,看上去挺简单的,于是接着移植 madplay 。
一、 环境和软件介绍
1、 主机环境:虚拟机下 Fedora9
2、 交叉编译器: arm-linux-gcc-4.3.2
3、 软件包: zlib-1.2.3 、 libid3tag-0.15.1b.tar.gz 、 libmad-0.15.1b.tar.gz 、 madplay-0.15.2b.tar.gz
4、 把以上软件包解压到 /opt/studyarm/madplay-make 目录下,分别改名为 zlib 、 libid3tag 、 libmad 、 madplay 。并在 madplay-make 目录下新建 include 和 lib 目录用于存放编译后的头文件和库文件。
二、 移植步骤
1、 编译 zlib-1.2.3
进入 zlib 目录进行如下配置:
./configure –prefix=/opt/studyarm/madplay-make 然后修改生成的 Makefile 文件: ... CC=arm-linux-gcc ... LDSHARED=arm-linux-gcc CPP=arm-linux-gcc -E ... AR=arm-linux-arrc RANLIB=arm-linux-ranlib ... |
执行 make
make install
在 /opt/studyarm/madplay-make 目录下的 included 和 lib 目录里生成了编译后的文件。
2、 编译 libid3tag-0.15.1b.tar.gz
进入 libid3tag 目录,执行“ ./configure --host=arm-linux --enable-static --disable-shared --disable-debugging --prefix=/opt/studyarm/madplay-make ”
make
make install
在 /opt/studyarm/madplay-make 目录下的 included 和 lib 目录里生成了编译后的文件。
3、 编译 libmad-0.15.1b.tar.gz
进入 libmad 目录,执行“ ./configure --host=arm-linux --enable-static --disable-shared -disable-debugging --prefix=/opt/studyarm/madplay-make ”
因为我使用的是高版本的 arm-linux-gcc-4.3.2 编译器, make 时出现了“ cc1: error: unrecognized command line option "-fforce-mem" ”错误,这是因为这个高版本的 gcc 没有 "-fforce-mem" 参数,解决的办法是在 Makefile 里面查找 "-fforce-mem" ,将其删除即可 make 通过。
make
make install
在 /opt/studyarm/madplay-make 目录下的 included 和 lib 目录里生成了编译后的文件。
4、 madplay-0.15.2b.tar.gz
进入 madplay 目录,执行“ ./configure CC=/usr/local/arm/4.3.2/bin/arm-linux-gcc --host=arm-linux --enable-static --disable-shared CPPFLAGS=-I/opt/studyarm/madplay-make/include LDFLAGS=-L/opt/studyarm/madplay-make/lib ”
make
在目录下生成了 madplay 可执行文件。
三、 测试
将生成的 madplay 可执行文件拷贝到开发板的 /bin 目录下,播放 U 盘或其它地方的歌曲,这里播放的是 U 盘里面的歌曲。
[rootMrFeng]#ls 01.mp3 2.wma ?? ??? ???? ????? [rootMrFeng]#madplay 01.mp3 MPEG Audio Decoder 0.15.2 (beta) - Copyright (C) 2000-2004 Robert Leslie et al. Title: 天空之城(木吉他) Artist: 久石让 Album: 天空之城( Laputa The Castle in 10288 frames decoded (0:04:28.7), +0.3 dB peak amplitude, 31 clipped samples |
到了这里, madplay 移植成功,声音播放正常。
四、 我的编译命令:
//written by yichi 2010.02.26 14:22:08
//使用源码:libid3tag-0.15.1b.tar.gz, madplay-0.15.2b.tar.gz, libmad-0.15.1b.tar.gz, zlib-1.2.3.tar.gz
//编译zlib-1.2.3
tar -xvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
./configure --prefix=/home/yichi/work2010/madplay/target
gvim Makefile
//修改gcc->arm-linux-gcc, ar rc->arm-linux-ar rc, ranlib->arm-linux-ranlib
make
make install
//编译ibid3tag-0.15.1b
tar -xvf libid3tag-0.15.1b.tar.gz
cd libid3tag-0.15.1b
./configure --host=arm-linux --enable-static --disable-shared --disable-debugging --prefix=/home/yichi/work2010/madplay/target
make
make install
//编译libmad-0.15.1b
tar -xvf libmad-0.15.1b.tar.gz
cd libmad-0.15.1b
./configure --host=arm-linux --enable-static --disable-shared -disable-debugging --prefix=/home/yichi/work2010/madplay/target
gvim Makefile
//删除-fforce-mem 参数
make
make install
//编译madplay-0.15.2b.tar.gz
tar -xvf madplay-0.15.2b.tar.gz
cd madplay-0.15.2b
./configure CC=/usr/arm/4.3.2/bin/arm-linux-gcc --host=arm-linux --enable-static --disable-shared CPPFLAGS=-I/home/yichi/work2010/madplay/target/include LDFLAGS=-L/home/yichi/work2010/madplay/target/lib
make
//生成静态编译的madplay
cp madplay /tftpboot
五、由于我板子声音架构为alsa,直接使用madplay播放会出现audio: /dev/dsp: No such file or directory错误。
原因是madplay使用oss建构,在网上查找了一些资料,可以用alsa支持oss架构,但是并没有找到比较容易的方法,有待以后学习。
简单解决方法如下:使用madplay解码再使用aplay播放:)在这里向有此伟大想法的不知名网友致敬。
madplay -o wav:- 1.mp3 | aplay
有关aplay等alsa工具移植请参照http://blog.csdn.net/yichi7758/archive/2010/02/26/5328491.aspx