1. 程式人生 > >Linux下mplayer的移植

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地址)

將開發板的ip地址和宿主機保持同一網段(前三位數相同),進入開發板終端輸入ping 10.215.45.26,進入宿主機輸入ping 10.215.45.66檢查網路是否聯通。

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

將開發板的/mnt/nfs/目錄和宿主機的/nfsroot目錄掛載。如果輸入之後沒有回顯資訊,則掛載成功。進入開發板的/mnt/nfs目錄,檢視是否和宿主機的/nfsroot目錄下的檔案是否相同並建立mp3資料夾用以此次實驗。

 

三.移植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 :=  #將其置為空即可

 

接下來執行makemake install

執行成功之後,會在/nfsroot/mp3/yaffs下生成四個目錄,其中bin目錄下的mplayer就是生成的可執行檔案。複製一個.mp3檔案到該目錄下(我將檔名改為了1.mp3)。

進入開發板終端,插上耳機,進入到該目錄下,終端輸入./mplayer 1.mp3,能夠聽到聲音。友情提示,此時開發板的音樂為最大聲音,請做好準備。