MP3移植到mini2440
2010-12-20 by 雨焰
一、 环境
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=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 ../../
运行后生成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 就会显示如下图所示↓↓↓