1.下载
madplay_0.15.2b.orig.tar.gz:
http://download.csdn.net/detail/qin1174586290/6364773
http://madplay.sourcearchive.com/
libmad-0.15.1b.tar.gz:
http://download.csdn.net/detail/qin1174586290/6364767
http://www.linuxfromscratch.org/blfs/view/6.3/multimedia/libmad.html
libid3tag-0.15.1b.tar.gz:
http://download.csdn.net/detail/qin1174586290/6364763
zlib-1.2.8.tar.gz:
http://download.csdn.net/detail/qin1174586290/6364757
2. 创建一个安装目录
cd /work/projects/practices/335x/kernel_3.14.43/transplant/madplay
mkdir /work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install
3. zlib-1.1.4 库
进入 zlib-1.1.4目录
cd ../zlib-1.1.4
配置:
./configure --prefix= /work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install
修改
vi Makefile
CC=arm-linux-gnueabihf-gcc
LDSHARED=arm-linux-gnueabihf-gcc -shared -Wl,-soname,libz.so.1,--version-script,zlib.map
AR=arm-linux-gnueabihf-ar rc
RANLIB=arm-linux-gnueabihf-ranlib
CFLAGS=-O3 -DHAVE_UNISTD_H -DUSE_MMAP -fPIC 不加下一步可能会出错
安装
make clean;make && make install
4. libid3tag-0.15.1b 库
进入libid3tag-0.15.1b 目录
cd ../libid3tag-0.15.1b
配置:
./configure --prefix= /work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install --host=arm-linux–gnueabihf CPPFLAGS=-I/work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install/include LDFLAGS=-L/work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install/lib
安装:make
编译时会发生如下错误:
install/lib/libz.a: could not read symbols: Bad value
collect2: error: ld returned 1 exit status
这时要重新编译上一个库zlib-1.1.4
回到上个zlib-1.1.4目录中
cd ../zlib-1.1.4/
vi Makefile
CFLAGS=-O3 -DHAVE_UNISTD_H -DUSE_MMAP -fPIC (就是在最后添加-fPIC选项)
重新编译安装
make clean;make && make install
5. libmad-0.15.1b 库
进入libmad-0.15.1b 目录
cd ../libmad-0.15.1b
配置
./configure --prefix= /work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install --host=arm-linux-gnueabihf CPPFLAGS=-I/work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install/include LDFLAGS=-L /work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install/lib --enable-speed
修改:
vi Makefile
将第129行中的 -fforce-mem 删除
否则,编译时会发生如下错误:
arm-linux-gnueabihf-gcc: error: unrecognized command line option '-fforce-mem'
安装:
make clean;make && make install
如果发生下面的错误 配置时需添加 --enable-speed
Assembler messages:ccrtagSq.s:2696: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'
ccrtagSq.s:2901: Error: selected processor does not support Thumb mode `rsc r8,r8,#0'
ccrtagSq.s:3580: Error: selected processor does not support Thumb mode `rsc r0,r0,#0'
ccrtagSq.s:3782: Error: selected processor does not support Thumb mode `rsc r8,r8,#0'
Makefile:383: recipe for target 'synth.lo' failed
make[2]: *** [synth.lo] Error 1
6. madplay-0.15.2b
进入 madplay-0.15.2b 目录
cd ../madplay-0.15.2b
配置:
./configure --prefix=/work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install --host=arm-linux-gnueabihf CPPFLAGS=-I/work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install/include LDFLAGS=-L/work/projects/practices/335x/kernel_3.14.43/transplant/madplay /install/lib
安装:
make clean;make && make install
7.拷贝
注:最后生成的静态链接的程序是在madplay-0.15.2b 目录下的madpaly-s,并非在安装目录install/bin/下
动态链接的文件在 install/bin/
将库文件install/lib 中libid3tag.so libid3tag.so.0 libid3tag.so.0.3.0 libmad.so libmad.so.0 libmad.so.0.2.1
复制到目标板lib目录中 (复制时要注意链接文件,cp命令要加上-rfa)。
注:网上说拷贝到/usr/sbin 经测试发现会出现找不到库
madplay: error while loading shared libraries: libmad.so.0: cannot open shared object file: No such file or directory
保险起见 可以打包进文件系统,然后解压
最后在播放测试时报错,如下:
audio: /dev/dsp: No such file or directory
重配置内核
<*>Device Drivers--->
<*>sound card support --->
<*>advanced linux soune architecture -->
<*>OSS Mixer API
<*>OSS PCM (digital audio) API
编译运行
此时播放测试又报错,如下:
ASoC: unmatched rate symmetry: 8000 – 44100
output: ioctl(SNDCTL_DSP_SPEED): Invalid argument
这要修改内核驱动代码
打开\sound\soc\davinci\davinci-mcasp.c文件
修改:#define DAVINCI_MCASP_RATES SNDRV_PCM_RATE_8000_192000
#define DAVINCI_MCASP_RATES SNDRV_PCM_RATE_44100
保存重新编译内核
8.测试
madplay why-would-I-ever.mp3
网上说配置的时候加上 --disable-shared --enable-static 可以静态编译 测试未成功
在最后编译 madplay-0.15.2b 运行下面的
arm-linux-gnueabihf-gcc -Wall -O2 -fomit-frame-pointer -o madplay-s madplay.o getopt.o getopt1.o version.o resample.o filter.o tag.o crc.o rgain.o player.o audio.o audio_aiff.o audio_cdda.o audio_hex.o audio_null.o audio_raw.o audio_snd.o audio_wave.o audio_oss.o -L/work/projects/practices/madplay/install/lib /work/projects/practices/madplay/install/lib/libmad.a /work/projects/practices/madplay/install/lib/libid3tag.a -lz -lm –static
可以生成一个含有静态库的madplay 测试未成功
参考: http://www.openedv.com/thread-70557-1-1.html