1、移植前准备
确认开发板的内核是否有触摸屏驱动,新版的开发板触摸屏芯片是gxl680。
可以使用cat /proc/bus/input/devices
可知gslX680对应的设备文件是event2,然后用hexdump /dev/input/event2 这样触摸屏幕的时候,会打印出触摸屏上报的消息。
2、tslib移植和测试
首先确保一下软件已经安装了
sudo apt-get install autoconf(或autoconf2.13)
sudo apt-get install automake
sudo apt-get install libtool下载tslib源码http://vdisk.weibo.com/s/AcUHxOERV2k0
在ubuntu中解压开后,进入到该文件中执行命令./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes">arm-linux.cache
mkdir /opt/tslib
./configure --prefix=/opt/tslib --host=arm-linux --cache-file=arm-linux.cache
make
make install
之后就可以在opt/tslib文件夹下看到这是四个文件了。

3、部署
将需要用到的库文件、配置文件、bin文件拷贝到开发板的根文件系统中。将刚刚生成的tslib文件夹拷贝到开发板的根文件系统中。
然后在开发板的文件系统中的etc/profile中添加
export TSLIB_TSDEVICE=/dev/input/event2
export TSLIB_CALIBFILE=/tslib/etc/pointercal
export TSLIB_CONFFILE=/tslib/etc/ts.conf
export TSLIB_PLUGINDIR=/tslib/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/tslib/lib
export TS_INFO_FILE=/sys/class/input/input2/uevent
之后重启,进入tslib/bin目录下运行./ts_calibrate会报错

在tslib中的etc文件夹下的ts.conf文件中修改,打开module_raw input选项。

修改完之后再次运行,会出现错误,这里网上找下资料就可以解决了。
https://blog.youkuaiyun.com/liuzijiang1123/article/details/45787901
这里我直接修改内核的include/linux/input.h文件将EV_VERSION修改回0x10000;

这样基本完成tslib的移植。
4、安装QT
在http://ffmpeg.club/qt_download.html中,使用百度云下载,文件大小700M,要提前下,要不然最近百度网盘速度不咋地,得等好一阵子。

下载完之后,放在ubuntu中,在终端直接./qt-opensource-linux-x64-5.8.0.run。
记住!安装的时候,选项Sources一定要勾起来!!!这样才能得到源码。
最后这里由于我的开发板的编译链太老旧了,编译5.8的编译不过去,所以只能使用5.6.2的源码编译库文件来给开发板使用。
5、qmake配置
安装完成后,需要对Qt进行qmake的配置
配置源码文件夹下的qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
在qmake.conf中添加
QT_QPA_DEFAULT_PLATFORM = linuxfb //使用非窗口配置
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a //armv7架构
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a
然后将QMAKE_CC QMAKE_CXX QMAKE_LINK QMAKE_LINK_SHLIB修改成我们自己的交叉编译工具链。
QMAKE_CC = arm-linux-gcc -lts
QMAKE_CXX = arm-linux-g++ -lts
QMAKE_LINK = arm-linux-g++ -lts
QMAKE_LINK_SHLIB = arm-linux-g++ -lts

6、编译前配置
首先在ubuntu中的opt文件夹下创建QT5.6.2文件夹。
其中:prefix /opt/QT5.6.2代表安装路径。-opensource代表配置成开源版本 -shared表示配置成共享库。 -c++std c++98代表编译时候用的标准。-xplatform linux-arm-gnueabi-g++表示之前qt源码目录中的qtbase/mkspecs/linux-arm-gnueabi-g++文件夹。./configure -prefix /opt/QT5.6.2 -opensource -confirm-license -release -shared -accessibility \
-c++std c++98 \
-xplatform linux-arm-gnueabi-g++ \
-qpa linuxfb -linuxfb \
-qreal float -pch \
-qt-zlib -qt-libjpeg -qt-libpng \
-no-sse2 -no-largefile -no-qml-debug -no-glib -no-gtkstyle -no-opengl -nomake tools -nomake examples -tslib \
-skip qt3d -skip qtcanvas3d -skip qtdoc -skip qtwayland \
-I /opt/tslib/include -L /opt/tslib/lib
7、解决make中的错误
(1)找不到dlopen或者dlsym
在编译器后面加ldl arm-linux-g++ -ldl
(2)undefined reference to `__sync_add_and_fetch_4'
将交叉编译链源码中的linux-atomic.c文件拿出来,然后按照下面步骤进行编译。
首先安装好libtool工具
apt-get install libtool
然后将linux-atomic.c文件进行加工,生成我们需要的linux-atomic.a文件。
libtool --tag=CC --mode=compile arm-linux-gcc -g -O2 -MT linux-atomic.lo -MD -MP -MF linux-atomic.Tpo -c -o linux-atomic.lo linux-atomic.c
libtool --tag=CC --mode=link arm-linux-g++ -g -O2 -o liblinux-atomic.la linux-atomic.lo
利用libtool生成liblinux-atomic.a,注意生成的目录名叫.libs所以是隐藏的。
最后将liblinux-atomic.a放在随便一个文件夹中,将来在makefile中链接它即可,这里我们将它放在opt/linux-atomic。
在QT源码下修改:./qtscript/src/script/Makefile
在LIBS = 的结尾添加 -L/opt/linux-atomic -llinux-atomic

make完成之后,再执行make install 将我们需要的库文件就会放在之前opt/Qt5.6.2/文件夹下。