嵌入式Linux驱动笔记(十五)------编译使用tslib支持LCD触摸屏

时间:2023-01-23 18:49:46

你好!这里是风筝的博客,

欢迎和我一起交流。

从网上下载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和触摸屏程序即可。