作者:冯老师,华清远见嵌入式学院讲师。

1. 搭建Qt开发环境平台

1、开发环境:ubuntu 12.04
2、交叉编译链:arm-cortex_a8-linux-gnueabi
3、开发板:FS210

2. Qt移植所需的工具

首先,我们可以从官网下载Qt源码,
1) qt-everywhere-opensource-src-4.7.0.tar.gz  QT的源码包(库)
2) qt-sdk-linux-x86-opensource-2010.05.bin   QT-IDE开发软件
3) tslib-1.4.tar.gz               QT触摸校验程序

这里我们项目文档中已经给出三个源码。源码位置:该光盘下:\移植相关\QT相关\。

下面介绍一下三个源码的用途:
1) qt-everywhere-opensource-src-4.6.3.tar.gz为Qt的源码包,用来编译各种Qt的库等,这里需要编译三次,分别为x11版本,embedded版本和arm版本(需要应用到不同的平台上);
a. 编译x11版只是为了得到qvfb工具,至于qvfb的用途后面自会说明;
b. embedded版本为Qt 的嵌入式版本,将来和qvfb配合使用;
c. arm版本很好理解,即要放到开发板上的东西。
2) qt-sdk-linux-x86-opensource-2010.04.bin是开发qt的IDE,这里我用的是linux版本,用它来开发自己的Qt应用。
3) tslib-1.4.tar.gz为触摸屏校正程序,编译qt的arm版本的时候需要tslib的库,tslib编译后会生成触摸屏校正程序(t”s_calibrate),用来给开发板的触摸屏进行校正。

3. tslib的移植

1) 拷贝“该光盘下:\移植相关\QT相关\”目录下的tslib-1.4.tar.gz到linux系统。
2)解压源码:
$ tar -zxvf tslib-1.4.tar.gz
$ cd tslib-1.4
3)执行autogen.sh脚本生产configure文件

这一步需要安装一些工具,如:在ubuntu系统下可以执行:
$ sudo apt-get install autotools-dev
$ ./autogen.sh

如果出现以下错误:则处理如下
./autogen.sh: 4: autoreconf: not found
是在不同版本的 tslib 下执行 autogen.sh 产生。它们产生的原因一样,是
因为没有安装automake 工具,(ubuntu 10.04)用下面的命令安装好就可以了。

$ sudo apt-get install autoconf automake libtool

4) 执行confugure生成Makefile文件
a. $ echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
b. $ vi tslib-1.4/plugins/input-raw.c

注释掉 static int check_fd函数中的部分代码,如下所示。

c. $./configure --host=arm-cortex_a8-linux-gnueabi --prefix=/home/linux/tslib --cache-file=arm-linux.cache

说明:

--host :是指你的交叉编译器的前缀;例如:

你的交叉编译器是arm-linux-gcc,则--host=arm-linux。
如果是arm-none-linux-gnueabi-gcc,则--host=arm-none-linux-gnueabi。

--prefix :是你执行make install 的时候编译后生成的可执行文件和库文件以及配置文所安装的目录,这个目录不能和tslib源码目录相同;

--enable-inputapi=no :看你的触摸屏驱动是否支持ioctl操作,如果支持就不用写上,不支持就要添上,如果不添加会有ts_open:Inappropriate ioctol for device configure文件下还有很多选项,你可以执行./configure --help 来进行选择其他项,不过在这里这些选项就够了。

5) 编译安装
$ 修改tests/ts_calibrate.c 修改226行和229行,加上0666

$ make
$ make install

6) 把指定安装目录下的tslib的文件都拷贝到你所挂载的根文件系统下
$ cp -a /home/linux/tslib /source/rootfs

7) 修改/source/rootfs/tslib下的etc目录中ts.conf文件

#vim ts.conf
将第二行的#module_raw input修改成module_raw input
注意一定要顶格写,否则程序执行时会发生读取ts.conf错误
每次重编译tslib并安装后,都要重新修改/etc/ts.conf.

8)导出环境变量
在/source/rootfs/etc/profile中添加如下代码:

export TSLIB_TSDEVICE=/dev/event4
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/tslib/lib/ts
export TSLIB_CALIBFILE=/etc/pointercal
export TSLIB_CONFFILE=/tslib/etc/ts.conf

export set HOME=/root
export set QPEDIR=/qt-everywhere
export set QTDIR=/qt-everywhere
export set LD_LIBRARY_PATH=/qt-everywhere/lib:/tslib/lib:$LD_LIBRARY_PATH

export QWS_DISPLAY="LinuxFb:mmWidth100:mmHeight130:0"
export TSLIB_TSEVENTTYPE=H3600
export set QT_QWS_FONTDIR=/qt-everywhere/lib/fonts/
export set PLUGIN_PATH=$QTDIR/plugins
export set PATH=$QPEDIR/bin:$PATH

export PATH LD_LIBRARY_PATH
export TSLIB_ROOT=/tslib
export QWS_SIZE=800x480

