2010年3月17日 星期三

Qt embedded porting

這次是要將 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的部份。

2 則留言:

  1. hi, 近來買了塊 REAL6410 的開發版, 想再開始學Embedded system,
    我想從一個最最笨的方法開始,先不去了解系統架構,
    就只單純的環境架設,安裝,porting 操作,
    1. Linux kernel不同版本的porting 步驟,實做
    2. Android 不同版本(2x, 4x, 5x)的porting 步驟,實做
    我的電腦是win7 64 bit, VM player 7.0 ubuntu 14.04 64bit

    不知,您可否,賜教 幫忙.

    回覆刪除
  2. hi, 近來買了塊 REAL6410 的開發版, 想再開始學Embedded system,
    我想從一個最最笨的方法開始,先不去了解系統架構,
    就只單純的環境架設,安裝,porting 操作,
    1. Linux kernel不同版本的porting 步驟,實做
    2. Android 不同版本(2x, 4x, 5x)的porting 步驟,實做
    我的電腦是win7 64 bit, VM player 7.0 ubuntu 14.04 64bit

    不知,您可否,賜教 幫忙.

    回覆刪除