MP3播放器移植(二)
2010-12-22
靳玉斌
4. 播放器移植
1) 在根目录如下文件/opt/FriendlyARM/下建立mini2440,并在mini2440文件夹下建立madplay,再在madpalay文件夹下建立四个文件夹tarball src-x86 src-arm target-arm
(#cd /opt/FriendlyARM/)
(# mkdir mini2440)
(#cd mini2440)
(#mkdir madplay)
(#cd madplay)
(#mkdir tarball src-x86 src-arm target-arm)
2)把压缩包madplay-0.15.2b.tar.gz libid3tag-0.15.1b.tar.gz libmad-0.15.1b.tar.gz放入/opt/FriendlyARM/ mini2440/ madplay/ tarball
(#cp madplay-0.15.2b.tar.gz libid3tag-0.15.1b.tar.gz libmad-0.15.1b.tar.gz /opt/FriendlyARM/ mini2440/ madplay/ tarball )
3) 解压缩源代码madplay-0.15.2b.tar.gz libid3tag-0.15.1b.tar.gz libmad-0.15.1b.tar.gz
(#cd /opt/FriendlyARM/ mini2440/ madplay/ tarball)
(#for f in $(ls *.tar.gz); do tar xvzf $f –C ../src-x86 ; done)
4)编译madplay所依赖的库文件
a) libid3tag
(#cd /opt/FriendlyARM/mini2440/madplay/src-x86/libid3tag-0.15.1b)
(#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86)
(#make)
(#make install)
b) libmad
(#cd /opt/FriendlyARM/mini2440/madplay/src-x86/libmad-0.15.1b)
(#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86)
(#make)
(#make install)
由于gcc版本问题需要删除/opt/FriendlyARM/mini2440/madplay/target-x86/ libmad-0.15.1b/ Makefile文件中的"-fforce-mem"字符串
(#cd /opt/FriendlyARM/mini2440/madplay/target-x86/ libmad-0.15.1b/)
(#gedit Makefile)
以上过程完毕,将在target-x86目录出现编译madplay所依赖的库文件和头文件。
c)编译安装madplay
(#cd /opt/FriendlyARM/mini2440/madplay/src-x86/ madplay-0.15.2b)
(#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86)
将会出现如图错误:
提示我们在配置madplay之前要先安装libmad,因为我们之前已经编译并安装了依赖库,根据提示我们要设置CPPFLAGS环境变量,采用如下参数重新配置:
(#cd /opt/FriendlyARM/mini2440/madplay/src-x86/ madplay-0.15.2b)
(#./configure --prefix=/opt/FriendlyARM/mini2440/madplay/target-x86 CPPFLAGS=-I/opt/FriendlyARM/mini2440/madplay/target-x86/include)
运行结果如图所示:
设置LDFLAGS环境变量,因此再次修改配置参数如下
(#cd /opt/FriendlyARM/mini2440/madplay/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目录中:
(#cd /opt/FriendlyARM/mini2440/madplay/target-x86 )
(#ls bin)
abxtest madplay
其中abxtest是附加生成的测试程序,不必理会。
5、测试PC版的madplay
拷贝一首mp3文件到/opt/FriendlyARM/mini2440/madplay/target-x86/bin
执行:(#./madplay test.mp3)
注意:虚拟机中执行的文件夹为(/opt/FriendlyARM/mini2440/madplay/target-x86)
开发板中执行的文件夹为
(/opt/FriendlyARM/mini2440/madplay/target-arm)
此时在PC机上就可以听到音乐
6、构建并修正ARM版本的编译脚本build-arm
既然我们已经构建了一个简单易用的编译脚本,现在就可以通过对它稍作修改来进行交叉编译了,这就是通常所说的移植。简单的移植只要重新指定一下编译器就可以了,可以通过修改环境变量来实现。很多的移植所要修改的环境变量是
CC编译器,系统默认为gcc,AR库工具,用以创建和修改库,系统默认ar
LD链接器,系统默认为LDRANLIB随机库创建器,系统默认为ranlibAS汇编器,系统默认为asNM库查看工具,系统默认为nm还有一些不常用的其他环境变量,在此就不一一列举了。
需要注意的是,并不是每个移植都需要做全面的环境变量修改,有些是不需要改的,这要根据实际情况,也就是系统提示信息来调整。除了要修改编译器环境变量,一般还需要在配置中加入目标平台指定标识,在此为“arm-linux”,修改后的脚本如下:(将脚本放在/opt/FriendlyARM/mini2440/madplay下)
(#cd /opt/FriendlyARM/mini2440/madplay)
(#vi jiaoben)
#!/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 ../../
脚本生成后增加权限
(#chmod 777 jiaoben)
执行脚本
(#./jiaoben)
7、下载madplay到开发板运行测试
为了区别于板子中已经存在的madplay,把新做的madplay改名为mymadplay,复制依赖库
依赖库为/opt/FriendlyARM/mini2440/madplay/target-arm/lib
和/opt/FriendlyARM/mini2440/madplay/target-arm/bin/madplay
把lib和madplay从虚拟机复制到桌面并保存到U盘
在U盘中把madplay改名为mymadplay
8、使用U盘连接到开发板,并把U盘中的mymadplay文件复制到开发板中/usr/bin文件中
在开发板中操作
(#cp /udisk/mymadplay /usr/bin)
把U盘中的lib文件夹中的所有东西移动到开发板/lib
U盘lib文件夹中的文件有(libid3tag.alibid3tag.lalibid3tag.solibid3tag.so.0libid3tag.so.0.3.0libz.alibz.solibz.so.1libz.so.1.2.5 pkgconfig)其中pkgconfig是一个文件夹
pkgconfig文件夹中文件有(zlib.pc)
注意:开发板中文件夹是不能移动的,要一个一个文件移动
在U盘lib文件夹中还有一个文件夹pkgconfig,我们需要在开发板/lib中新建pkgconfig文件夹才能把U盘lib文件夹中pkgconfig文件夹中的zlib.pc复制到开发板/lib/pkgconfig中
在开发板中操作
(#cd /lib)
(#mkdir pkgconfig)
(#cd /udisk)
(#cp lib/pkgconfig/zlib.pc /lib)
(#cp lib/libid3tag.a /lib)
(#cp lib/libid3tag.la /lib)
(#cp lib/libid3tag.so /lib)
(#cp lib/libid3tag.so.0 /lib)
(#cp lib/libid3tag.so.0.3.0 /lib)
(#cp lib/libz.a /lib)
(#cp lib/ libz.so /lib)
(#cp lib/ libz.so.1 /lib)
(#cp lib/ libz.so.1.2.5 /lib)
向开发板里复制你喜欢的音乐到/usr/bin,就可以执行文件了,接着就听到美妙动听的音乐了。
例如:
(#cd /udisk/)
(#cp xd.mp3 /usr/bin)
(#cd usr/bin)
(#./mymadplay xd.mp3)
在这里MP3移植成功