這次是要將 QT proting到 freescale的板子上,大約列一下所用到的硬體及環境
1.Host: x86 with fedora 11
2.Target: freescale imx51 with ubuntu for arm
3.cross compiler tools: arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu
4.Qt: qt-everywhere-opensource-src-4.6.2
網路上有很多資源,不過其中我試的是這位Simon大大的教學文章
http://zylix666.blogspot.com/2008/10/qt-embedded-porting-on-arm-platform.html
但在這之前,還有些設定要做,下列是我的作法及步驟
###先安裝cross compiler tools及設定好環境1. 將下載下來的 arm-none-linux-gnueabi解壓縮
$ tar -xvf arm-2009q3-67-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2
2. 將其中的bin設定到$PATH當中
$ export PATH="$PATH":/home/sam/Download/arm/arm2009q3/bin
又或者想要一開terminal就載入環境變數
在~/.bashrc裡加入
$ export PATH="$PATH":/home/sam/Download/arm/arm2009q3/bin
3. 這時候在terminal直接打arm-none-linux,TAB兩下,如果有顯示出所有arm-linux-none- 相關執行檔,這樣表示環境變數設定成功
###開始安裝Qt embedded及設定接下來的步驟,幾乎跟Simon大大的步驟一樣
1. 將下載下來的Qt embedded package解壓縮
$ tar -xvf qt-everywhere-opensource-src-4.6.2.tar.gz
2. 修改mkspecs/qws/linux-arm-g++/qmake.conf內的編譯器設定,將其設為目前所使用的tool chain
QMAKE_CC = arm-none-linux-gnueabi-gcc
QMAKE_CXX = arm-none-linux-gnueabi-g++
QMAKE_LINK = arm-none-linux-gnueabi-g++
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++
QMAKE_AR = arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = arm-none-linux-gnueabi-objcopy
QMAKE_STRIP = arm-none-linux-gnueabi-strip
3. 然後執行:
$ ./configure -embedded arm -qt-zlib -qt-libpng -qt-gif -qt-libtiff -qt-libmng -qt-libjpeg -qt-freetype -no-openssl
$ make
$ make install
4. 安裝完,預設會安裝到/usr/local/下,會在這裡看到一個Trolltech的資料夾,會有一個QtEmbedded-4.6.2-arm,所有的需要的都在這裡
5. 將剛才編譯好的QtEmbedded-4.6.2-arm,上傳至target board上的root file system。並且放在/usr/local/Trolltech下,Trolltech資料夾在target board上要自己建
$ mkdir /usr/local/Trolltech
6. 要執行範例程式之前,先設定好環境參數:
$ export QTDIR=/usr/local/Trolltech/QtEmbedded-4.6.2-arm
$ export PATH=$QTDIR/bin:$PATH
$ export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
7. 可在/usr/local /Trolltech/QtEmbedded-4.4.3-arm/example 或者是demos內找到一些可執行的範例
8. ***重點來了***,由於對方沒有給touch screen,所以我沒有編touch的driver, 也就是tslib for arm,取而代之,是用電腦的mouse及keyboard,但在執行Qt embedded的範例時,mouse及keyboard都不會動,花了很多時間找,網路都是用tslib,也就是有touch screen的硬體,所以需要下列方式解決:
$ QWS_MOUSE_PROTO=/dev/input/mice
$ QWS_KEYBOARD=/dev/tty0
9. ***執行範例,還是不會動***,看了營幕顯示的訊息表示,
'/dev/input/mice' permission deny
'/dev/tty0' permission deny
所以改了這兩的權限
$ chmod 777 /dev/input/mice
$ chmod 777 /dev/tty0
10. 這樣就可以動了,挑個範例試試
$ /usr/local/Trolltech/QtEmbedded-4.6.2-arm/demos/browser/browser -qws
注意要加上-qws這個flag
###編譯自己寫的程式且port到板子上如果自己有寫個Qt的程式,假設程式是放在,/usr/local/Trolltech/QtEmbedded-4.6.2-arm/examples/Hello底下,想port到板子上,用下面的方法:
$ /usr/local/Trolltech/QtEmbedded-4.6.2-arm/bin/qmake -spec ../../mkspecs/qws/linux-arm-g++ -unix -o Makefile Hello.pro
此時在同個目錄會產生一個Makefile檔,再執行
$ make
就會編譯出一個Hello的binary file for arm,仔細一看,確實是ARM的執行檔
$ file ./Hello
$ Hello: ELF 32-bit LSB executable, ARM, version 1 (SYSV), dynamically linked (uses shared libs), for GNU/Linux 2.6.16, not stripped
之後,就可以將這個執行檔搬到板子上了,且順利執行!
其中,板子上是安裝
ubuntu 9.10 for arm 的版本,網路上下載的到,而且還是針對
freescale imx51這槐板子所做的,功能該有的都有,但由於desktop是用Gnome,對於
板子來說太肥,跑的不順,所以改裝LXDE,順多了…
sudo apt-get install lxde
本來是要調更多有關板子效能的問題,例如快速開機,或是砍掉多餘的service等,
但時間不多,所以只改了desktop的部份。