说明:
TSLIB_TSDEVICE //触摸屏设备文件名。
TSLIB_CALIBFILE //校准的数据文件,由ts_calibrate校准程序生成。
SLIB_CONFFILE //配置文件名。
TSLIB_PLUGINDIR //插件目录
TSLIB_CONSOLEDEVICE //控制台设备文件名
TSLIB_FBDEVICE //设备名

以上环境变量在实际开发中的实际配置可以根据实际情况决定。而这些指定的设备节点一定要和你的开发板上的/dev目录下的设备节点相对应。在以往项目中设备文件名有可能是/dev/event4

9)插上屏后,在开发板上运行/tslib/bin下的测试程序。

把交叉工具链中的库拷贝到/source/rootfs/lib下面
$ cp /home/linux/toolchain/arm-cortex_a8-linux-gnueabi/lib/* /source/rootfs/lib
开发板上执行:# /tslib/bin/ts_calibrate

4. 移植QT lib <4.7.0 for arm>

把该光盘下:\移植相关\QT相关\文件夹下的qt-everywhere-opensource-src-4.7.0-beta2.tar拷贝到linux环境下。不能/mnt/hgfs/挂载目录下执行。因为此文件里面有ln 连接文件。Window和linux的磁盘不一样,不支持ln。

1) 解压源码
$ tar xvf qt-everywhere-opensource-src-4.7.0-beta2.zip

2) 改配置文件,指明交叉编译工具链
$ cd qt-everywhere-opensource-src-4.7.0-beta2
$ vi mkspecs/qws/linux-arm-gnueabi-g++/qmake.conf

3) 配置
$ ./configure -prefix /qt-everywhere -embedded arm -release -opensource -fast -no-accessibility -no-scripttools -no-mmx -no-multimedia -no-svg -no-webkit -no-3dnow -no-sse -no-sse2 -silent -qt-libpng -qt-libjpeg -no-libtiff -make libs -nomake tools -nomake examples -nomake docs -nomake demo -no-nis -no-cups -no-iconv -no-dbus -no-openssl -xplatform qws/linux-arm-gnueabi-g++ -little-endian -qt-freetype -depths 4,8,12,16,24,32 -qt-gfx-linuxfb -no-gfx-transformed -no-gfx-multiscreen -no-gfx-vnc -no-gfx-qvfb -qt-kbd-linuxinput -no-glib -qt-mouse-tslib -I/home/linux/tslib/include -L/home/linux/tslib/lib
备注:红色的为连接TSLIB库的路径,一定要正确。

4) 编译并安装
$ make
$ sudo make install

5) 把prefix制定的安装目录全部拷贝到开发板上
$ cp -a /qt-everywhere /source/rootfs

5、在板子下配置环境变量:(该步骤已做)

1) 修改/source/rootfs/etc/profile添加如下内容:
export LD_LIBRARY_PATH=/qt-everywhere-/lib:$LD_LIBRARY_PATH
export QWS_SW_CURSOR
export QT_QWS_FONTDIR=/qt-everywhere/lib/fonts

(// fonts目录下放字体集,使qt支持中文。(删除其他字体,只留以下三个)

wenquanyi_130_75.qpf wenquanyi_150_50.qpf wenquanyi_150_75.qpf)
export set HOME=/root
export set QPEDIR=/qt-everywhere

文章来源:华清远见嵌入式学院原文地址:http://www.embedu.org/Column/Column763.htm

更多相关嵌入式免费资料查看华清远见讲师博文>>

最新文章

  1. SQL中inner join、outer join和cross join的区别
  2. Thinking in Java——笔记(18)
  3. Html网页使用jQuery传递参数并获取Web API的数据
  4. 移动Web与js定时器暂停或不准确计时的问题解决
  5. Android 中ViewPagerIndicator的使用
  6. 部署搭建 Saltstack(centos6.6)
  7. linux 第三天11讲
  8. VC中遍历目标进程中的模块
  9. 终极解法According to TLD or attribute directive in tag file, attribute select does not accept any expressions
  10. 如何在sublime中使用sass
  11. Linux指令--ln
  12. 好用的SQLAlchemy
  13. c/c++ 用前序和中序,或者中序和后序,创建二叉树
  14. python使用上下文对代码片段进行计时,非装饰器
  15. Xcode project 设置相关
  16. 搭建互联网架构学习--003--maven以及nexus私服搭建
  17. 【Docker】常用命令
  18. New动态分配 Delete 释放内存
  19. 201671010140. 2016-2017-2 《Java程序设计》java学习第十一周
  20. P1113 杂务

热门文章

  1. 6-03使用SQL语句一次型向表中插入多行数据
  2. 面试题之【打印1到最大的N位数】
  3. (四)WebRTC手记之本地音频采集
  4. 第六篇:在SOUI中用九宫格拉伸方式显示一个图片资源
  5. javascript中的true和false
  6. Android ImageCache图片缓存,使用简单,支持预取,支持多种缓存算法,支持不同网络类型,扩展性强
  7. windows 2003 企业版 下载地址+序列号
  8. 在Salesforce中通过dataloadercliq调用data loader来批量处理数据
  9. json方式的面向对象
  10. 【转】最近搞Hadoop集群迁移踩的坑杂记