|
項(xiàng)目需要,需要將Mplayer移植到開(kāi)發(fā)板上,所以今天花了一下下午成功移植,其中參考很多文檔,后發(fā)現(xiàn)許多文檔陳舊,些許文檔有少量錯(cuò)誤,所以這里整理一下放出來(lái)。經(jīng)過(guò)測(cè)試,avi、mp3等音視頻播放流暢,運(yùn)行正常,下面就是移植過(guò)程,給大家做參考。測(cè)試步驟我覺(jué)得沒(méi)必要放上來(lái),請(qǐng)見(jiàn)諒。作者lcc76161113,歡迎轉(zhuǎn)載。
編譯器:arm-linux-gcc(4.3.2)
Pc平臺(tái):ubuntu
在移植之前有必要先說(shuō)明一下幾個(gè)問(wèn)題:
Mplayer是自帶的mp3lib庫(kù)來(lái)進(jìn)行mp3解碼的,但是arm系列的cpu,一般都沒(méi)浮點(diǎn)運(yùn)算單元,而mplayer的mp3解碼默認(rèn)使用mp3lib,這個(gè)是浮點(diǎn)運(yùn)算庫(kù),arm上肯定跑不了。所以使用libmad庫(kù)應(yīng)該就沒(méi)問(wèn)題了,所以需要提前移植libmad庫(kù)。
(1)準(zhǔn)備工作
①下載庫(kù)文件libmad-0.15.1b.tar.gz并解壓到 /usr/local/libmad
②下載Mplayer的tar包,官方下載地址http://www.mplayerhq.hu,進(jìn)去后在ftp里面很多版本可以選,我選的最新的MPlayer-1.0rc4.tar.gz,大小12.3M。
③準(zhǔn)備編譯前請(qǐng)先確定已安裝交叉編譯器arm-linux-gcc(4.3.2),并已經(jīng)在終端設(shè)置好環(huán)境變量,做好這些就可以開(kāi)始移植工作了。
(2)編譯libmad
①先下載壓縮包到本地,并解壓libmad-0.15.1b.tar.gz到/usr/local/libmad:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/libmad # tar zxvf mysql-5.1.51.tar.gz
②進(jìn)入解壓得到的源碼目錄中:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/libmad # cd libmad-0.15.1b
③運(yùn)行configure,生成makefile:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/libmad/libmad-0.15.1b #./configure CC=arm-linux-gcc --host=arm-linux --disable-shared --disable-debugging --prefix=/usr/local/libmab/mad
④修改makefile:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/libmad/libmad-0.15.1b #./gedit Makefile
找到里面的“--fforce-mem”,然后刪除保存退出即可
⑤直接開(kāi)始運(yùn)行make編譯源代碼:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/libmad/libmad-0.15.1b # make
(3)交叉編譯Mplayer
①先下載壓縮包到本地,并解壓MPlayer-1.0rc4.tar.gz到/usr/local/mplayer:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/mplayer # tar zxvf MPlayer-1.0rc4.tar.gz
②進(jìn)入解壓得到的源碼目錄中:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/mplayer # cd MPlayer-1.0rc4
③運(yùn)行configure,生成makefile:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/mplayer/ MPlayer-1.0rc4#
./configure --host-cc=gcc --cc=arm-linux-gcc --target=arm-linux --enable-fbdev --enable-static --disable-dvdread --disable-live --disable-mp3lib --enable-mad --disable-win32dll --disable-mencoder --disable-ivtv --disable-dvdnav --disable-dvdread-internal --disable-libdvdcss-internal --enable-libavcodec_a --prefix=/usr/local/Mplayer/mplayer 2>&1 | tee logfile
這個(gè)就是我的配置內(nèi)容,這里詳細(xì)說(shuō)明一下:
--host-cc=gcc --cc=arm-linux-gcc --target=arm-linux //這個(gè)不需要解釋
--enable-fbdev //打開(kāi)framebuffer支持.ARM開(kāi)發(fā)板必須的
--enable-static //靜態(tài)編譯,編譯成功后只需要將exe文件拷走即可以使用
--disable-dvdread --disable-dvdnav --disable-dvdread-internal //全部與DVD相關(guān),無(wú)視即可
--disable-libdvdcss-internal //這個(gè)不加低版本mplayer也會(huì)出錯(cuò)
--disable-live //禁止流媒體,我們用不到
--disable-mp3lib --enable-mad //關(guān)閉默認(rèn)的MP3解碼庫(kù),使用我們剛才編譯的libmad
--disable-win32dll //禁用win32動(dòng)態(tài)鏈接庫(kù)支持
--disable-mencoder //交叉編譯mencoder會(huì)有問(wèn)題,而且arm上不需要這個(gè)功能
--disable-ivtv //如果不加會(huì)出現(xiàn)ivtv文件產(chǎn)生的錯(cuò)誤
--enable-libavcodec_a //啟用靜態(tài)的libavcodec解碼
--prefix=/usr/local/Mplayer/mplayer 2>&1 | tee logfile //不解釋
特別說(shuō)明:
注意!!configure里面沒(méi)有下面2句:
--enable-static --with-extraincdir=/usr/local/libmab/mad/include
--with-extralibdir=/usr/local /libmab/mad/lib
本來(lái)是還要有這2句話來(lái)指定我們編譯的新的libmad的庫(kù)的,但是由于新下載的mplayer源代碼在配置的時(shí)候--with-extraincdir –with-extralibdir提示沒(méi)有此配置選項(xiàng),因此需手動(dòng)添加libmad庫(kù)的支持,我的解決方法是將/ usr/local /libmab/mad/include下文件直接拷貝到mplayer源代碼中,而對(duì)于其下面的庫(kù)libmad.a,則先執(zhí)行上面的“運(yùn)行configure”一步,會(huì)生成config.mak文件,然后修改config.mak中在-lmad -L/usr/local /libmab/mad/lib,然后執(zhí)行下一步即可。
④修改Makefile.
修改MPlayer-1.0rc4/libmpeg2/motion_comp_arm_s.S文件
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/mplayer/ MPlayer-1.0rc4#
gedit /libmepg2/motion_comp_s.S
在最前加入:
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
⑤直接開(kāi)始運(yùn)行make編譯源代碼:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/mplayer/ MPlayer-1.0rc4# make
⑥Make完成后,執(zhí)行makeinstall命令,但是我遇到了如下問(wèn)題:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/mplayer/ MPlayer-1.0rc4# make install
install -m 755 -s mplayer /home/hxy/MPlayer/
MPlayer-1.0rc4/../mplayer/bin
strip: Unable to recognise the format of the input file
`/user/local/Mplayer/MPlayer-1.0rc4/../mplayer/bin/mplayer'
解決方法:
查資料看install帶-s 參數(shù)時(shí)會(huì)自動(dòng)調(diào)用strip來(lái)strip應(yīng)用程序。但是arm編譯時(shí)要調(diào)用arm-linux-strip才有正確處理。解決辦法是取消-s參數(shù),查看Makefile可以發(fā)現(xiàn)-s是如下
$(INSTALL) -m 755 $(INSTALLSTRIP) mplayer$(EXESUF) $(BINDIR)
的INSTALLSTRIP設(shè)置的,它默認(rèn)是-s,因此只要簡(jiǎn)單在Makefile的install部分前面加入:
INSTALLSTRIP := #將其置為空即可
⑥再次執(zhí)行makeinstall命令,生成mplayer:
[email=lcc@ubuntu]lcc@ubuntu[/email]: /usr/local/mplayer/ MPlayer-1.0rc4# make install
附帶一個(gè)只有圖像沒(méi)有聲音的錯(cuò)誤解決辦法:
mkdir -p /dev/sound
ln -s /dev/dsp /dev/sound/
原因:目標(biāo)系統(tǒng)上有 /dev/dsp 音頻設(shè)備文件,只是OSS音頻驅(qū)動(dòng)需要的是 /dev/sound/dsp 設(shè)備文件,這問(wèn)題的簡(jiǎn)單解決方法是建一個(gè)符號(hào)鏈接,當(dāng)然這兩條命令可以寫(xiě)在系統(tǒng)的啟動(dòng)文件的適當(dāng)位置,即修改系統(tǒng)的/etc/init.d/rcS文件。
至此,mplayer已經(jīng)交叉編譯成功,放在板子上測(cè)試一切正常。 |
|