12、madplay的MP3播放器移植

来源:互联网 发布:数据库支持的数据类型 编辑:程序博客网 时间:2024/05/16 17:06

1、使能声卡

将对应开发板的内核拷贝到需要的目录下,开始配置内核,运行
#make menuconfig ARCH=arm
然后进去Device Driver->Sound Card Support->ALSA
选择片上的声卡ALSA for SoC audio support,选择对应芯片的声卡驱动
返回ALSA配置层,勾选OSS Mixer API和OSS PCM API


1.2、编译内核

#make uImage ARCH=arm CROSS_COMPILE=arm-linux-


1.3、下载内核,并启动

#tftp 31000000 uImage
#bootm 31000000
虚拟机tftp服务器的配置和运行见http://blog.csdn.net/u013181595/article/details/72566910



1.4、检查

查看设备文件dsp和mixer是否准备好,运行

#ls /dev/dsp
#ls /dev/mixer
如果有则安装成功,如果没有,说明内核没有把驱动文件编译进去,而是把它编译成了.ko文件
在内核中查看模块文件,运行
#ls /lib/modules/2.6.35.7-EmbedSky/
发现里面就有需要的声卡文件,把它装起来,运行
#insmod /lib/modules/2.6.35.7-EmbedSky/***
把和声卡相关的文件全部装起来,如果提示安装失败,是因为驱动模块相互依赖的,可以尝试先安装别的模块,知道全部安装完成

查看设备文件,可以发现全部都装起来了




2、移植嵌入式播放器

转自http://blog.chinaunix.net/uid-20539088-id-115750.html


madplay的移植需要以下的几个包:libid3tag-0.15.1b.tar.gz、libmad-0.15.1b.tar.gz、madplay-0.15.2b.tar.gz、zlib-1.2.3.tar.gz。其中前面的三个包可以在http://sourceforge.net/project/showfiles.php?group_id=12349中下载,后一个包可以在http://www.gzip.org/zlib/zlib-1.2.3.tar.gz中找到


2.1 建立工作目录、解压源代码包

# tar -zxvf zlib-1.2.3.tar.gz 
# tar -zxvf libid3tag-0.15.1b.tar.gz 
# tar -zxvf libmad-0.15.1b.tar.gz 
# tar -zxvf madplay-0.15.2b.tar.gz 


设定编译器环境变量
# export CC=arm-linux-gcc


2.2 编译zlib

因为libid3tag依赖于这个库文件

# ./configure --shared --prefix=${PWD}/_install


配置是为了产生Makefile文件,--prefix后是生成文件的存放路径,选择当前路径的_inttall(没有需要创建)
编辑Makefile文件,把编译器选项的CC、LDSHARED、CPP、AR、RANLIB加上arm-linux
目录下的Makefile文件,按以下内容修改并保存:
CC=arm-linux-gcc
AR=arm-linux-ar rcs
RANLIB=arm-linux-ranlib


然后make,make install,编译好之后就可以在上面prefix指定目录下的lib目录下找到libz.a这个库


编译
#make
#make install


2.3 编译libid3tag

# cd ../libid3tag-0.15.1b
# ./configure --host=arm-linux --prefix=${PWD}/_install
# make
# make install


2.4 编译libmad

# cd ../libmad-0.15.1b
# ./configure --host=arm-linux --prefix=${PWD}/_install
# make


有些情况由于交叉工具链不支持,会导致编译出错,提示没有--force-mem,把它删掉再编译
# make install


2.5编译madplay

# cd ../madplay-0.15.2b
# ./configure --host=arm-linux --prefix=${PWD}/_install
# make
# make install


3 、madplay的移植

把_install/bin目录下的madplay拷贝到根文件系统中的sbin目录下,

前提需要制作一个NFS的文件系统,并且在虚拟机上启动NFS,具体NFS文件系统的制作看我之前的博客,运行
#cp ${PWD}/_install/bin/madplay /home/unix/NO.3/3-rootfs/rootfs/sbin

这里要选择自己的路径


下载内核,并启动
#tftp 31000000 uImage
#bootm 31000000
发现开发板上的/sbin目录下包含了madplay


运行madplay,发现/bin/sh:madplay: not notfound,提示找不到madplay,什么原因呢?
这种问题非常常见,madplay已存在但是提示找不到madplay,是因为madplay用到的动态
连接库不存在,找不到。


在虚拟机下查看madplay需要哪些连接库,运行:
#arm-linux-readelf -d /opt/madplay/target-arm/bin/madplay
可以看到这里需要之前编译的4个动态连接库,依次把动态连接库拷贝到rootfs/lib中,分别进入3个解压后的文件,执行
#cp _install/lib/* /home/unix/NO.3/3-rootfs/rootfs/lib


把生成的文件全部拷贝到rootfs/lib目录下,注意这里3个文件里的生成文件都需要拷贝!
这里只解决了madplay需要的前2个动态连接库,下面的2个库是libm.so.6和libc.so.6,这2个是标准库里的math库和c库
从交叉工具链里拷贝即可,如果没有安装,需要下载并安装arm-linux-gcc-4.3.2.tgz,安装后,进入这个文件夹
#cd ***/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/
这里的***为安装包存放的路径,这个文件下有libm.so.6和libc.so.及其他各种通用库,全部拷贝到根文件系统中,运行
#cp *  /home/unix/NO.3/3-rootfs/rootfs/lib


在执行madplay时提示Illegal instruction,经过检查发现实库文件拷贝原来是libm.so.6和libc.so.6这两个库文件使用错误,
真正要拷贝的这两个库文件应该是在/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/armv4t/lib/下而不是在
/usr/local/arm/4.3.2/arm-none-linux-gnueabi/libc/lib/下


在运行madplay前,可以先拷贝mp3文件到根文件系统中,运行
#madplay 1.mp3
插入耳麦,就可以听到动听的歌声了

原创粉丝点击