編譯移植Mplayer到mini2440開發板的過程及問題解決辦法
轉載地址:http://blog.sina.com.cn/s/blog_640531380100utiz.html
在網上搜了一下,實現linux下通用播發器Mplayer到mini2440開發板的編譯移植過程不算複雜。不過。由於各種原因,在編譯過程中總 會遇到許多問題,而多數問題從網上又都可以找得到答案。在此,結合本人親自移植經歷,將整個編譯移植過程和這個過程中遇到的問題及解決辦法整理一下,和大 家一起分享。
##################################################################################################
準備工作:
1、下載Mplayer的版本為:MPlayer-1.0rc2.tar.bz2 並將其解壓到linux主機的/opt資料夾下(任意資料夾都可以);
2、下載libmad的版本為: libmad-0.15.1b.tar.gz 並將其也解壓到/opt資料夾下;
3、交叉編譯器版本為:arm-linux-gcc-4.4.3
################################################################################################
libmad交叉編譯過程及問題解決辦法:
1、#cd /opt/libmad-0.15b
2 ./configure --prefix=/tmp/mplayer --enable-fpm=arm --host=arm-linux --disable-debugging --enable-shared --enable-static
CC=arm-linux-gcc (CC為交叉編譯工具,如果沒新增到環境變數,就要指定完整路徑)
3、 make
4、 make install
這時如果出現錯誤:cc1: error: unrecognized command line option “-fforce-mem”
(其實這個錯誤是編譯安裝libmad時候引起的,audacity包含libmad)
解決方式是:找到libmad configure之後的Makefile,並vi Makefile
去掉129行"-fforce-mem"字串,因為arm-eabi編譯器都不支援這個選項,將其刪除之後,就ok了
###############################################################################################
Mplayer交叉編譯過程及問題解決辦法:
1、#cd /opt/Mplayer-1.0rc2
2、./configure --prefix=/tmp/mplayer --cc=arm-linux-gcc --target=arm-linux --enable-static --disable-win32dll
--disable-dvdread --disable-dvdread-internal --disable-dvdnav --disable-libdvdcss-internal --disable-mencoder
--disable-mp3lib --disable-armv5te --disable-armv6 --enable-fbdev --enable-mad --enable-libavcodec_a
--enable-libavcodec_mpegaudio_hp --disable-iconv --enable-linux-devfs --disable-ivtv
--language=zh_CN --enable-cross-compile --enable-real --enable-ossaudio --host-cc=gcc --disable-live
--with-extraincdir=/opt/FriendlyARM/toolschain/4.4.3/lib/include
--with-extralibdir=/opt/FriendlyARM/toolschain/4.4.3/lib/lib 2>&1|tee logfile
引數解釋:
--prefix mplayer安裝路徑,make install 後就可以在本目錄下找到可執行程式mplayer
--cc 交叉編譯工具,如果沒新增到環境變數,就要指定完整路徑
--enable-static 設定靜態連線
--disable-win32dll 禁用win32動態連結庫支援。在pre版本中該引數為
--disable-dvdread 禁用libdvdread.
--enable-fbdev 支援fbdev,這個一定要選上。
--disable-mp3lib 和 --enable-mad
arm系列的cpu,一般都沒浮點運算單元,而mplayer的mp3解碼預設使用mp3lib,這個是浮點運算庫,在arm上肯定跑不了,使用 ffmp3或者libmad(需要外部庫libmad支援)應該就沒問題了。所以這裡需要禁止掉mencoder和使能libmad。
--disable-mencoder 禁止編碼功能
--disable-live 禁止live 555流媒體。
--enable-libavcodec_a 啟用靜態的libavcodec解碼。在pre版本中該引數為--enable-libavcodec。
--disable-armv5te --disable-armv6 禁用armv5te、armv6指令擴充套件。
--with-extraincdir和-with-extralibdir 指定libmad和mad.h的路徑
3、make
make完後如出現如下問題:
問題一:
---------------------------------------------------------------------------------------------------------------------------------------------
......
......
armv4l/jrevdct_arm.S: Assembler messages:
armv4l/jrevdct_arm.S:59: Error: no such instruction: `stmdb sp!,{r4 - r12,lr}@all callee saved regs'
armv4l/jrevdct_arm.S:61: Error: too many memory references for `sub'
armv4l/jrevdct_arm.S:62: Error: invalid char '[' beginning operand 2 `[ sp]@save the DCT pointer to the stack'
armv4l/jrevdct_arm.S:64: Error: invalid character '=' in operand 2
armv4l/jrevdct_arm.S:65: Error: expecting operand after ','; got nothing
armv4l/jrevdct_arm.S:66: Error: too many memory references for `add'
armv4l/jrevdct_arm.S:68: Error: no such instruction: `ldrsh r0,[lr,'
armv4l/jrevdct_arm.S:69: Error: no such instruction: `ldrsh r1,[lr,'
armv4l/jrevdct_arm.S:71: Error: junk at end of line, first unrecognized character is `@'
armv4l/jrevdct_arm.S:72: Error: junk at end of line, first unrecognized character is `@'
armv4l/jrevdct_arm.S:73: Error: no such instruction: `ldr r5,[lr,'
armv4l/jrevdct_arm.S:74: Error: no such instruction: `ldr r2,[lr,'
......
......
armv4l/jrevdct_arm.S:347: Error: no such instruction: `bne column_loop'
armv4l/jrevdct_arm.S:350: Error: junk at end of line, first unrecognized character is `@'
armv4l/jrevdct_arm.S:351: Error: too many memory references for `add'
armv4l/jrevdct_arm.S:352: Error: no such instruction: `ldmia sp!,{r4 - r12,pc}@restore callee saved regs and return'
make[1]: *** [armv4l/jrevdct_arm.o] 錯誤 1
make[1]: Leaving directory `/home/zazhgf/Mplayer/MPlayer-1.0rc2/libavcodec'
make: *** [libavcodec/libavcodec.a] 錯誤 2
----------------------------------------------------------------------------------------------------------------------------------------------------
解決辦法:
在報錯檔案MPlayer-1.0rc2/libmpeg2/motion_comp_arm_s.S和MPlayer-1.0rc2/libavcodec/armv4l/dsputil_arm_s.S兩個s.S檔案的開始處新增如下程式碼:
#ifndef HAVE_PLD
.macro pld reg
.endm
#endif
(這段程式碼意思是定義一個空的ARM彙編巨集 pld,這樣當程式碼出現pld指令,就變成一條空指令)
問題二:
------------------------------------------------------------------------------------------------------------------------------------------------------- vo_ivtv.c: In function 'ivtv_reset':
vo_ivtv.c:79: error: storage size of 'sd' isn't known
vo_ivtv.c:80: error: storage size of 'sd1' isn't known
vo_ivtv.c:84: error: 'IVTV_STOP_FL_HIDE_FRAME' undeclared (first use in this function)
vo_ivtv.c:84: error: (Each undeclared identifier is reported .ly .ce
vo_ivtv.c:84: error: for each function it appears in.)
vo_ivtv.c:87: error: 'IVTV_IOC_STOP_DECODE' undeclared (first use in this function)
vo_ivtv.c:97: error: 'IVTV_IOC_START_DECODE' undeclared (first use in this function)
vo_ivtv.c:80: warning: unused variable 'sd1'
vo_ivtv.c:79: warning: unused variable 'sd'
make[1]: *** [vo_ivtv.o] Error 1
make[1]: Leaving directory `/data1/wdy-tools/smplayer/MPlayer-1.0rc2/libvo'
make: *** [libvo/libvo.a] Error 2
-------------------------------------------------------------------------------------------------------------------------------------------------------------
解決辦法:
在 ./configure 時新增 --disable-ivtv 來解決(我的第2步中有這個引數)
問題三:
--------------------------------------------------------------------------------------------------------------------------------------------------------
undefined reference to `video_out_ivtv'
collect2: ld returned 1 exit status
---------------------------------------------------------------------------------------------------------------------------------------------------------
解決辦法:
開啟檔案 libvo/video_out.c,將其程式碼的以下部分:
#ifdef HAVE_DXR2
extern vo_functions_t video_out_dxr2;
#endif
extern vo_functions_t video_out_dxr3;
#ifdef HAVE_IVTV
extern vo_functions_t video_out_ivtv;
#endif
修改為:(紅色字型為新增部分)
#ifdef HAVE_DXR2
extern vo_functions_t video_out_dxr2;
#endif
#ifdef HAVE_DXR3
extern vo_functions_t video_out_dxr3;
#endif
#ifdef HAVE_IVTV
extern vo_functions_t video_out_ivtv;
#endif
(可能還會遇到別的問題,到網上搜去吧,大都能找得到答案)
4、重新make,應該就沒有問題
5、make install
這時如果出現以下問題:
-------------------------------------------------------------------------------------------------
install -m 755 -s mplayer /tmp/mplayer/bin
strip: Unable to recognise the format of the input file `/tmp/mplayer/bin/mplayer'
install: strip process terminated abnormally
make: *** [install-mplayer] 錯誤 1
---------------------------------------------------------------------------------------------------
不必理會,因為這時已經在/tem/mplayer/bin/下產生了可執行檔案mplayer了
###########################################################################################
將可執行程式mplayer移植到mini2440開發板的/usr/bin目錄下
(通過設定開發板使系統通過nfs啟動,然後掛載主機,進行移植)
###########################################################################################
在開發板下執行:# mplayer test.avi -framedrop -vf rotate=1 ,scale=240 : 320
在播放音訊或視訊檔案時會出現沒有聲音輸出的問題,終端提示
[AO OSS] audio_setup: Can't open audio device /dev/sound/dsp: No such file or dy
然而目標系統上有 /dev/dsp 音訊裝置檔案,只是OSS音訊驅動需要的是 /dev/sound/dsp 裝置檔案,簡單解決方法是建一個符號連結。
mkdir -p /dev/sound
ln -s /dev/dsp /dev/sound/
這樣問題就搞定了。可以把這兩條命令新增到目標系統的啟動檔案的適當位置,修改目標系統的 /etc/init.d/rcS 檔案。
再次# mplayer test.avi -framedrop -vf rotate=1 ,scale=240 : 320 就可以聽到聲音啦!
################################################################################################
到此,所有的工作已經完了,慢慢享受成功吧。嘿嘿。。。
相關文章
- Mysql安裝過程中遇到的問題及解決辦法MySql
- Android開發過程中遇到的問題以及解決辦法 how toAndroid
- PHP編譯錯誤及解決辦法PHP編譯
- matlab編譯exe問題具體解決辦法Matlab編譯
- 記一次wordpress安裝過程中遇到的問題及解決辦法
- Maven編譯出現“java.lang.OutOfMemoryError: Java heap space”問題及解決辦法Maven編譯JavaError
- 儲存過程被鎖無法編譯的解決儲存過程編譯
- JSP開發過程遇到的中文亂碼問題及解決方案JS
- 資料併發操作帶的的問題及解決辦法
- 虛擬化問題及解決辦法
- oracle壞塊問題及解決辦法Oracle
- 記一次Razor Pages無法編譯問題及解決編譯
- oracle儲存過程編譯死掉的原因及解決(zt)Oracle儲存過程編譯
- qt的工程,轉到vs後,中的檔案都編譯不過,解決辦法QT編譯
- i.MX8MP開發板移植驅動全過程
- web開發技巧-網頁排版佈局常見問題及解決辦法Web網頁
- cmake編譯問題解決編譯
- 從oracle817匯入到oracle10.2.0.4過程中發生的錯誤及解決辦法Oracle
- 解決主機板擋板無法安裝的問題
- Vmware vSphere常見問題及解決辦法
- Idea編譯錯誤解決辦法Idea編譯
- isNaN("abc")編譯報錯解決辦法NaN編譯
- 使用javamail發信過程中的一些問題及解決方法JavaAI
- mini2440 編譯u-boot-1.1.6遇到的一些問題編譯boot
- 【DataBase】:使用Oracle遇到的幾個問題及解決辦法DatabaseOracle
- 安裝DBD:MySql模組遇到的問題及解決辦法MySql
- Android開發中常見的5大記憶體洩漏問題及解決辦法Android記憶體
- 你遇到過的相容性問題以及解決辦法
- 開發過程中遇到問題該怎麼辦?
- 解決:JPEGImageEncoder編譯問題編譯
- 編譯OpenVPN及解決相關依賴問題編譯
- 安裝IE8後引發的兩個問題及解決辦法
- 快取過程存在的三大問題及解決方案快取
- 跨域問題解決辦法跨域
- Oracle儲存過程編譯卡死的解決方法Oracle儲存過程編譯
- OpenCV1.0編譯錯誤解決辦法OpenCV編譯
- HTC Vive遇到的問題解決辦法
- veritas netbackup的問題解決辦法