1. 程式人生 > >tiny6410的Qt4的移植和第一個Qt4軟體的執行以及如何在qtopia下執行自己的qt4程式

tiny6410的Qt4的移植和第一個Qt4軟體的執行以及如何在qtopia下執行自己的qt4程式

開發環境:fedora9   linux-2.6.38   arm-linux-gcc 4.5.1

基於tiny6410的軟硬體環境,tslib用的開發板檔案系統自帶的,用的一線校準,基本上是按照《Mini6410 Qt4和Qtopia程式設計開發指南-20110112》進行的移植,之所以要走一遍流程是為了接下來的不用一線校準的板子的開發。

這裡主要總結一下遇到的問題及解決方法:

1、執行程式HelloQt4時,提示:./HelloQt4: error while loading shared libraries: libQtGui.so.4: cannot open shared object file: No such file or directory

原因:

下面是setqt4env的內容:

#!/bin/sh

if [ -e /etc/friendlyarm-ts-input.conf ] ; then
        . /etc/friendlyarm-ts-input.conf
fi
true    ${TSLIB_TSDEVICE:=/dev/touchscreen}

TSLIB_CONFFILE=/etc/ts.conf

export TSLIB_TSDEVICE
export TSLIB_CONFFILE

export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal

export QWS_DISPLAY=:1
export LD_LIBRARY_PATH=/usr/local/lib:$LD_LIBRARY_PATH         #export LD_LIBRARY_PATH=/opt/Qt4.7/lib  用這句話替換前面的,因為自己移植的Qt4放在了/opt目錄


export PATH=/bin:/sbin:/usr/bin/:/usr/sbin:/usr/local/bin  

if [ -c ${TSLIB_TSDEVICE} ]; then
        export QWS_MOUSE_PROTO="Tslib MouseMan:/dev/input/mice"
        if [ ! -s /etc/pointercal ] ; then
                rm /etc/pointercal
                /usr/bin/ts_calibrate
        fi
else
        export QWS_MOUSE_PROTO="MouseMan:/dev/input/mice"
fi

export QWS_KEYBOARD=TTY:/dev/tty1

export HOME=/root

2、程式執行後無法使用觸控式螢幕

由於qtopia2.2和Qt4無法共存,所以在執行Qt程式前必須關掉qtopia2.2,之前忘記了這一點。

關閉方法:設定-->關機-->Terminate Server

自己的猜測:友善之臂開發板在qtopia2.2環境下執行Qt4程式,退出後又回到qtopia環境下,進行自由切換,用的就是這種原理,但是我在檔案系統中在/bin目錄下找到了啟動qtopia的指令碼qtopia,但是找不到關閉qtopia的指令碼,至於友善之臂的qt軟體實現這些切換的程式碼也就不知道了。

3、HelloQt4執行後字型很小

這是由於qt軟體運用到嵌入式環境,螢幕解析度比較小,字型也相應變小了,可以在程式設計中統一把字型設定大一點。

同時我也找到另外一種方法:

在 setqt4env 指令碼中把

export QWS_DISPLAY=:1

改為:

export QWS_DISPLAY="LinuxFb:mmWidth160:mmHeight90:1"

問題解決

如果你已經執行過錯誤的 setqt4env 指令碼。 那麼你必須直接在console中直接

 export QWS_DISPLAY="LinuxFb:mmWidth160:mmHeight90:1"

另:由於不知道友善之臂具體是怎麼用程式碼實現切換的,不過可以用另外一種方法實現在qtopia2.2下執行自己的qt4程式

修改 /bin/qt4 指令碼,將下面這兩行換成你的程式路徑和名稱:

cd /usr/local/Trolltech/QtEmbedded-4.7.0-arm/demos/embedded/fluidlauncher
./fluidlauncher -qws

然後在Qtopia2.2.0中點選Qt4的圖示,應該可以執行自己的程式了,可以把相應的圖示也替換掉。

————————————————————————————————————————————————————————

附:今天看到一個命令,exec

百度百科對他的解釋如下:

exec函式族,顧名思義,就是一簇函式,他把當前程序映像替換成新的程式檔案,而且該程式通常main函式開始執行!
用fork函式建立子程序後,子程序往往要呼叫一種exec函式以執行另一個程式。當程序呼叫一種exec函式時,該程序完全由新程式代換,而新程式則從其 main函式開始執行。因為呼叫exec並不建立新程序,所以前後的程序ID並未改變。exec只是用另一個新程式替換了當前程序的正文、資料、堆和棧段。

看到程序ID沒有改變,想到了Qtopia2.2和Qt4軟體切換的問題,由於Qt4軟體是用指令碼來啟動的,而且指令碼最後有這樣一句話

exec ./myplayer -qws 1>/dev/null 2>/dev/null

也就是說qt4軟體的程序ID和指令碼ID是一樣的那麼只要殺死這個ID,qt4軟體就退出了。

切換的大致步驟:

kill掉qtopia2.2的程序,執行指令碼,退出或kill掉啟動qt4軟體的指令碼的ID,啟動qtopia2.2。

又感覺不需要exec也可以這樣,等以後再來看看,遇到新想法的話再來解決。