qt4嵌入式開發環境搭建過程(包括各種異常問題)(2)

上一章介紹了宿主機上的qt4環境搭建

這章介紹下位機即開發板的qt4環境搭建

二,下位機qt/E4環境搭建移植

分三步:準備工作、編譯安裝、qt/E4移植到開發板

1、準備工作

(1)安裝交叉編譯工具
     交叉編譯工具是將宿主機(一邊是intel386)上的qt程序編譯成arm版可執行的qt程序我這裏是將arm-linux-4.4.3.tar.bz2 拷貝到 /home/forlinx/work/ 目錄下 使用
#tar xvf  arm-linux-4.4.3.tar.bz2   -C /usr/lcoal/arm/  解壓到/usr/local/arm/目錄下

環境變量設置,這和上一章的gcc的環境變量設置有點類似,通過鏈接或添加路徑到 /etc/profile 的方法,在這裏就不多說了,測試:
#arm-linux-gcc -v

(2)tslib1.4安裝
tslib 是電阻式觸摸屏用於校準的一個軟件庫,是一個開源的程序,能夠爲觸摸屏驅動獲得的採樣提供諸如濾波、去抖、校準等功能,通常作爲觸摸屏驅動的適配層,爲上層的應用提供了一個統一的接口。因此這裏先編譯安裝 tslib,這樣在後面編譯 Qt 的時候才能打包編譯進去。
首先,安裝 autoconf、automake、libtool 包:
# sudo apt-get install autoconf
# sudo apt-get install automake
# sudo apt-get install libtool
     這一步有時候會遇到問題,比如package  not found 等類似提示,通過兩部檢查:1,檢查網絡連接是否成功;2,使用#apt-get install update 安裝更新包來解決一些組件無法安裝的問題。上一章在安裝g++和qt creator 遇到類似問題也可以這樣解決。
拷貝 src 目錄下 tslib-1.4.tar.bz2 的到/home/forlinx/work(推薦)目錄下面
# tar -xvf tslib-1.4.tar.bz2 
# cd ./tslib
#./ autogen-clean.sh
#./autogen.sh
#./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/usr/local/arm/tslib   configure配置選項通過help命令去了解
#make
#make install

(3)移植、配置、測試tslib

移植 tslib 到 ok335x 目標板
假設用戶的根文件系統路徑爲:/home/forlinx/work/rootfs-mini
執行以下命令:
# cd /usr/local/arm/tslib
# cp -ar lib/* /home/forlinx/work/rootfs-mini/usr/lib
# cp -ar bin/* /home/forlinx/work/rootfs-mini/usr/bin
# vi etc/ts.conf 去掉 module_raw input 前註釋符#,一定要注意中間的空格也去掉,module 頂格
# cp -ar etc/* /home/forlinx/work/rootfs-mini/etc

導出 tslib 環境變量
# cd /home/forlinx/work/rootfs-mini
# vi etc/profile #添加以下環境變量
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 目錄下的設備節點相對應。

在 OK335x 目標板下測試 tslib
 用新文件系統啓動 OK335x 板子,進入 shell 後執行如下命令:
# ts_calibrate              對電阻屏進行觸摸較驗
# ts_test                 對電阻屏進行觸摸測試

2、編譯安裝

拷貝qt-everywhere...... 解壓,進入目錄
#./configure \
 -prefix /usr/local/arm/qt4.8.5\
 -opensource \
 -confirm-license \
 -release -shared \
 -embedded arm \
 -xplatform qws/linux-arm-g++ \
 -depths 16,18,24,32 \
 -fast \
 -optimized-qmake \
 -little-endian -host-little-endian \
 -pch \
 -qt-sql-sqlite \
 -qt-libjpeg \
 -qt-zlib \
 -qt-libpng \
 -qt-libmng \
 -qt-libtiff \
 -qt-freetype \
 -webkit \
 -no-openssl \
 -no-glib \
 -no-qt3support \
 -no-libtiff -no-libmng \
 -no-opengl \
 -no-mmx -no-sse -no-sse2 \
 -no-3dnow \
 -no-qvfb \
 -no-phonon \
 -no-nis \
 -no-opengl \
 -no-cups \
 -no-separate-debug-info \
 -nomake docs \
 -qt-mouse-tslib \
 -qt-mouse-linuxinput \
 -qt-kbd-linuxinput \
 -I/usr/local/arm/tslib/include \
 -L/usr/local/arm/tslib/lib

#make 
#make install 

移植qt/E 到 OK335x 目標板
# cd
/usr/local/arm/qt4.8.5/
# cp
-ar
lib/libQt* lib/fonts/
/home/forlinx/work/rootfs-mini/forlinx/qt/lib
# cp
-ar
demos/embeddeddialogs/embeddeddialogs /home/forlinx/work/rootfs-mini/forlinx/qt/bin
導出 qt 環境變量

# cd /home/forlinx/work/rootfs-mini
# vi etc/profile #添加以下環境變量
export QTDIR=/forlinx/qt
export LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH
export QT_QWS_FONTDIR=$QTDIR/lib/fonts
export QWS_SIZE=800x480
export QWS_DISPLAY=LinuxFb:/dev/fb0
export QWS_MOUSE_PROTO=Tslib:/dev/input/touchscreen0
< Qt 環境變量說明:
LD_LIBRARY_PATH:指定 qt 的共享庫具體路徑
QT_QWS_FONTDIR:指定 qt 的 font 具體路徑
QWS_SIZE:設定在屏幕尺寸
QWS_DISPLAY:指定的顯示類型和幀緩衝區
QWS_MOUSE_PROTO:指定觸摸設備
以上環境變量在實際開發中的實際配置可以根據實際情況決定。而這些指定的設備節點一定要和你的開發
板上的/dev 目錄下的設備節點相對應。

測試qt4.8.5
用新移植的文件系統啓動開發板,進入 shell 後執行如下命令:
# cd /forlinx/qt/bin
# ./embeddeddialogs -qws&

3、qt creator  上QT/E構建和運行的設置和上一章的qt4的設置類似

不過需要明白其對應關係:  
           宿主機:                                                下位機
   Ubuntu                                                      嵌入式Linux
編譯器        qt版本                                         編譯器                                                  qt版本
gcc         i386平臺 qt4                            交叉編譯arm-linux-gcc將程序編譯好    arm平臺版本(arm-qamke) qt-embedded


這一章會遇到一些bug:
如果編譯出現缺少鏈接信息錯誤:
warning: libts-0.0.so.0, needed by , not found (try using -rpath or -rpath-link)
undefined reference to `ts_read_raw'
undefined reference to `ts_open'
undefined reference to `ts_fd'
undefined reference to `ts_config'
undefined reference to `ts_close'
undefined reference to `ts_read'
collect2: ld returned 1 exit status
解決方法如下:
修改 qt-everywhere-opensource-src-4.8.5/mkspecs/qws/linux-arm-g++/qmake.conf 文件(添加 lts 參數),也可以直接添加arm-linux-g++的絕對路徑(如QMAKE CC=/usr/local/arm/.../arm-linux-gcc):
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts
QMAKE_LINK = arm-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-g++ -lts

修改完成後保存退出,繼續編譯。



發佈了20 篇原創文章 · 獲贊 1 · 訪問量 3萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章