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