[Qt開發指南]飛凌嵌入式iMX6開發板QT移植
虛擬機環境:ubuntu12.04 32bit /64bit
目標平臺:i.MX6 開發板
交叉編譯工具鏈:gcc gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12
文件系統: 飛凌嵌入式提供的rootfs
注意:
1 飛凌嵌入式iMX6開發平臺 發布資料里面提供編譯好的 Qt 庫和開發工具 qt4.8.5-sdk.tar.bz2, tslib-sdk.tar.bz2 ,如果您進行 Qt 應用程序的開發可以不 用編譯 Qt ,直接跳到 1.4 節,進行應用程序的開發。
2 發布的 Linux 文件系統中默認含有 Qt 庫,可以直接運行 Qt 應用程序, Qt 版本: Qt4.8.5 。
1.1.1 安裝交叉編譯器
拷貝tools 目錄下的 gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz
到//work/imx6 目錄下面
root@forlinx:/work/imx6/qt4.8.5# tar xvf gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12.tar.gz -C /usr/local/arm
注意:本操作是在32bit ubuntu12.04運行。如果在64bit ubuntu12.04下運行32bit可執行程序,必須執行 sudo apt-get install ia32-libs libc6-i386 ,安裝在64bit ubuntu12.04 下32bit程序的運行庫。
root@forlinx:/work/imx6/qt4.8.5#/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-linux-gcc -v
1.1.2 設置交叉編譯器環境變量
# gedit /etc/profile
在文件的末尾添加如下環境變量:
export PATH= root@forlinx:/work/imx6/qt4.8.5#/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin:$PATH
export TOOLCHAIN= /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain
export TB_CC_PREFIX=arm-none-linux-gnueabiexport
PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi
如下圖所示:
1.1.3 導入環境變量
# source /etc/profile
# arm-linux-gcc -v
如下圖所示則說明添加編譯器成功:
1.2 移植 tslib
tslib 是電阻式觸摸屏用于校準的一個軟件庫,是一個開源的程序,能夠為觸摸屏驅動獲得的采樣提供
諸如濾波、去抖、校準等功能,通常作為觸摸屏驅動的適配層,為上層的應用提供了一個統一的接口。因
此這里先編譯安裝tslib,這樣在后面編譯Qt 的時候才能打包編譯進去
1.2.1 安裝autoconf、automake、libtool包
# sudo apt-get install autoconf #tslib 依賴
# sudo apt-get install automake #tslib 依賴
# sudo apt-get install libtool #tslib 依賴
# sudo apt-get install g++ #tslib 依賴
# sudo apt-get install libc6-dev:i386 #qt4.8.5依賴
#sudo apt-get install build-essential #qt4.8.5依賴
#sudo apt-get install gcc-multilib #qt4.8.5依賴
1.2.2 拷貝壓縮文件
拷貝src 目錄下tslib-1.4-src.tar.bz2 的到/work/imx6(推薦)目錄下面
# tar -xvf tslib-1.4-src.git.tar.bz2
# cd tslib
# ./tslib.sh #飛凌提供的編譯腳本,執行完會將tslib 默認安裝到/usr/local/arm/tslib
1.2.3 移植tslib到i.MX6目標板
假設用戶的根文件系統路徑為: /work/imx6/rootfs
執行以下命令:
# cd /usr/local/arm/tslib
# cp -ar lib/* /work/imx6/rootfs /usr/lib
# cp -ar bin/*/work/imx6/rootfs/usr/bin
# vi etc/ts.conf #去掉module_raw input 前注釋符#,一定要注意中間的空格也去掉,module 頂格
# cp -ar etc/* /work/imx6/rootfs /etc
1.2.4 導出tslib環境變量
# cd /work/imx6/rootfs
# vi etc/rc.d/qt_env.sh
添加以下環境變量
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_PLUGINDIR=/usr/lib/ts
export POINTERCAL_FILE=/etc/pointercal
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
< tslib 環境變量說明:
TSLIB_CONFFILE //配置文件名
TSLIB_PLUGINDIR //插件目錄
POINTERCAL_FILE: //指定包含用于校準指針設備的數據的文件
TSLIB_TSDEVICE //觸摸屏設備文件名
TSLIB_CALIBFILE //校準的數據文件,由ts_calibrate 校準程序生成
TSLIB_CONSOLEDEVICE //控制臺設備文件名
TSLIB_FBDEVICE //設備名
以上環境變量在實際開發中的實際配置可以根據實際情況決定。而這些指定的設備節點一定要和你的
開發板上的/dev 目錄下的設備節點相對應。
1.2.5 在i.MX6q目標板下測試tslib
用新文件系統啟動i.MX6q 板子,進入shell 后執行如下命令:
#source /etc/rc.d/qt_env.sh
# ts_calibrate 對電阻屏進行觸摸較驗
# ts_test 對電阻屏進行觸摸測試
1.3 移植QT 4.8.5
1.3.1 拷貝壓縮文件
拷貝src 目錄下的qt-everywhere-opensource-src-4.8.5.tar.gz 到/work/imx6 目錄下面 ,請注意,
我們對Qt 源碼進行了必要的配置,默認配置路徑就是 /work/imx6 ,如果您的Ubuntu 里面沒有該路
徑請執行如下命令創建 ”/work/imx6” 路徑:
#mkdir /work/imx6
執行以下命令解壓Qt 源碼文件夾:
# tar xvfj qt-everywhere-opensource-src-4.8.5.tar.gz
#tar xvfj linux-imx6-g++.tar.bz2
#cp –fr linux-imx6-g++ qt-everywhere-opensource-src-4.8.5/mkspecs/qws/ linux-imx6-g++
#cp qteverywhere.sh qt-everywhere-opensource-src-4.8.5/
# cd qt-everywhere-opensource-src-4.8.5
#export PATH=$PATH: /usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/
修改qt-everywhere-opensource-src-4.8.5/mkspecs/common/linux.conf,pthread后面添加-lts
#make confclean
#make clean
# ./qteverywhere.sh ##飛凌提供的編譯腳本,執行完會將qt 默認安裝到/usr/local/arm/qt4.8.5
#make
#mkdir –p /usr/local/freescale/qt4.8.5
#make install
#/usr/local/freescale/qt4.8.5/bin/qmake –v #查看是否按照成功
如下圖所示則說明添加qt庫編譯器成功
1.3.3 移植qt4.8.5 到i.MX6 目標板
# cd /usr/local/freescale/qt4.8.5/
# cp -ar lib/libQt* lib/fonts/ /work/imx6/rootfs/opt/forlinx_qt4.8/lib
# cp -ar demos/embeddeddialogs/embeddeddialogs /work/imx6/rootfs/opt/forlinx_qt4.8/bin
注:若opt/forlinx_qt4.8 {lib,bin}目錄不存在可以自己創建,也可以是其他目錄
1.3.4 導出qt環境變量
# cd /work/imx6/rootfs
# vi etc/rc.d/qt_env.sh#添加以下環境變量
export QTDIR=/opt/qt4.8.5
export PATH=$QTDIR/bin:$PATH
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_PLUGIN_PATH=$QTDIR/plugins
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
export QWS_DISPLAY="linuxfb:mmWidth50:mmHeight130:0"
export QWS_SIZE=800x480
Qt 環境變量說明:
LD_LIBRARY_PATH:指定qt 的共享庫具體路徑
QT_QWS_FONTDIR:指定qt 的font 具體路徑
QWS_SIZE:設定在屏幕尺寸
QWS_DISPLAY:指定的顯示類型和幀緩沖區
QWS_MOUSE_PROTO:指定觸摸設備
以上環境變量在實際開發中的實際配置可以根據實際情況決定。而這些指定的設備節點一定要和你的開發
板上的/dev 目錄下的設備節點相對應。
開機自動啟動程序放在/etc/rc.d/apps.sh
內容如下:
#!/bin/sh
#apps
cd /opt/qt4.8.5/demos/embedded/fluidlauncher
./fluidlauncher -qws &
#apps
手動運行程序
#source /etc/rc.d/qt_env.sh
cd /opt/qt4.8.5/demos/embedded/fluidlauncher
./fluidlauncher -qws &
1.3.5 i.MX6 目標板下測試QT4.8.5
用新移植的文件系統啟動開發板,進入shell 后執行如下命令:
# cd /opt/forlinx_qt4.8/bin/
# ./embeddeddialogs -qws&
注意:如果想讓界面豎屏顯示,只需添加 -display "Transformed:Rot90"參數即可。
如下圖所示:
1.4 Qt Creator開發環境搭建及編程
1.4.1 安裝Qt Creator2.4.1
在Ubuntu圖形gui安裝
在Ubuntu 命令行執行如下命令:
#apt-get install qtcreator
安裝完成后在終端輸入以下命令,開啟Qt Creator
#qtcreator&
1.4.2 設置Qt Creator 使其支持交叉編譯
點擊Qt Creator 的Tools 菜單下的Options,點擊左列 Build & Run,然后點擊界面右側的Tools Chains
標簽頁, 然后點擊Add 添加GCCE, 單擊Compiler path Browse 添加交叉編譯器
(/usr/local/arm/gcc-4.6.2-glibc-2.13-linaro-multilib-2011.12/fsl-linaro-toolchain/bin/arm-linux-g++)的路徑,如下圖所示:
Qt Creator Versions 的設置
點擊Add 添加/usr/local/freescale/qt4.8.5/bin/qmake 文件(我們提供的qt4.8.5-sdk.tar.bz 含有qmake 文件,把
qt4.8.5-sdk.tar.bz 壓縮包釋放到/usr/local/ freescale 目錄即可),添加進去,之后,點擊Apply 即配置完成。
1.4.3 新建hello Qt程序進行測試
創建一個Qt Widget Project 項目,如下圖:
輸入項目名稱和項目路徑,如下圖:
選擇Manually 版本(就是我們剛才添加的那個交叉編譯器版本,一定要選對)
剩下的步驟默認就好,然后就可以通過Build->Build All 進行編譯,如下圖:
1.4.4 在開發板上測試qt 應用程序
注:由于 qt 字體庫里已包含一個中文字體,故直接可以在程序中使用中文,無需額外操作