编译tslib
(1)建立工作目录
(2)编译安装tslib
将下载的tslib源码复制到工作目录,并解压:
$ unzip tslib-master.zip
$ cd tslib-master
(3)编译
配置tslib,安装路径可以通过 --prefix 参数设置,这里安装到 /usr/local/tslib:
$ ./autogen.sh
$ ./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-none-linux-gnueabi --prefix=/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/tslib/tslib_install ac_cv_func_malloc_0_nonnull=yes
编译安装:
$ make
Makefile:472: recipe for target 'ts_calibrate.o' failed
In file included from /usr/include/fcntl.h:252:0,
from /usr/include/x86_64-linux-gnu/sys/fcntl.h:1,
from ts_calibrate.c:20:
In function ‘open’,
inlined from ‘main’ at ts_calibrate.c:227:11:
/usr/include/x86_64-linux-gnu/bits/fcntl2.h:51:24: error: call to ‘__open_missing_mode’ declared with attribute error: open with O_CREAT in second argument needs 3 arguments
调用open函数,如果在第二个参数中使用了 O_CREAT,就必须添加第三个参数:创建文件时赋予的初始权限。修改tests/ts_calibrate.c文件的第227行和地230行,添加文件的操作模式:
if ((calfile = getenv("TSLIB_CALIBFILE")) != NULL) {
cal_fd = open (calfile, O_CREAT | O_RDWR, 0777);
} else {
cal_fd = open ("/etc/pointercal", O_CREAT | O_RDWR, 0777);
}
$ sudo make install
(4) 系统配置
完成后,将tslib拷贝到主机 /usr/local/tslib 目录下。
进入下一步之前,先将主机中 /usr/local/tslib/etc/ts.conf 文件第二行“#module_raw input”的注释去掉,变为“module_raw input”,注意一定要顶格。
(运行错误)
提示“ts_open:no such file or directory”
解决方法:
引起此错误的情况较多,触屏校正程序执行时会先去打开触屏的设备节点,IMX283开发板的触屏设备节点对应为/dev/event0,查看系统环境变量是否配置正确,查看/dev/目录下是否存在触屏的设备节点event0。
问题2.出现:no raw modules load
tsconfig:no such file or directory
解决方法:
/TSLIB/etc/ts_conf 文件中语句modle_raw input前可能存在空格,把空格去掉
更改配置:
在/etc/profile中添加
export TSLIB_ROOT=/usr/local/tslib
export LD_LIBRARY_PATH=$TSLIB_ROOT/lib:$LD_LIBRARY_PATH
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_TSDEVICE=/dev/input/event0
export TSLIB_TSEVENTTYPE=INPUT
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=$TSLIB_ROOT/etc/ts.conf
export TSLIB_PLUGINDIR=$TSLIB_ROOT/lib/ts
(5)应用tslib
main.c
#include <stdio.h>
#include <stdlib.h>
#include <signal.h>
#include <sys/fcntl.h>
#include <sys/ioctl.h>
#include <sys/mman.h>
#include <sys/time.h>
#include "tslib.h"
int main()
{
struct tsdev *ts;
char *tsdevice=NULL;
if( (tsdevice = getenv("TSLIB_TSDEVICE")) != NULL ) {
ts = ts_open(tsdevice,0);
} else {
ts = ts_open("/dev/input/event0", 0);
}
if (!ts) {
perror("ts_open");
exit(1);
}
if (ts_config(ts)) {
perror("ts_config");
exit(1);
}
while (1) {
struct ts_sample samp;
int ret;
ret = ts_read(ts, &samp, 1);
if (ret < 0) {
perror("ts_read");
exit(1);
}
if (ret != 1)
continue;
printf("%ld.%06ld: %6d %6d %6d\n", samp.tv.tv_sec, samp.tv.tv_usec, samp.x, samp.y, samp.pressure);
}
}
Makefile:
CC = arm-none-linux-gnueabi-gcc
INC = -I../include
CFLAGS =-L/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/tslib/tslib_install/lib -lts
TARGET=./main
SRC=$(wildcard ./*.c)
OBJ=$(patsubst %.c, %.o, $(SRC))
$(TARGET): $(OBJ)
$(CC) -o $@ $^ $(CFLAGS)
$(OBJ):%.o: %.c
$(CC) $(INC) -o $@ -c $< $(CFLAGS)
clean:
rm -f *.o
rm -f $(TARGET)
编译QT
打开解压目录下的mkspecs/qws/linux-arm-g++/qmake.conf:
$ vi mkspecs/qws/linux-arm-g++/qmake.conf
用vi打开qmake.conf 后,将arm-linux-全部替换 arm-none-linux-gnueabi-(注意:根据自己板子而定,并且一定要先将交叉编译器的路径加入PATH变量中),并加上-lts,然后保存退出,更改后如下:
```sh
#
# qmake configuration for building with arm-linux-g++
#
include(../../common/linux.conf)
include(../../common/gcc-base-unix.conf)
include(../../common/g++-unix.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-ar cqs
QMAKE_OBJCOPY = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-objcopy
QMAKE_STRIP = /home/swann/SDK/IMX_283A/CrossCompile/gcc-4.4.4-glibc-2.11.1-multilib-1.0/arm-fsl-linux-gnueabi/bin/arm-none-linux-gnueabi-strip
load(qt_config)
```
配置脚本:
sudo ./configure --prefix=/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/qt-everywhere-opensource-src-4.8.6/qt_install -opensource -release -shared -Declarative
-importdir /opt/imports -fast -no-largefile -qt-sql-sqlite -qt3support -exceptions -xmlpatterns -no-glib -no-phonon -no-mmx -no-3dnow -no-sse -no-sse2 -svg
-no-webkit -qt-zlib -qt-libtiff -qt-libpng -qt-libjpeg -make libs -make tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -iconv -no-dbus
-xplatform qws/linux-arm-g++ -embedded arm -little-endian -qt-freetype -depths 16,24,32 -qt-gfx-linuxfb -qt-gfx-transformed -qt-gfx-multiscreen -no-gfx-vnc
-no-gfx-qvfb -qt-kbd-linuxinput -no-kbd-qvfb -armfpa -no-mouse-qvfb -qt-mouse-linuxtp -qt-mouse-tslib -DQT_QLOCALE_USES_FCVT -DQT_NO_QWS_CURSOR -no-pch
-I/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/tslib/tslib_install/include -L/home/swann/SDK/IMX_283A/IMX_NEW/Qt4.8.6/tslib/tslib_install/lib -confirm-license
make
make install
安装到平台上
编译完成以后得到qt_install
将lib中需要的文件拷贝到/usr/lib中
将fonts文件拷贝到/usr/lib中
对profile做出如下配置
export QWS_KEYBOARD=USB:/dev/input/event1
export QWS_MOUSE_PROTO=Tslib:/dev/input/event0
export QT_QWS_FONTDIR=/usr/lib/fonts
运行
./IMX -qws