2008年4月30日 星期三

Porting Qtopia 4.3.3

這次編譯還算順利,參考人家編譯過的經驗.
Hardware: III PXA270 Platform
Software: QT-X11, Qtopia 4.3.3, Cross-Compile 3.3.6

Install QT-X11 in Ubuntu
sudo apt-get install qt-x11-free-dbg
使用到的執行檔都會安裝到/bin底下,編譯Qtopia的時候就會自行取用

Install Qtopia
下載 qtopia-core-opensource-src-4.3.3.tar.gz
解壓縮到/opt底下
改個名字 mv /opt/qtopia-core-opensource-src-4.3.3 /opt/qtopia
把Toolchain路徑加到$PATH
export QTDIR=/opt/qtopia
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
開始編譯
./configure -embedded arm -xplatform qws/linux-arm-g++ -qt3support -depths 16 -qt-libjpeg -qt-mouse-linuxtp -no-stl
make
-xplatform參數對應到所使用的toolchain,若使用不同的請到./qtopia/mkspecs/qws/linux-arm-g++/qmake.conf去修改
我使用P4 HT 3.2G 大概要40分鐘

完成後,所需要的library都在qtopia/lib底下包括font檔
libQt3Support.so.4.3.3
libQtCore.so.4.3.3
libQtGui.so.4.3.3
libQtNetwork.so.4.3.3
libQtScript.so.4.3.3
libQtSql.so.4.3.3
libQtSvg.so.4.3.3
libQtXml.so.4.3.3
包含link也一併copy起來.我是用隨身碟來存放,格式化成ext3格式就可以存link了
接著再拿./qtopia/example下的範例程式測試

記得在target上執行時要先link一下路徑,因為執行程式的時候會去target上的/opt/qtopia/lib找library
另外我還出了一個錯誤:
QFontDatabase: Cannot find font directory /usr/local/Trolltech/QtopiaCore-4.3.3-arm/lib/fonts - is Qt installe?
"/usr/local/Trolltech/QtopiaCore-4.3.3-arm"算是他預設的安裝路徑,不知道為什麼沒改變? 可能是configure的時候要加prefix參數吧? 沒關係一樣用個link就可以解決

執行起來沒什麼問題,畫面明顯比QT3好看(是錯覺嗎?)
另外我使用背景執行一次開兩個視窗是可以顯示,不過畫面卻不是很理想.

ref:
QT、QPE、Qtopia、Qt/Embedded、Qtopia Core 究竟是什麼?
小弟在Xscale PXA255上移植qtopia 4的經驗
qtopia-opensource-4.2.0交叉編譯記錄
configure參數中文解說

QT4 with IDE

之後要在Linux上寫視窗程式,先來熟悉一下開發介面.
QT與GTK+我會選擇QT,他有專屬的QT-Disigner-一套可以用拖曳來編輯介面的開發軟體,還可以設定屬性,事件...由於介面與程式碼要分開寫,所以還需另外一套利器QDevelop,這也是專門用來開發QT4程式的,他可以直接compile, test, debug, 免去key指令的步驟.

同樣是API,GTK+的我真不太會用,gtkmm算是把GTK再包裝一層,是不是比較人性化? 而GTK也有graphical user interface builder - Glade,有機會再來用用看.

在Ubutnu下使用APT安裝QT4sudo apt-get install libqt4-core libqt4-debug libqt4-dev libqt4-gui libqt4-qt3support libqt4-sql qt4-designer qt4-doc qt4-qtconfig
剛裝好我還真的不知道qt-designer怎麼叫出來,原來是直接打指令 designer
qt4-qtconfig 是用來設定視窗介面的style
qtdemo 可以看到展示
assistant 可以叫出QT的教學電子書

QDevelop請到官網下載,他有for Ubuntu的package
安裝好以後在選單上就可以看到了,開啟以後介面是中文的,不過他的文字相當模糊而且像是對岸翻譯出來的,建議使用英文介面,下達指令 qdevelop -l en 即可. 第一次使用可以參考Quick Start

透過這些工具很輕易就可以建立起一隻視窗程式. 再來就試著移植到arm的平台上.

ref:
What's New in Qt 4 譯: A Taste of Qt 4─Qt 4 初體驗
永遠的UNIX-介紹X Programming, GUI Library, GUI Toolkit

2008年4月29日 星期二

Porting GTK+ on DirectFB

移植GTK的過程真的很繁雜,要先編幾十個library.
過程請直接參考強者同學的網誌: GTK+ on DirectFB on Creator PXA270
遇到error時通常把message原封不動的拿到google搜尋都可以找到解決的辦法, 以下提供新手參考.

編譯glib-2.9.6時
Error: cannot run test program while cross compiling See 'config.log' for more details
Solution:
echo ac_cv_type_long_long=yes>arm-linux.cache
echo glib_cv_stack_grows=no>>arm-linux.cache
echo glib_cv_uscore=no>>arm-linux.cache
echo ac_cv_func_posix_getpwuid_r=yes>>arm-linux.cache
configure參數多加 --cache-file=arm-linux.cache

編譯atk-1.10.3時
Error: glib-genmarshal: error while loading shared libraries: /opt/DYNAMIC/lib/libglib-2.0.so.0: ELF file OS ABI invalid
Solution: 先將環境變數LD_LIBRARY改為空白, make後再復原

執行GTK程式時
Error: (!) Direct/Modules: Could not open module directory `/usr/myproj/usr/myproj/lib/directfb-1.0-0/systems'! --> No such file or directory
Solution: 可以看到路徑重複兩次, 不知道是為什麼. 自行建立link即可

Error: (!) Direct/Modules: Could not open module directory `/usr/myproj/usr/myproj/lib/directfb-1.0-0/gfxdrivers'! --> No such file or directory
Solution: 在編譯directfb的時候gfxdrivers已經選擇none, 應該是不需要額外的driver才對, make一個空的資料夾可以過

Error: GdkPixbuf-WARNING **: Cannot open pixbuf loader module file '/usr/myproj/etc/gtk-2.0/gdk-pixbuf.loaders': No such file or directory
Solution:
在target執行/usr/myproj/bin/gdk-pixbuf-query-loaders > /usr/myproj/etc/gtk-2.0/gdk-pixbuf.loaders
參考: problem with realplayer

Error: (!) DirectFB/FBDev: Panning display failed! --> Invalid argument
Solution: (目前未解)

Error: No fonts found; this probably means that the fontconfig library is not correctly configured. You may need to edit the fonts.conf configuration file.
Solution: 修改etc/fonts/fonts.conf, 加入字型檔的路徑
然後把字型複製到預定的路徑裡面, 可以是windows的ttf

Error:
Gdk-DirectFB-WARNING **: gdk_window_set_keep_above() not implemented.
Gdk-DirectFB-WARNING **: gdk_window_set_keep_below() not implemented.
視窗畫面上的toolbar都顯示不出來, 不支是否跟這有關係
Solution: Warning而已不用理他, 強者同學說沒有window manager的觀念所以視窗不會有toolbar

Ref:
GTK+ on DirectFB on Creator PXA270
Porting GTK+ on DirectFB
與afreez一起學習DirectFB之:編譯最小的DirectFB