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
http://www.zlib.net/
zlib-1.2.8.tar.gz:
http://download.csdn.net/detail/qin1174586290/6364757
http://www.zlib.net/
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