tslib1.4与Qt4.8.6的交叉编译与移植
2014-05-30 09:09
686 查看
最近开始正式接触QT开发,网上看了些移植教程都写的有点乱,博客园的emouse思·睿有一篇写的很好的文章,下面是文章的链接
http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html
我结合自己编译移植过程中遇到的问题重新整理下,写下这篇博客,大部分跟上面的一样,但也有些原帖没有的东西,算是一个总结。
就像上面那位老兄说的“Linux的东西搞起来麻烦的地方就在于太杂、太散”,这个我十分同意,有时候少做了那么一个步骤,后面就会出错,到网上搜半天才能解决。这就是所谓的蛋疼吧。
QT个各版本之间是存在差异的,qt-creator和qt-library尽量用最新的吧。
先大致说一下整个过程:
首先,在PC上交叉编译tslib和Qt(交叉编译是为了生成在开发板上能用的文件),然后将生成文件下载或拷到开发板上,我是用SD卡拷的。然后将开发板的环境变量设置好,移植就算成功了,大概过程就是这样。
下面正式开始:
软件平台
Linux:Ubuntu 12.04(32位,尽量用32位的,不然还得安装32位的库文件。)
qt-library:4.8.6
qt-creator:5.3.0
交叉编译工具链:arm-linux-gcc (version 4.4.6)
tslib编译与安装
tslib是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。因此这里先编译安装tslib,这样在后面编译Qt的时候才能打包编译进去。
准备工作:安装以下三个软件(原帖中autoconf无需安装,另外需安装libtool)
安装完上面的3个软件以后,将下载的tarlib-1.4源码解压编译安装
编译过程中,有一个问题,
在make时出错,提示
In function ‘open’,
inlined from ‘main’ at ts_calibrate.c:229:11:
/usr/include/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
make[2]: *** [ts_calibrate.o] Error 1
解决方法:
这是因为open函数的语法不符合最新的gcc,在/tests/ts_calibrate.c中加入open的第三个参数0777:
修改如下
[b]tslib的开发板移植与测试[/b]
将tslib文件夹整个拷到开发板/usr/local/目录下,然后修改ts.conf文件
下面是ts.conf文件的第一行与第二行
去掉# module_raw input前面的注释,一定要注意中间的空格也去掉,module顶格。
最后添加环境变量,通过超级终端在开发板系统中添加环境变量,可以在开发板文件系统的/etc/profile文件里添加,也可以直接添加。(若修改/etc/profile,要立即使这些变量生效,还需要修改完后输入命令source /etc/profile)
最后运行测验程序
ts_calibrate 进行校验 ts_test 进行测试
测试结果如下图所示:(这里就用他的图了,懒得拍)
QT 的交叉编译与安装
首先配置,同样是通过运行./configure来生成Makefile,由于配置项较多,所以把它写成一个脚本,如下
上面的主要参数含义说明如下:
-embedded arm: 表示将编译针对 arm 平台的 embedded 版本;
-xplatform qws/linux-arm-g++: 表示使用 arm-linux 交叉编译器进行编译;
-qt-mouse-tslib: 表示将使用 tslib 来驱动触摸屏;
运行脚本
成功后会出现如下信息
接下来执行make进行编译
编译完后执行make install 进行安装。
可以在文件夹/usr/local/Trolltech/下看到刚刚编译好的Qt文件夹。
移植到开发板
将编译的文件夹,PC中的/usr/local/Trolltech/Qt-4.8.6/,拷到开发板的/usr/local/目录下,我是用SD卡拷的。
设置环境变量:
在最后加入以下内容
立即使用变量
到此为止,QT的移植算是成功了
可以用Qt自带的示例程序来测试一下,
此文件夹下有很多示例程序,随便选一个运行。
例如
必须要加参数-qws
http://www.cnblogs.com/emouse/archive/2013/01/29/2881311.html
我结合自己编译移植过程中遇到的问题重新整理下,写下这篇博客,大部分跟上面的一样,但也有些原帖没有的东西,算是一个总结。
就像上面那位老兄说的“Linux的东西搞起来麻烦的地方就在于太杂、太散”,这个我十分同意,有时候少做了那么一个步骤,后面就会出错,到网上搜半天才能解决。这就是所谓的蛋疼吧。
QT个各版本之间是存在差异的,qt-creator和qt-library尽量用最新的吧。
先大致说一下整个过程:
首先,在PC上交叉编译tslib和Qt(交叉编译是为了生成在开发板上能用的文件),然后将生成文件下载或拷到开发板上,我是用SD卡拷的。然后将开发板的环境变量设置好,移植就算成功了,大概过程就是这样。
下面正式开始:
软件平台
Linux:Ubuntu 12.04(32位,尽量用32位的,不然还得安装32位的库文件。)
qt-library:4.8.6
qt-creator:5.3.0
交叉编译工具链:arm-linux-gcc (version 4.4.6)
tslib编译与安装
tslib是电阻式触摸屏用于校准的一个软件库,是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能,通常作为触摸屏驱动的适配层,为上层的应用提供了一个统一的接口。因此这里先编译安装tslib,这样在后面编译Qt的时候才能打包编译进去。
准备工作:安装以下三个软件(原帖中autoconf无需安装,另外需安装libtool)
sudo apt-get install automake sudo apt-get install autogen sudo apt-get install libtool
安装完上面的3个软件以后,将下载的tarlib-1.4源码解压编译安装
# tar -zxvf tslib-1.4.tar.gz # cd tslib # ./autogen.sh #./configure --host=arm-linux ac_cv_func_malloc_0_nonnull=yes --cache-file=arm-linux.cache -prefix=/usr/local/tslib # make # make install
编译过程中,有一个问题,
在make时出错,提示
In function ‘open’,
inlined from ‘main’ at ts_calibrate.c:229:11:
/usr/include/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
make[2]: *** [ts_calibrate.o] Error 1
解决方法:
这是因为open函数的语法不符合最新的gcc,在/tests/ts_calibrate.c中加入open的第三个参数0777:
#cd tests/ #vi ts_calibrate
修改如下
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); }
[b]tslib的开发板移植与测试[/b]
将tslib文件夹整个拷到开发板/usr/local/目录下,然后修改ts.conf文件
下面是ts.conf文件的第一行与第二行
# Uncomment if you wish to use the linux input layer event interface # module_raw input
去掉# module_raw input前面的注释,一定要注意中间的空格也去掉,module顶格。
最后添加环境变量,通过超级终端在开发板系统中添加环境变量,可以在开发板文件系统的/etc/profile文件里添加,也可以直接添加。(若修改/etc/profile,要立即使这些变量生效,还需要修改完后输入命令source /etc/profile)
export set TSLIB_FBDEVICE=/dev/fb0 export set TSLIB_TSDEVICE=/dev/event3 export set TSLIB_CONFFILE=/usr/local/tslib/etc/ts.conf export set TSLIB_CALIBFILE=/etc/pointercal export set TSLIB_PLUGINDIR=/usr/local/tslib/lib/ts
说明: TSLIB_TSDEVICE //触摸屏设备文件名,这个需要选对 TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate校准程序生成。 SLIB_CONFFILE //配置文件名。 TSLIB_PLUGINDIR //插件目录 TSLIB_CONSOLEDEVICE //控制台设备文件名 TSLIB_FBDEVICE //设备名 以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。
最后运行测验程序
ts_calibrate 进行校验 ts_test 进行测试
测试结果如下图所示:(这里就用他的图了,懒得拍)
QT 的交叉编译与安装
首先配置,同样是通过运行./configure来生成Makefile,由于配置项较多,所以把它写成一个脚本,如下
#!/bin/sh ./configure \ -opensource \ -confirm-license \ -release -shared \ -embedded arm \ -xplatform qws/linux-arm-g++ \ -depths 16,18,24,32 \ -fast \ -optimized-qmake \ -pch \ -qt-sql-sqlite \ -qt-libjpeg \ -qt-zlib \ -qt-libpng \ -qt-freetype \ -little-endian -host-little-endian \ -no-qt3support \ -no-libtiff -no-libmng \ -no-opengl \ -no-mmx -no-sse -no-sse2 \ -no-3dnow \ -no-openssl \ -no-webkit \ -no-qvfb \ -no-phonon \ -no-nis \ -no-opengl \ -no-cups \ -no-glib \ -no-xcursor -no-xfixes -no-xrandr -no-xrender \ -no-separate-debug-info \ -nomake examples -nomake tools -nomake docs \ -qt-mouse-tslib \ -I/usr/local/tslib/include \ -L/usr/local/tslib/lib exit
上面的主要参数含义说明如下:
-embedded arm: 表示将编译针对 arm 平台的 embedded 版本;
-xplatform qws/linux-arm-g++: 表示使用 arm-linux 交叉编译器进行编译;
-qt-mouse-tslib: 表示将使用 tslib 来驱动触摸屏;
运行脚本
#chmod +x autoconfig #./autoconfig
成功后会出现如下信息
Qt is now configured for building. Just run 'make'. Once everything is built, you must run 'make install'. Qt will be installed into /usr/local/Trolltech/QtEmbedded-4.8.4-arm To reconfigure, run 'make confclean' and 'configure'.
接下来执行make进行编译
编译完后执行make install 进行安装。
可以在文件夹/usr/local/Trolltech/下看到刚刚编译好的Qt文件夹。
移植到开发板
将编译的文件夹,PC中的/usr/local/Trolltech/Qt-4.8.6/,拷到开发板的/usr/local/目录下,我是用SD卡拷的。
设置环境变量:
我直接修改profile文件 #vi /etc/profile
在最后加入以下内容
export set QTDIR=/usr/local/Qt-4.8.6 #目录名要与拷贝的Qt文件夹名一致 export set LD_LIBRARY_PATH=$QTDIR/lib:$LD_LIBRARY_PATH export set PATH=$QTDIR/bin:$PATH export set MANPATH=$QTDIR/man:$MANPATH export set QT_QWS_FONTDIR=/usr/local/Qt-4.8.6/lib/fonts export set QWS_MOUSE_PROTO=tslib:/dev/event3 #重要
立即使用变量
#source /etc/profile
到此为止,QT的移植算是成功了
可以用Qt自带的示例程序来测试一下,
# cd /usr/local/Qt-4.8.6/demos/
此文件夹下有很多示例程序,随便选一个运行。
例如
cd affine/ ./affine -qws
必须要加参数-qws
相关文章推荐
- [转载]tslib1.4与Qt4.8.6的交叉编译与移植
- QT5.7+tslib1.4库的交叉编译、移植到开发板ARM9上,无法使用触摸屏
- 移植qt之交叉编译tslib-1.4
- qt-embedded-linux-opensource-src-4.8.6 + tslib-1.4 + qwt-6.0.2 编译和移植到mini2440开发板
- QT5.7+tslib1.4库的交叉编译、移植到开发板ARM9上.......
- Qt5.3.0的移植安装与测试(交叉编译,用于arm,支持tslib触摸屏)
- 交叉编译tslib1.4过程详述,配合QT4.5.3成功在Mini2440运行成功
- 交叉编译tslib1.4过程详述,配合QT4.5.3成功在Mini2440运行成功
- Qt4.5.1触摸屏(tslib 1.4)+sqlite3 移植全记录
- tslib1.4的编译与移植
- QT4.4.3 交叉编译环境搭建和移植
- Qt4.5.1触摸屏(tslib 1.4)+sqlite3 移植全记录
- tslib-1.4移植 qt-4.8.5移植
- 如何交叉编译 移植 QT
- QT5.6移植到ARM 之 移植tslib1.4总结
- qt在linux与ok6410上的安装移植(2)——tslib和开发板上qt的编译
- 在arm+linux平台编译Qt4.5.3和tslib1.4
- 移植tslib1.4 编译问题
- tslib1.4 + qt-everywhere-4.7.4移植
- 交叉编译tslib1.4