【转】Madplay移植-MINI2440这样我们就得到了移植 madplay 所需要的关键的四个文件:madplay-0.15.2b.tar.gz libmad-0.15.1b.tar.gz libid3tag-0.15.1b.tar.gz zlib-1.2.3.tar.gz http://linux./soft/907.htm zlibc的下载地址 我们就先在PC 上开始。 (1)建立工作目录,拷贝源代码包 在/opt/FriendlyARM/QQ2440 目录下建立madplay 目录,并以此为工作目录,并在该目 录中建立以下子目录,以存放不同的文件: #cd /opt/FriendlyARM/QQ2440 #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 版本的安装目录 接下来把从网上下载到的源代码包放入 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/QQ2440/madplay/target-x86 #make #make install b) libmad #cd ../ libmad-0.15.1b #./configure --prefix=/opt/FriendlyARM/QQ2440/madplay/target-x86 #make #make install 以上过程完毕,将在 target-x86 目录出现编译madplay 所依赖的库文件和头文件。 (4)编译安装madplay 如果我们还是像刚才那样配置编译选项: #cd madplay-0.15.2b #./configure --prefix=/opt/FriendlyARM/QQ2440/madplay/target-x86 CPPFLAGS=-I/opt/FriendlyARM/QQ2440/madplay/target-x86/include LDFLAGS=-L/opt/FriendlyARM/QQ2440/madplay/target-x86/lib 执行结果如下: 这说明配置已经成功,生成了编译所需要的 Makefile 文件,输入一下命令开始编译安 装: #make #make install 执行完毕, 可执行文件将被安装在我们指定的目录 /opt/FriendlyARM/QQ2440/madplay/target-x86 目录中: #ls target-x86/bin abxtest madplay 其中abxtest 是附加生成的测试程序,不必理会。 (5)测试PC 版的madplay 拷贝一首mp3 文件到madplay 所在的目录,执行: #./madplay test.mp3 如果你的声卡已经正确安装,就可以听到mp3 的声音了。 (6)构建编译脚本build-x86 通过以上步骤,我们看到配置和编译不仅有一定的顺序,还需要注意一些安装细节, 虽然这次编译通过了,但不免以后会忘记这个过程,特别是当程序更加复杂的时候,因此我 们要养成好习惯,把整个过程构建为一个脚本,以后只要执行这个脚本就可以完成所有步骤 了,如图所示是PC 版本madplay 的构建脚本,该脚本位于madplay 工作目录的根目录: #!/bin/sh #This build script is for madplay under PC-Linux MADPLAY_DIR=/opt/FriendlyARM/QQ2440/madplay SRC_DIR=src-x86 TARGET_DIR=$MADPLAY_DIR/target-x86 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 cd $SRC_DIR/libid3tag-0.15.1b ./configure --prefix=$TARGET_DIR make;make install cd ../../ cd $SRC_DIR/libmad-0.15.1b ./configure --prefix=$TARGET_DIR make;make install cd ../.. cd $SRC_DIR/madplay-0.15.2b ./configure --prefix=$TARGET_DIR CPPFLAGS=-I$TARGET_DIR/include LDFLAGS=-L$TARGET_DIR/lib make;make install cd ../../ 下面开始交叉编译: 四、ARM-Linux(ARM版本) 1、解压源代码包 2、编译madplay及其所依赖的库文件 (1)设定编译器环境变量 (2)编译zlib,因为libid3tag依赖于这个库文件 然后make,make install,编译好之后就可以在上面prefix指定目录下的lib目录下找到libz.a这个库。 (3)编译libid3tag (4)编译libmad (5)编译madplay 但是,这样得到的是动态链接。如果在madplay-0.15.2b目录中执行arm-inux-gcc命令,并且在最后加上-static,运行以后就可以得到静态链接的程序,如(6)所示。 (6)静态链接 执行完毕后,动态链接可执行文件将被安装在我们指定的目录中:/opt/madplay/target-arm 使用file命令检查一下: # file /opt/madplay/src-arm/madplay-0.15.2b # arm-linux-readelf -d /opt/madplay/target-arm/bin/madplay 静态链接文件大小为922.2KB(944377字节),动态链接文件大小仅仅为285.8KB(292690字节),但是运行时需要某些动态库。 3、下载madplay到开发板运行测试 4、构建并修正ARM版本的编译脚本build-arm.sh 需要注意的是,并不是每个移植都需要做全面的环境变量修改,有些是不需要改的,这要根据实际情况,也就是系统提示信息来调整。 build-arm.sh #!/bin/sh 如果出现问题,看一下提示:多半是路径问题和解压缩没有成功,自己稍微改动一下就可以了。 PS: 在PC机和开发板上执行madplay程序的过程信息: 出现这些信息就成功了,音质还真不错,再加个图形界面和按键,就能做个MP3了! Madplay还有一些参数:比如-r循环播放,还可以进行格式转换: 功能很强大。 (7)构建并修正ARM 版本的编译脚本build-arm 既然我们已经构建了一个简单易用的编译脚本,现在就可以通过对它稍作修改来进行交叉编译了,这就是通常所说的移植。简单的移植只要重新指定一下编译器就可以了,可以 通过修改环境变量来实现。很多的移植所要修改的环境变量是 CC 编译器,系统默认为gcc, AR 库工具,用以创建和修改库,系统默认ar LD 链接器,系统默认为LD RANLIB 随机库创建器,系统默认为ranlib AS 汇编器,系统默认为as NM 库查看工具,系统默认为nm 还有一些不常用的其他环境变量,在此就不一一列举了。 需要注意的是,并不是每个移植都需要做全面的环境变量修改,有些是不需要改的, 这要根据实际情况,也就是系统提示信息来调整。 除了要修改编译器环境变量,一般还需要在配置中加入目标平台指定标识,在此为 “arm-linux”,完整的编译脚本如图: #!/bin/sh MADPLAY_DIR=/opt/FriendlyARM/QQ2440/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 xvzf ./tarball/zlib-1.2.3.tar.gz -C $SRC_DIR export CC=arm-linux-gcc cd $SRC_DIR/zlib-1.2.3 ./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 ../../ (8)下载madplay 到开发板运行测试 为了区别于板子中已经存在的 madplay,我们把新做的改名为mymadplay,把它以及依 赖库通过 ftp 下载到开发板,并作如下放置: 执行文件: mymadplay 放在 /usr/bin/目录 库文件: libid3tag.a libid3tag.la libid3tag.so libid3tag.so.0 libid3tag.so.0.3.0 libmad.a libmad.la libmad.so libmad.so.0 libmad.so.0.2.1 libz.a 放在/usr/lib 目录。 执行 注释:通过nfs拷贝容易出现问题,大文件会出错,用U盘拷贝也会出现问题,软连接无法拷贝。 但是我再此使用U盘拷贝没有问题,只是开发版的触摸屏没有反应。 ftp在linux下的使用过程:(1)在主机上开终端, #ftp SLAVE_IP登陆开发板,用户名密码都是plg, #bin ,修改传输类型; (2)#put file* 此命令将file*传送到开发板的/home/plg目录下,把所有需要的lib文件以及bin文件; #by (3)#minicom连上开发板, #cd /home/plg ,把所有传过来的文件转移到 /usr/lib和 /usr/bin下面去, #cd /usr/bin #madplay 00.mp3,运行。 另外一种编译方法: 1)用交叉编译工具编译zlib,并且把库生成到交叉编译环境的库目录下,我把它放到了/usr/local/madplayer目录下。 mkdir /usr/local/madplayer ./configure --prefix=/usr/local/madplayer make make install 编译好之后就可以在上面prefix指定的目录下/usr/local/madplayer/lib目录下找到libz.a这个库。 2)编译libid3tag 执行以下操作 ./configure CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc --prefix=/usr/local/madplayer --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/usr/local/madplayer/include LDFLAGS=-L/usr/local/madplayer/lib 其中,--disable-shared --enable-static是指定为静态编译。 make make install 3)编译libmad 执行以下操作 ./configure CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc --prefix=/usr/local/madplayer --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/usr/local/madplayer/include LDFLAGS=-L/usr/local/madplayer/lib make make install 4)编译madplay ./configure CC=/usr/local/arm/3.4.1/bin/arm-linux-gcc --prefix=/usr/local/madplayer --host=arm-linux --disable-debugging --disable-shared --enable-static CPPFLAGS=-I/usr/local/madplayer/include LDFLAGS=-L/usr/local/madplayer/lib make make install 把bin里面的和lib里面的拷贝到开发板,就可运行了。 如果这样: 执行以下的操作,在madplayer源码目录下面 文件夹下面将会生成madplayer静态编译的文件,大概900K,下载到开发板上面修改一下权限可以直接运行了 |
|