首页 / 操作系统 / Linux / MadPlayer移植到mini2440上(avi和wmv)
一、 环境a) 操作系统:Linux5 (内核版本:2.6.18-164.el5)b) 开发板:mini2440(nand 128M,SDRAM 64M)c) 编译器:gcc 4.4.3 àarm-linux-gcc-4.4.3二、 设备a) PC机、ARM9mini2440开发板三、 资源a) 调用的库 i. libid3tag-0.15.1b.tar.gz ii. libmad-0.15.1b.tar.gz iii. madplay-0.15.2b.tar.gz(第二版本) iv. zlib-1.2.5.tar.bz2 v. libstdc++.so.6.0.10 (编译器的替换库)注:目前madplay的官方网站是http://www.underbit.com/products/mad/透过该网站的介绍可以得知, 它还需要libmad 和libid3tag 两个库, 从该网站找到下载连接http://sourceforge.net/project/showfiles.php?group_id=12349b) 编译器 i. arm-linux-gcc-4.4.3.tar.gzc) 传输工具 i. tftp软件(也可以用其他的传输) 四、 步骤a) 首先搭建交叉编译环境 i. 将arm-linux-gcc-4.4.3.tar.gz解压到一个空文件夹中#tar zvxf arm-linux-gcc-4.4.3.tar.gz –C / (C的后面有空格) ii. 改变环境#gedit /root/.bashrc iii. 将路径改为/opt/FriendlyARM/toolschain/4.4.3/binexpotr PATH=$PATH:/ opt/FriendlyARM/toolschain/4.4.3/bin 保存退出之后,要重启一下机子命令如下 #reboot iv. 重启之后查看是否编译成功# arm-linux-gcc –v 在最后一行如果出现了版本号就是编译成功了b) 修改编译调用的库链接 i. # strings /usr/lib/libstdc++.so.6 | grep GLIBC 结果的最后一句话:GLIBCXX_3.4 没有GLIBCXX_3.4.9 ii. # ls -l /usr/lib/libstdc++.so.6 结果链接(快捷方式)为/usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.8 iii. # rm –rf /usr/lib/libstdc++.so.6 -> libstdc++.so.6.0.8 iv. #ls -l /usr/lib/libstdc++.so.6出现:/usr/lib/libstdc++.so.6:没有那个文件或目录 v. 把(资源)libstdc++.so.6.0.10放入/usr/lib中 vi. 重新做链接#ln -s /usr/lib/libstdc++.so.6.0.10 /usr/lib/libstdc++.so.6c) 建立工作目录,拷贝源代码包在/opt/FriendlyARM/mini2440 目录下建立madplay 目录,并以此为工作目录,并在该目录中建立以下子目录,以存放不同的文件:#cd /opt/FriendlyARM/mini2440#mkdir madplay#cd madplay#mkdir tarball src-x86 src-arm target-x86 target-arm目录说明:tarball 目录用来存放所有的源代码包src-x86 目录用来存放X86 版本的所有源代码文件src-arm 目录用来存放ARM 版本的所有源代码文件target-x86 目录是X86 版本的安装目录target-arm 目录是ARM 版本的安装目录1. 接下来把从网上下载到的源代码包(四个)放入 tarball 目录中。2. 解压原代码包#cd tarball# for f in $(ls *.tar.gz); do tar xvzf $f –C ../src-x86 ; done(手打命令)3. 编译madplay 所依赖的库文件a) libid3tag#cd ../src-x86/libid3tag-0.15.1b#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86#make#make installb) libmad#cd ../ libmad-0.15.1b#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86#make#make install如果编译时出现错误:cc1: error: unrecognized command line option “-fforce-mem”解决办法:其实这个错误是编译安装libmad时候引起的,audacity包含libmad解决方式是:找到libmad configure之后的Makefile,vi Makefile找到包含"-fforce-mem"字符串,将其删除,就ok了原因是gcc 4.4 或者更高版本,已经将其去除了,所以会出现上面的错误! 以上过程完毕,将在 target-x86 目录出现编译madplay 所依赖的库文件和头文件。如下: 4. 编译安装madplay如果我们还是像刚才那样配置编译选项:#cd madplay-0.15.2b#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86将会出现如图错误: 提示我们在配置 madplay 之前要先安装libmad,因为我们之前已经编译并安装了依赖库,根据提示我们要设置CPPFLAGS 环境变量,采用如下参数重新配置:#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86 CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-x86/include注意:上面的四行是一条命令运行结果如图所示: 提示告诉我们还要设置 LDFLAGS 环境变量,因此再次修改配置参数如下:#cd ../src-x86/madplay-0.15.2b#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86 CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-x86/include LDFLAGS=-L/opt/FriendlyARM/mini2440/madplay/target-x86/lib 注意:上面六行是一条命令执行结果如下: 这说明配置已经成功,生成了编译所需要的 Makefile 文件,输入一下命令开始编译安装:#make#make install执行完毕, 可执行文件将被安装在我们指定的目录/opt/FriendlyARM/mini2440/madplay/target-x86 目录中:#ls target-x86/binabxtest madplay其中abxtest 是附加生成的测试程序,不必理会。5. 测试PC 版的madplay拷贝一首mp3 文件到madplay 所在的目录,执行:#./madplay test.mp3如果你的声卡已经正确安装,就可以听到mp3 的声音了。6. 构建并修正ARM 版本的编译脚本build-arm将脚本放在/opt/FriendlyARM/mini2440/madplay下)我给它命名为mm.sh#!/bin/shMADPLAY_DIR=/opt/FriendlyARM/mini2440/madplaySRC_DIR=src-armTARGET_DIR=$MADPLAY_DIR/target-armtar xvzf ./tarball/libid3tag-0.15.1b.tar.gz -C $SRC_DIRtar xvzf ./tarball/libmad-0.15.1b.tar.gz -C $SRC_DIRtar xvzf ./tarball/madplay-0.15.2b.tar.gz -C $SRC_DIRtar xvjf ./tarball/zlib-1.2.5.tar.bz2 -C $SRC_DIRexport CC=arm-linux-gcccd $SRC_DIR/zlib-1.2.5./configure --prefix=$TARGET_DIRmake && make installcd ../..cd $SRC_DIR/libid3tag-0.15.1b./configure --host=arm-linux --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/includeLDFLAGS=-L$TARGET_DIR/libmake;make installcd ../../cd $SRC_DIR/libmad-0.15.1b./configure --host=arm-linux --prefix=$TARGET_DIRmake;make installcd ../..cd $SRC_DIR/madplay-0.15.2b./configure --host=arm-linux --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/includeLDFLAGS=-L$TARGET_DIR/libmake;make installcd ../../ 运行后生成madplay和lib文件。7. 下载madplay 到开发板运行测试为了区别于板子中已经存在的 madplay,我们把新做的改名为mymadplay,把它以及依赖库通过 tftp 下载到开发板,并作如下放置:执行文件:mymadplay 放在/bin/目录 库文件放在/lib 目录。步骤如下:一、 将Linux中的要放到开发板中的东西先弄到PC上面 1.首先要修改开发板的IP #cd etc #vi eth0-setting 改IP网关,保存退出 #cd init.d #vi ifconfig-eth0 在最后的几行里找到IP修改,保持退出 #reboot 重启一下!二、 打开tftp软件选择PC机的IP地址同时选择文件所在的位置à可以查看文件三、 在开发板中输入命令:a) cd /bin/b) tftp –g –r mymadplay PC的IP c) cd /libd) tftp –g –r 库里面的文件 PC的IP (一个一个的传,当遇到pkgconfig文件夹时就在板子上面创一个pkgconfig文件夹,进入文件夹后继续下载库文件)四、 在/bin文件夹中给 mymadplay 777 权限,即可使用播放器了#./ mymadplay 1.mp3 就会显示如下图所示↓↓↓