您的位置:首页 > 运维架构 > Linux

Madplayer移植到mini2440

2012-09-30 12:59 176 查看
2012-08-12 21:06 80人阅读 评论(0) 收藏 举报

今天在老师给的给的cramfs文件系统里发现了一个简单的MP3播放器程序,是对madplayer的简单调用,于是心血来潮,也想要在mini2440的板子上移植一下,一个下午就弄好了,多亏了下面的这篇文章,讲的很清楚,虽然有一些瑕疵,但瑕不掩瑜

转载自http://blog.csdn.net/f839903061/article/details/6096922

一、         环境

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 (编译器的替换库)(转载者注:我下载了个34kB的没有成功,使用后面的这个929KB的成功了http://download.csdn.net/download/xingxinglili/2912718)
注:目前madplay的官方网站是http://www.underbit.com/products/mad/
透过该网站的介绍可以得知, 它还需要libmad 和libid3tag 两个库, 从该网站找到下载连接 http://sourceforge.net/project/showfiles.php?group_id=12349 b)      编译器
                       i.              arm-linux-gcc-4.4.3.tar.gz
c)       传输工具
                       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/bin
expotr  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.6
c)       建立工作目录,拷贝源代码包
在/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 install
b) 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-x8
6/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/bin
abxtest madplay
其中abxtest是附加生成的测试程序,不必理会。
5.     测试PC版的madplay
拷贝一首mp3文件到madplay所在的目录,执行:
#./madplay test.mp3
如果你的声卡已经正确安装,就可以听到mp3的声音了。
6.     构建并修正ARM版本的编译脚本build-arm
将脚本放在/opt/FriendlyARM/mini2440/madplay下)我给它命名为mm.sh
#!/bin/sh
MADPLAY_DIR=/opt/FriendlyARM/mini2440/madplay
SRC_DIR=src-arm
TARGET_DIR=$MADPLAY_DIR/target-arm
tar xvzf ./tarball/libid3tag-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/libmad-0.15.1b.tar.gz -C $SRC_DIR
tar xvzf ./tarball/madplay-0.15.2b.tar.gz -C $SRC_DIR
tar xvjf ./tarball/zlib-1.2.5.tar.bz2 -C $SRC_DIR
export CC=arm-linux-gcc
cd $SRC_DIR/zlib-1.2.5
./configure --prefix=$TARGET_DIR
make && make install
cd ../..
cd $SRC_DIR/libid3tag-0.15.1b
./configure --host=arm-linux --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include
LDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../
cd $SRC_DIR/libmad-0.15.1b
./configure --host=arm-linux --prefix=$TARGET_DIR
make;make install
cd ../..
cd $SRC_DIR/madplay-0.15.2b
./configure --host=arm-linux --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include
LDFLAGS=-L$TARGET_DIR/lib
make;make install
cd ../../ 

(转载者注:编译时可能出现“-fforce-mem”的错误,请到MakeFile中删除“-fforce-mem”,我用这个脚本编译时,libmad并没有生成在它指定的文件夹里,而是生成在/lib中,估计是复制粘贴时哪边不小心搞错了,只好手动敲了一遍。同时请各位注意版本号,如果不是上面的版本请做相应修改)

运行后生成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  /lib
d)   tftp –g –r库里面的文件 PC的IP  (一个一个的传,当遇到pkgconfig文件夹时就在板子上面创一个pkgconfig文件夹,进入文件夹后继续下载库文件)
四、   在/bin文件夹中给 mymadplay
777权限,即可使用播放器了
#./ mymadplay 1.mp3 就会显示如下图所示↓↓↓  (转载者注:此处原文就没图)
(转载者注:如果是自己做的文件系统可能还需要添加一些其他的库比如说ld-linux、libc、libm等等(libm好像在4.4.3的交叉编译器的库文件夹里找不到,我是直接用3.3.2里的),可能也要添加一些设备文件如mixer c 14 0)
无聊整理了个bash脚本一步完成x86环境的编译安装(只要把这个脚本和那四个压缩文件放一块儿,然后执行一下就好了,如果版本不同或是想放在不同的文件夹,请自行修改):

[plain] view
plaincopy

#!/bin/sh  

  

mkdir /opt/FriendlyARM  

mkdir /opt/FriendlyARM/mini2440  

mkdir /opt/FriendlyARM/mini2440/madplay  

mkdir /opt/FriendlyARM/mini2440/madplay/tarball  

cp *.tar.gz /opt/FriendlyARM/mini2440/madplay/tarball  

echo cd /opt/FriendlyARM/mini2440/madplay  

cd /opt/FriendlyARM/mini2440/madplay  

echo mkdir src-x86 src-arm target-arm target-x86  

mkdir src-x86 src-arm target-arm target-x86  

cd tarball  

for f in $(ls *.tar.gz); do tar xvzf $f -C ../src-x86 ; done  

cd ../src-x86/libid3tag-0.15.1b/  

./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86  

make  

make install  

cd ../libmad-0.15.1b  

./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86  

make  

make install  

cd ../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  

make  

make install  
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息