嵌入式Linux驅動筆記(十五)------編譯使用tslib支援LCD觸控式螢幕

風箏丶發表於2017-10-14

你好!這裡是風箏的部落格,

歡迎和我一起交流。

從網上下載tslib,比如我這裡用的是tslib-1.4

編譯之前先安裝三個檔案:
sudo apt-get install autoconf
sudo apt-get install automake
sudo apt-get install libtool

解壓:tar xzf tslib-1.4.tar.gz
cd tslib
./autogen.sh
mkdir tmp
echo “ac_cv_func_malloc_0_nonnull=yes” >arm-linux.cache
./configure –host=arm-linux –cache-file=arm-linux.cache CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ –prefix=$(pwd)/tmp
上面的這些選項在網上都可以查到,比如:
–host=該軟體將執行的平臺
–prefix=安裝路徑

make
make install
這樣就會生成出四個子目錄:
include:標頭檔案
lib:庫檔案
etc:配置檔案
bin:測試檔案

cp tmp/ /work/nfs/root/ts_dir -rfd
這裡我們把安裝的內容cp到根檔案的ts_dir檔案下,這裡/work/nfs/root/是根檔案路徑,ts_dir 是我自己mkdir的。
接著:
vi /work/nfs/root/ts_dir/etc/ts.conf
第1行(去掉#號和第一個空格),即:

# module_raw input

改為:

module_raw input

意思是module_raw只使用input,即Linux的input子系統。
之後在配置環境變數即可:
vi /work/nfs/root/etc/profile
這個檔案是每個使用者登入時都會執行的環境變數設定
寫入:

#!/bin/sh
export TS_ROOT=/ts_dir
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CALIBFILE=$TS_ROOT/etc/pointercal
export TSLIB_CONFFILE=$TS_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TS_ROOT/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0

上面的解釋為:
TSLIB_TSDEVICE=指定觸屏裝置
TSLIB_CALIBFILE=指定觸控式螢幕校準檔案 pintercal 的存放位置
TSLIB_CONFFILE=指定 TSLIB 配置檔案的位置
TSLIB_PLUGINDIR=指定觸控式螢幕外掛所在路徑
TSLIB_CONSOLEDEVICE=設定控制檯裝置
TSLIB_FBDEVICE=指定幀緩衝裝置

這樣環境變數就配置好了。
chmod 777 profile
生成的校準檔名為pointercal,位於$TS_ROOT/etc(即_dir/etc)目錄下。
之後啟動根檔案,insmod觸控式螢幕驅動
cd _dir/bin/然後執行測試程式即可。

最後,可能會出現
selected device is not a touchscreen I understand
錯誤。
這是因為tslib裡EV_VERSION定義為:0x010001
但是我們kernel的裡的EV_VERSION不是,對不上。
所以,在kernel裡:
grep “EV_VERSION” * -nR
找到 EV_VERSION的定義,改為0x010001,重新編譯kernel和觸控式螢幕程式即可。

相關文章