一、配置
目標設備:迅爲iMX6q開發板,7.0帶觸摸屏
軟件版本:tslib-1.4
編譯器:arm-2014.05
二、移植
1.下載tslib-1.4源碼並解壓,交叉編譯器已加入系統環境變量
2.執行以下命令
cd tslib-1.4
mkdir ../tslib_install
./autogen.sh
./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ \
--host=arm-none-linux-gnueabi --prefix=$(pwd)/../tslib_install \
ac_cv_func_malloc_0_nonnull=yes
make
make install
執行完以上步驟之後,在當前目錄的上級目錄有文件夾tslib_install,文件夾tslib_install內即是生成的目標文件, 包括:bin etc include lib share。其中bin文件夾包含測試的可執行文件,etc文件夾包含配置文件ts.conf
3.添加文件與配置
在tslib_install/etc文件夾內添加文件pointercal,這是一個空文件,無需任何內容
4.更改配置文件tslib_install/etc/ts.conf
配置文件內使用項去除註釋#及空格,不使用項加#註釋。
此時配置使用項(使用項前面一定不能有空格)
module_raw input
module variance delta=30
module dejitter delta=100
#module linear
此處將module linear註釋掉,與迅爲官方文檔不同;如果不註釋,運行ts_carculate會出現 “Couldnt load module linear”錯誤。
5.以上步驟完畢可將tslib_install文件夾拷貝入目標文件系統的opt目錄下,並打包成rootfs.tgz
6.更改目標文件系統的環境變量
打開目標文件系統的etc/profile,添加以下內容
export TSLIB_ROOT=/opt/tslib_install
export QT_ROOT=/opt/qt5.7.0
export TSLIB_TSDEVICE=/dev/input/even3
export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib_install/etc/ts.conf
export TSLIB_PLUGINDIR=/opt/tslib_install/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export QWS_MOUSE_PROTO=tslib:/dev/input/event3
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts
export QT_QPA_GENERIC_PLUGINS=tslib
這裏TSLIB_CALIBFILE是迅爲官方文檔中沒有的,它指向3.創建的pointercal文件;同時迅爲官方文檔的TSLIB_TSDEVICE 中event2改爲event3
三、測試
將鏡像燒寫入開發板後,利用串口命令行操作開發板
1.#./opt/tslib_install/bin/ts_carculate
在屏幕上進行觸摸屏的5點校驗。如果在二.
3步驟中未添加pointercal,則此時會出現文件不能打開的錯誤,事實上ts_carculate 會將校驗結果寫入pointercal。若出現”Segmentation fault”錯誤,則是二.4中使用項前面有空格。
2.在三.4中我們將module linear註釋掉,如果沒有註釋掉,運行ts_carculate會出現linear模塊不能打開的錯誤;此時已經運行過ts_carculate,其校驗結果已寫入了pointercal文件,我們可以去掉module linear的註釋(前面不能有空格)
#vi /opt/tslib_install/etc/ts.conf
3.測試繪畫和拖拽
#./opt/tslib_install/bin/ts_test_mt
運行此測試程序,可以在屏幕拖拽光標和畫線
四、錯誤處理
1.“selected device is not a touchscreen I understand”
tslib不能識別觸摸屏,這個錯誤主要由兩點引起
1)編譯tslib的交叉編譯器.../arm-2014.05/arm-none-linux-gnueabi/libc/usr/include/linux/input.h的 EV_VERSION 與移植的內核文件kernel-imx/include/linux/input.h的EV_VERSION 不同造成。tslib中的input版本號是在 交叉編譯的時候指定的,賦值給version,故將交叉編譯器的EV_VERSION直更改與內核的EV_VERSION相同即可。迅爲官方提供的 arm-2014.05編譯器EV_VERSION實際與移植的內核EV_VERSION是相同的,如果不是此原因造成,那麼請看2)
2)在二.5中我們配置export TSLIB_TSDEVICE=/dev/input/even3,迅爲官方文檔爲event2。串口命令行ls /dev/input,查看開發板的輸入設備,發現有event0 event1 event2 event3,實際event3對應的觸摸屏輸入。