嵌入式Linux自學階段性總結(5)

二 移植和編譯mscore-0.9.3

 

要成功編譯,必須下載編譯alsa-lib,因爲該工程中調用alsa-lib的頭文件,從官方網站上下載。解壓後不要編譯,否則會安裝在主機上,我們最終是要運行在嵌入式linux上的,這裏把源碼中的頭文件包含到mscore的編譯路徑中,然後交叉編譯alsa-lib,得到libasound.so庫文件,放到arm-linux-gcc的安裝目錄的lib中,交叉編譯alsa-lib的腳本:

CC=arm-linux-gcc

./configure -prefix="/usr/local/arm/3.4.1/arm-linux" --host=arm-linux --target=arm-linux –build=i386-linux

注意:不能有 --with-softfloat,不支持浮點運算,否則編譯出錯。

 

關於make的幾個選項的理解:

LDSHARED= CC_FOR_BUILD="arm-linux-gcc" CC="arm-linux-gcc" LD="arm-linux-ld" CPP="arm-linux-g++ -E" AR="arm-linux-ar rc" prefix="/usr/local/arm/3.4.1" CFLAGS="-fPIC"

其中,LD選項表示最後連接的時候,採用哪個版本的連接器。交叉編譯中如果只指定了arm-linux-gcc,那麼最後仍然使用主機ld,就會出現.o文件格式無法識別的問題。

 

然後編譯mscore-0.9.3,因爲該項目用到了cmake,必須在CMakeLists.txt中定義:

# Added by leo to cross compile.

set(CMAKE_C_COMPILER "/usr/local/arm/3.4.1/bin/arm-linux-gcc")

set(CMAKE_CXX_COMPILER "/usr/local/arm/3.4.1/bin/arm-linux-g++")

 

project(mscore)

 

注意:這兩行定義讓cmake生成的Makefile中使用arm-linux-gcc進行編譯,否則還是會使用主機的gcc.同時,前兩行設定必須在project(mscore)之前,否則設置不能生效。

 

參考mscoreREADME,在目錄下make,編譯期間可能出現錯誤,在相應的出錯代碼處進行修改,或者直接註釋掉。最後,在連接時,出現錯誤 -lasound無法找到,這是連接器ld沒有知道libasound.so庫文件的錯誤,最終解決方法是,編譯完成後,手工執行連接操作,把arm-linux-ld -lasound中的-lasound或者先前編譯出來的libasound的絕對路徑即可。這樣就生成了可執行文件mscore.

 

前面給出了在開發板上運行qtopia的啓動腳本,運行普通的qte程序也類似,不過包含的不是qtopia的庫,應該是前面編譯好的qte4.4.3_arm目錄下的庫,把這個目錄掛載或者複製到開發板系統目錄中,這個目錄不一定要和主機目錄一樣。啓動腳本如下:

#!/bin/sh

 

# created by leo feb, 10th, 2009

export set HOME=/root

export set QTEDIR=/opt/qt/qte4.4.3_arm

export set QWS_KEYBOARD="USB:/dev/input/event1"

export set QWS_MOUSE_PROTO="Tslib:/dev/h3600_tsraw"

export set QWS_SIZE=800x480

export set LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTEDIR/lib:/usr/local/arm/3.4.1/arm-linux/lib

#export set QWS_DISPLAY="linuxFB:mmWidth35:mmHeight45:0"

export set QWS_DISPLAY="linuxFB:mmWidth90:mmHeight110:0"

 

ln -s /dev/fb0 /dev/fb/0

export set TSLIB_ROOT=/opt/tslib1.4-install

export set TSLIB_TSEVENTTYPE=H3600

export set TSLIB_FBDEVICE=/dev/fb0

export set TSLIB_TSDEVICE=/dev/h3600_tsraw

export set TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf

export set TSLIB_CONSOLEDEVICE=none

export set TSLIB_CALIBFILE=/etc/pointercal

export set TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts/

export set LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib

 

if [ -f "/etc/pointercal" ]; then

export set POINTERCAL_FILE=/etc/pointercal

$QTEDIR/bin/mscore -qws

else

$TSLIB_ROOT/bin/ts_calibrate

$QTEDIR/bin/mscore -qws

fi

 

這樣,mscore終於在開發板上運行起來了,樂譜符號和字體顯示正常,如意料的一樣,不可能有聲音,報錯信息:

QPainter::begin: Paint device returned engine == 0, type: 2

QPainter::end: Painter not active, aborted

ALSA lib conf.c:3009:(snd_config_update_r) Cannot access file /usr/local/arm/3.4.1/arm-linux/share/alsa/alsa.conf

ALSA lib pcm.c:2202:(snd_pcm_open_noupdate) Unknown PCM default

Alsa_driver: Cannot open PCM device default for playback.

init ALSA audio driver failed

init ALSA driver failed

no audio driver

sequencer init failed

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章