关于Qt的移植,以前移植过一次S3C2440的.现在这平台是AT91SAM9X35的.不过移植过程都一样,只不过遇到了以前没遇到的事情,在此记录下来
平台:AT91SAM9X35
环境:linux-2.6.39
移植Qt版本:4.6.4
交叉编译器:arm-linux-gcc
移植过程遇到的问题:运行Qt程序,点击屏幕没有反应.鼠标也没动.
(1)问题分析:交叉编译器头文件EV_VERSION宏与所移植的内核版本的EV_VERSION宏不一样.
解决途径:
查看下EV_VERSION的定义.
交叉编译器中的位置:/opt/buildroot-2011.11/arm926t/usr/arm-unknown-linux-uclibcgnueabi/sysroot/usr/include/linux/input.h 这是我交叉编译器中该文件的位置
linux内核中的位置:include/linux/input.h
我这里两个都是 #define EV_VERSION 0x010001. 也有的是0x010000 只要两个文件下的一样就可以. 如果不一样,就去把内核里的改成匹配交叉编译器里的.
该问题产生的现象:
如果在运行Qt程序之前,运行tslib库进行校正的话, 会出现selected device is not a touchscreen I understand的错误.出现这个错误信息的原因和
调试方法下篇再讲.
(2)问题分析:环境变量设置不正确
解决途径:
export QWS_MOUSE_PROTO=TSLIB:/dev/event0
export TSLIB_TSDEVICE=/dev/event0
这是主要的环境变量,其他的就不在这贴了,都一样.
当然,有的是/dev/input/event0或其他的,这里就要测试一下到底是哪个.
测试方法:
1、cat /dev/event0 然后点击触摸屏,看是否有东西输出,乱码也是可以的.
2、hexdump /dev/event0 点击屏幕,查看是否有数据输出.
两种方法的原理都一样,就是要确认哪个是触摸屏的设备
(3)问题分析:编译Qt库出现问题
我的问题就是在这里,编译的时候configure是时候没加入-qt-mouse-tslib这个选项,所以configure的时候要加入这个选项. 下面是我的编译选项,仅供参考
./configure -prefix /apps/qt-everywhere-arm926t/ -release -shared -fast -no-largefile -qt-sql-sqlite -no-qt3support -no-xmlpatterns -no-mmx -no-3dnow -no-sse -no-sse2 -no-svg -no-webkit -qt-zlib -qt-gif -qt-libtiff -qt-libpng -qt-libmng -qt-libjpeg -make libs -xplatform qws/linux-arm-g++ -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -embedded arm -little-endian -qt-freetype -depths 16,18 -no-glib -qt-mouse-tslib -no-javascript-jit -no-script -no-scripttools
原文地址:http://blog.csdn.net/demetered/article/details/39081889