Linux下mplayer的移植
實驗準備:libmad-0.15.1b.tar.gz,MPlayer-1.0rc4.tar
下載地址如下:https://pan.baidu.com/s/1RSc-NcsgvYQymbCj5oNd_w
MP3的移植過程:
一.將開發板與宿主機連線
1.usb轉串列埠驅動下載。將usb-串列埠線連線到pc機,利用驅動精靈等安裝驅動。驅動安裝完成後開啟裝置管理器,檢視該埠的編號(一般為COM3)。如果驅動安裝成功則會顯示Prolific USB-to-Serial Comm Port(COM3)Prolific USB-to-Serial Comm Port(COM3),否則則會出現黃色感嘆號。接下來右鍵點選該裝置的屬性,點選埠設定,設定位/秒:115200,資料位:8,奇偶校驗:無,停止位:1,流控制:無。
2.利用X-shell連線開發板。在pc機的Windows環境下開啟X-shell,點選新建,建立新的連線,使得X-shell進入開發板的控制介面。新建連線名設定為開發板,協議改為SERIAL,點選SERIAL,將串列埠連線設定和開發板一樣。進入X-shell,重新啟動開發板,則進入開發板的系統。
二.進行nfs掛載
1.進入X-shell,在開發板終端輸入ifconfig檢視開發板相關資訊。並用ifconfig將開發板的ip地址設定為和宿主機處於同一網段,確保nfs能夠成功掛載。假如宿主機的ip地址為10.215.45.26,那麼利用ifconfig eth0 10.215.45.66 netmask 255.255.0.0(設定開發板的ip地址)
2.網路聯通後進行nfs服務的配置,即在宿主機終端輸入vim /etc/exports,輸入/nfsroot 192.168.0.1 (rw sync )退出儲存。設定成功後輸入/etc/init.d/iptables stop,關閉宿主機的防火牆;輸入setenforce 0關閉SElinux服務,輸入/etc/init.d/nfs restart重啟nfs服務。在開發板終端下輸入mountnfs 10.215.45.26:/nfsroot /mnt/nfs
三.移植limad庫
libmad是一個開源mp3解碼庫 ,對mp3解碼演算法做了很多優化,效能較好,很多播放器如mplayer、xmms等都是使用這個開源庫進行解碼的;如果要設計mp3播放器而又不想研究mp3解碼演算法的話, libmad是 個不錯的選擇。
MAD (libmad) 是一個 開源的高精度MPEG頻解碼庫,支援MPEG-1 (Layer I, Layer II和Layerll (也就是MP3)。LIBMAD 提供24-bit的PCM輸出,完全是定點計算,非常適合沒有浮點支援的平臺上使用。使用libmad提供的一系列API,就可以非常簡單地實現MP3資料解碼工作。在libmad的原始碼檔案目錄下的mad.h檔案中,可以看到絕大部分該庫的資料結構和API等。
接下來,我們利用VMware下的共享資料夾將Windows下載的libmad-0.15.1b.tar.gz複製到宿主機,然後其存放路徑。
輸入cp libmad-0.15.1b.tar.gz /nfsroot/mp3,將壓縮包複製到/nfsroot/mp3。
進入/nfsroot/mp3目錄,輸入tar xvzf libmad-0.15.1b.tar.gz將壓縮包解壓到當前資料夾。解壓成功後產生libmad-0.15.1b資料夾,輸入cd /libmad-0.15.1b進入該資料夾。
執行configure進行配置生成Makefile檔案。
輸入./configure CC=arm-linux-gcc --host=arm-linux --disable-shared --disable-debugging --prefix=/nfsroot/mp3/yaffs
配置之後該資料夾下生成了Makefile檔案。
輸入vim Makefile對Makefile檔案進行修改。
進入Makefile之後,進入末行模式,輸入:g/-fforce-mem,找到這句話之後將其刪除,否則將提示unrecognized command line option "-fforce-mem"。因為gcc版本不同,高版本的gcc不再支援該語句,因此將其刪除。
之後進行編譯安裝。
make
make install
編譯安裝之後,將會在—perfix指定的目錄下產生yaffs目錄,目錄下包含兩個子目錄,include和lib。其中,lib放置的是編譯mplayer會用到的庫函式,include下則是編譯用到的標頭檔案。
四.Mplayer的移植
同理將MPlayer-1.0rc4.tar複製到/nfsroot/mp3並解壓。
輸入tar xvzf MPlayer-1.0rc4.tar,成功之後將會產生Mplayer-1.0rc4目錄。
進入MPlayer-1.0rc4目錄,執行configure進行配置生成Makefile檔案。
輸入./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=/nfsroot/mp3/yaffs 2>&1 | tee logfile
配置資訊解釋:
--host-cc=gcc --cc=arm-linux-gcc --target=arm-linux
--enable-fbdev //開啟framebuffer支援ARM開發板必須的
--enable-static //靜態編譯,編譯成功後只需要將exe檔案拷走即可以使用
--disable-dvdread --disable-dvdnav --disable-dvdread-internal //全部與DVD相關,無視即可
--disable-libdvdcss-internal //這個不加低版本mplayer也會出錯
--disable-live //禁止流媒體,我們用不到
--disable-mp3lib --enable-mad //關閉預設的MP3解碼庫,使用我們剛才編譯的libmad
--disable-win32dll //禁用win32動態連結庫支援
--disable-mencoder //交叉編譯mencoder會有問題,而且arm上不需要這個功能
--disable-ivtv //如果不加會出現ivtv檔案產生的錯誤
--enable-libavcodec_a //啟用靜態的libavcodec解碼
--prefix=/usr/local/Mplayer/mplayer 2>&1 | tee logfile
執行configure之後會產生一些檔案及目錄,我們需要對其進行配置。
剛才編譯libmad庫產生的檔案是必須的,因此我們需要在此時將其新增到編譯檔案中,具體操作如下:
輸入vim config.mak,進入末行模式,輸入:g/-lmad,找到該語句之後在後面加上
-L/nfsroot/mp3/yaffs/lib,儲存退出。
修改MPlayer-1.0rc4/libmpeg2/motion_comp_arm_s.S檔案
vim libmpeg2/motion_comp_arm_s.S
在最前面加上
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
退出儲存。
修改Makefile檔案
vim Makefile
在末行模式輸入:g/INSTALLSTRIP,找到該語句之後在922行,也就是
install:$(INSTALL_TARGETS-yes)的前面加上INSTALLSTRIP := #
因為install帶-s 引數時會自動呼叫strip來strip應用程式。但是arm編譯時要呼叫arm-linux-strip才有正確處理。解決辦法是取消-s引數,檢視Makefile可以發現-s是如下
$(INSTALL) -m 755 $(INSTALLSTRIP) mplayer$(EXESUF) $(BINDIR)
的INSTALLSTRIP設定的,它預設是-s,因此只要簡單在Makefile的install部分前面加入:
INSTALLSTRIP := #將其置為空即可
接下來執行make 和 make install
執行成功之後,會在/nfsroot/mp3/yaffs下生成四個目錄,其中bin目錄下的mplayer就是生成的可執行檔案。複製一個.mp3檔案到該目錄下(我將檔名改為了1.mp3)。
進入開發板終端,插上耳機,進入到該目錄下,終端輸入./mplayer 1.mp3,能夠聽到聲音。友情提示,此時開發板的音樂為最大聲音,請做好準備。