移植QT到ARM板上
近几年一直做QT开发,也有独立移植,最近换工作,又需要在移植新的平台,以往的经验能跳过一些坑,然而并不能跳过所有的坑,这不今天刚从新坑里出来
QT的编译我就不再详说了,其本上改一下qt-everywhere-src-5.12.6/qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf里的编译器就能通过了
这里先描述下现象
(1)先是ts_calibrate不响应的
(2)解决了ts_calibrate不响应后,触屏一碰就报segment fault
(3)配置问题,到此已能完美的运行QT了
第一个问题(1)先是ts_calibrate不响应的
原因
input_dev里设置了支持ABS_PRESSURE
set_bit(ABS_PRESSURE, pInputDev->absbit);
input_set_abs_params(pInputDev,ABS_PRESSURE, 0, PRESS_MAX, 0 , 0); input_set_abs_params(pInputDev,ABS_MT_PRESSURE, 0, PRESS_MAX, 0 , 0);
但是驱动里却没有上报这个值,导致tslib一直以为支持PRESSURE,等待到PRESSURE变化,结果一直没有等到,当然就不能识别按下和抬起了
解决方法:
增加input_report_abs(input_dev,ABS_PRESSURE,pressStatus);
也不知上个驱动开发者为啥留这样的坑
第二个问题,(2)解决了ts_calibrate不响应后,触屏一碰就报segment fault
一直以为还是tslib的配置问题,最后脑子一转,QT还没完整的配过,可能由鼠标和触摸屏同时存在时,如果不配置export QT_QPA_FB_TSLIB=1就会segment fault
解决方法:
配置export QT_QPA_FB_TSLIB=1
第(3)配置问题,到此已能完美的运行QT了
借鉴了同事的作做,把tslib qtlib qtapp放在一个文件夹下,用start.sh脚本来配置环境,并启动qtapp很好
我的目录结构如下
app qtlib start_app.sh ts_calibrate.sh tslib
cat start_app.sh
#!/bin/sh
#
#
SHELL=/bin/sh
CUR_PATH=$(cd `dirname $0`; pwd)
ROOT=$(cd `dirname $0`; pwd)
echo ROOT:$ROOT
#########for tslib###########
export TSLIB_ROOT=$ROOT/tslib
export TSLIB_TSDEVICE=/dev/input/touchscreen0
export TSLIB_CONFFILE=${TSLIB_ROOT}/etc/ts.conf
export TSLIB_PLUGINDIR=${TSLIB_ROOT}/lib/ts
export TSLIB_CALIBFILE=${TSLIB_ROOT}/etc/pointercal
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
#########for qt###########
export QTDIR=$ROOT/qtlib
export LD_LIBRARY_PATH=${QTDIR}/lib:${TSLIB_ROOT}/lib:$LD_LIBRARY_PATH
export QT_QPA_FB_TSLIB=1
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0
export QT_PLUGIN_PATH=${QTDIR}/plugins
export QT_QPA_FONTDIR=${QTDIR}/lib/fonts
export PATH=${TSLIB_ROOT}/bin:$PATH
./app/testqt