tslib在imx6q上的移植

一、配置

目標設備:迅爲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對應的觸摸屏輸入。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章