天天看點

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也可以這樣,等以後再來看看,遇到新想法的話再來解決。

繼續閱讀