最近折腾tslib的移植,期间遇到各种问题,因为初次接触,外加对驱动这块也不熟,断断续续的耗费了不少时间。根据网上找教程编译tslib,步骤如下:
1)安装各种库;
2)在tslib目录中,运行./autogen.sh
3)./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --prefix=/usr/local/tslib CC=/xxx/arm-linux-gcc
4)将交叉编译生成的tslib文件打包,下载到目标板,然后解压到自己的文件目录
(tslib-1.4的编译会出现未定义的情况)我在tslib.h中添加
#define ABS_MT_SLOT 0x2f /* MT slot being modified */
#define ABS_MT_PRESSURE 0x3a /* Pressure on contact area */
#define ABS_MT_DISTANCE 0x3b /* Contact hover distance */
#define ABS_MT_TOOL_X 0x3c /* Center X tool position */
#define ABS_MT_TOOL_Y 0x3d /* Center Y tool position */
配置环境变量:
export TSLIB_ROOT=/usr/local/tslib
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_CALIBFILE=$TSLIB_ROOT/etc/pointercal
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$TSLIB_ROOT/lib
修改ts.conf的配置选项(默认打开了几个,保留module_raw input 、linear、dejitter delta=100),重启设备;
进入tslib的解压目录bin,运行./ts_calibrate,会提示
tslib-1.2: Selected device is not a touchscreen (must support BTN_TOUCH or BTN_LEFT)
tslib-1.4: Selected device is not a touchscreen (must support BTN_TOUCH or BTN_LEFT events)
网上找了类似的,以为是版本号的问题,多次折腾发现不是版本号的问题,下面是打印的版本号信息(tslib1.2):
经搜索找到一个简单的解决办法,tslib去除版本号验证的参考链接
由于触摸屏驱动没有提供ioctl接口,需要屏蔽tslib中ioctl相关代码。否则运行有错误。
vi ./plugins/input-raw.c
屏蔽掉static int check_fd(struct tslib_input *i)中所有ioctl相关代码,只保留一句
i->using_syn = 1;
最终代码如下:
static int check_fd(struct tslib_input *i)
{
#if 0
xxx
#else
i->using_syn = 1;
return 0;
#endif
}
在此非常感谢提供参考教程的各位。