Qt 4.5.3 + tslib1.4 移植
我的編譯環境是: ubuntu 10.04+Qt 4.5.3+tslib1.4
需要的軟件包: arm-linux-gcc-3.4.1.tar.bz2 (交叉編譯)
qt-x11-opensource-src-4.5.3.tar.gz
qt-embedded-linux-opensource-src-4.5.3.tar.gz
tslib-1.4.tar.gz
一 . 配置交叉編譯環境
下載 arm-linux-gcc-3.4.1.tar.bz2 地址: http://download.csdn.net/source/2889583
具體安裝就不細講了,可以參照 http://blog.csdn.net/qq419036154/archive/2010/12/05/6056803.aspx
我的交叉編譯安裝路徑是 /usr/local/arm/3.4.1
二 . 安裝 X11
# tar -zxvf qt-x11-opensource-src-4.5.3.tar.gz
# cd qt-x11-opensource-src-4.5.3
# ./configure
# make
# make install
qt-x11 被安裝到此目錄下 /usr/local/Trolltech/Qt-4.5.3
編譯 qvfb:
# cd qt-x11-opensource-src-4.5.3/tools/qvfb
# make
會在 qt-x11-opensource-src-4.5.3/bin 下生成 qvfb 文件
三 . 安裝pc 機的 x86
解壓:
# tar -zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
更名:
# mv qt-embedded-linux-opensource-src-4.5.3 qt-embedded-linux-opensource-src-4.5.3-x86
編譯:
# cd qt-embedded-linux-opensource-src-4.5.3-x86
# ./configure -embedded x86 -qvfb ( 千萬不要落了- qvfb)
# make
# make install
qt-embedded 被安裝在這個目錄下 /usr/local/Trolltech/QtEmbedded-4.5.3
新建一個 setenv.sh 文件內容如下:
export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3
export PATH=/usr/local/Trolltech/QtEmbedded-4.5.3/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbeded-4.5.3/lib:$LD_LIBRARY_PATH
將 qt-x11-opensource-src-4.5.2/bin 下生成的 qvfb 文件 copy 至 /usr/local/Trolltech/QtEmbedded-4.5.2-x86/bin 下
四 . 安裝 tslib1.4
下載 tslib1.4 地址: http://download.csdn.net/source/2889575
1. 安裝編譯過程需用到的程序
sudo apt-get install autoconf( 或 autoconf2.13)
sudo apt-get install automake
sudo apt-get install libtool
2. 解壓配置
$tar xzvf tslib-1.4.tar.gz
$./autogen.sh
$echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
$./configure --prefix=/usr/local/tslib --host=arm-linux --cache-file=arm-linux.cache --enable-inputapi=no
其中ac_cv_func_malloc_0_nonnull=yes 是爲解決如下編譯錯誤設置的
ts_test.o: In function `main':
ts_test.c:(.text+0x1d8): undefined reference to `rpl_malloc'
fbutils.o: In function `open_framebuffer':
fbutils.c:(.text+0xa20): undefined reference to `rpl_malloc'
collect2: ld returned 1 exit status
參數--enable-inputapi=no. 是爲了解決運行中提示 ts_open:Inappropriate ioctol for devic
它表示不使用ioctl來控制觸摸屏。
3. 編譯安裝
$make
$sudo make install
在PC機/ usr/local/tslib/下生成觸摸屏運行庫。
五 . 安裝 embedded-ARM
解壓
$ tar -zxvf qt-embedded-linux-opensource-src-4.5.3.tar.gz
更名
$mv qt-embedded-linux-opensource-src-4.5.3 qt-embedded-linux-opensource-src-4.5.3-arm
進入
$cd qt-embedded-linux-opensource-src-4.5.3-arm
配置
$./configure -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,18 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-usb -no-glib -qt-mouse-tslib -I/usr/local/tslib/include -L/usr/local/tslib/lib
(藍色標註的路徑最好不要改變)
$make
#make install
qt-embeded 被安裝在這個目錄下 /usr/local/Trolltech/QtEmbedded-4.5.3-arm
這裏你可以新建一個 setenv.sh 文件
把下面複製到文件中
export QTEDIR=/usr/local/Trolltech/QtEmbedded-4.5.3-arm
export PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/bin:$PATH
export LD_LIBRARY_PATH=/usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib:$LD_LIBRARY_PATH
六 . 移植到開發板
接下來通過 NFS 測試是否成功( NFS 安裝請參照http://blog.csdn.net/qq419036154/archive/2010/12/05/6056824.aspx )
先創建 3 個 nfs 共享文件夾, /nfsboot , /fonts , /tslib
1. 準備庫
sudo cp -a /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib/ /nfsboot/ 然後在 /usr/local/arm/3.4.1/arm-linux/lib 裏面找這些庫
librt.so , librt.so.1 , librt-2.3.2.so , libstdc++.so , libstdc++.so.6 ,libstdc++.so.6.0.1,libgcc_s.so.1
將上面這些庫拷貝到 /nfsboot/lib
2. 準備字體
cp -arf /usr/local/Trolltect/QtEmbedded-4.5.3- arm/lib/fonts /fonts
3. 準備 tslib 文件
sudo cp -a /usr/local/tslib/* /tslib
4. 修改觸摸屏配置文件
tslib 程序在運行的時候是通過打開 / 關閉 ts.conf 配置文件來配置相應的文件,根據我們板子的實際需求我們修改如下:
vi /usr/local/tslib/etc/ts.conf
我的設備驅動是 h3600 ,所以將 第 14 行 # module_raw h3600 前面的 # 和空格去掉
內容如下:
module_raw h3600
module pthres pmin=1 // Pthres : 爲 Tslib 提供的觸摸屏靈敏度門檻插件
module variance delta=30 // Variance: 爲 Tslib 提供的觸摸屏濾波算法插件
module dejitter delta=100 //Dejitter: 爲 Tslib 提供的觸摸屏去噪算法插件
module linear // Linear: 爲 Tslib 提供的觸摸屏座標變換插件
去掉哪個主要取決於你的驅動類型
5. 掛載文件
接下來將開發板和主機通過網線連接起來,並在開發板裏進行 mount , 先配置 PC 機上的 IP ,所配
置的 IP 要於開發板的 IP 在同一個網段,在開發板上建立目錄 /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib 和 /usr/local/tslib
然後掛載:
(a). 掛載 Qt 庫文件
mount -t nfs -o nolock -o tcp 192.168.0.16:/nfsboot /mnt
(b). 掛載字體 ( 在 lib 目錄的 fonts )
因爲 Qtopia 默認查找字體的目錄是 /usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts ,所以我們要在開發板
上建立一條 /usr/local/Trolltech/QtEmbedded-4.5.3/lib/fonts 路徑
#mkdir /usr/local && mkidr /usr/local/Trolltech &&mkdir /usr/local/Trolltech/QtEmbedded-4.5.3-arm &&/usr
/local/Trolltech/QtEmbedded-4.5.3-arm/lib
然後進行掛載:
mount -t nfs -o nolock -o tcp 192.168.0.16:/fonts /usr/local/Trolltech/QtEmbedded-4.5.3-arm/lib
(c). 掛載 tslib 庫文件
在開發板上建立一條 /usr/local/tslib 路徑
然後進行掛載:
mount -t nfs -o nolock -o tcp 192.168.0.16:/tslib /usr/local/tslib (掛載 tslib 庫文件)
6. 設置環境變量
export T_ROOT=/usr/local/tslib // 開發板上 tslib 的路徑
export TSLIB_CONSOLEDEVICE=none // 設定控制檯設備爲 none
export TSLIB_FBDEVICE=/dev/fb0 // 指定幀緩衝設備
export TSLIB_TSDEVICE=/dev/h3600_tsraw // 觸摸屏設備節點文件
export QWS_MOUSE_PROTO=Tslib:/dev/h3600_tsraw
export LD_LIBRARY_PATH=$T_ROOT/lib:/mnt/lib // 庫文件的路徑
export TSLIB_CALIBFILE=/etc/pointercal // 指定觸摸屏校準文件 pintercal 的存放位置
export TSLIB_CONFFILE=$T_ROOT/etc/ts.conf //tslib 配置文件的位置
export TSLIB_PLUGINDIR=$T_ROOT/lib/ts // 觸摸屏插件所在路徑
export QWS_SIZE=640x480
在配置環境變量時要注意 TSLIB_TSDEVICE ,這取 決於具體的設備驅動了 , 事件驅動用 export TSLIB_TSDEVICE=/dev/input/event0 ,而 h3600 用如下配置 , export TSLIB_TSDEVICE=/dev/h3600_tsraw
7.校準觸摸屏
觸摸屏的前提是你的觸摸屏驅動已經寫好 , 並加載進了內核。 你可以測試有沒有加載觸摸屏驅動, /dev/touchscreen/0( 這是我板子上的觸摸節點 )
# cat /dev/touchscreen/0
看終端有無信息顯示,若有則表明正確
進行校準:
# cd /usr/local/tslib/bin
# ./ts_calibrate
如果正常,則會在校準文件會保存在 /etc/pointercal
接下來就可以運行 qt 程序了
#./dialog -qws &
如果出現問題一般都是缺少庫文件或者環境變量沒設置好