当前位置:首页 >> 信息与通信 >>

5iTEK9261S开发板系列教程之Qt移植与开发v.1


2010

北京 爱泰 电子
?

Qt 应用程序开发手册
‐‐5iTEK9261S 开发板系列教程?
本文档深入介绍了 Qt3 与 Qt4 在 ARM9 开发板 5ITEK9261S 上的移植与 Qt 应 用程序开发?

王伟 北京爱泰电子 2010‐9‐8

北京爱

泰电子

目录
1.Qt 的几个相关概念 .................................................................................................................................................................... 4? 1.2 Qt 的版本介绍 ................................................................................................................................................................ 4? 1.2.1 qtopia-2.20 ......................................................................................................................................................... 4? 1.2.2 Qt4 版本 ............................................................................................................................................................... 4? 1.3 Qt 的开发软件介绍 ........................................................................................................................................................ 5? 2.建立 Qtopia-2.2.0 开发平台 ................................................................................................................................................... 6? 2.1 准备工作 .......................................................................................................................................................................... 6? 2.2 编译 PC 版本的 Qtopia-2.20 ........................................................................................................................................ 7? 2.3 编译 ARM 版本的 Qtopia-2.2.0 ................................................................................................................................... 7? 2.3.1 编译 jpeg 库 ........................................................................................................................................................ 7? 2.3.2 编译 tslib 触摸屏库............................................................................................................................................. 8? 2.3.3 编译 e2fsprogs ................................................................................................................................................... 8? 2.3.4 编译 Qtopia-2.2.0 .............................................................................................................................................. 9? 2.3.5 编译 zlib 库 ........................................................................................................................................................ 11? 2.3.6 编译 WEB 浏览器 konqueror ......................................................................................................................... 12? 2.3.7 制作包含 Qtopia-2.2.0 的根文件系统 ........................................................................................................... 13? 3.第一个 Qt 应用程序的开发流程 ............................................................................................................................................. 16? 3.1 建立 Qt 的项目文件 ...................................................................................................................................................... 16? 3.2 产生源代码 .................................................................................................................................................................... 16? 3.3 添加 main.cpp 文件 .................................................................................................................................................... 17? 3.4 生成*.pro 文件 ............................................................................................................................................................. 17? 3.5 生成 Makefile 文件...................................................................................................................................................... 17? 3.6 制作启动器 .................................................................................................................................................................... 18? 3.7 制作桌面图标 ................................................................................................................................................................ 18? 3.8 修改 first.cpp 文件....................................................................................................................................................... 18? 3.9 编译并仿真 .................................................................................................................................................................... 18? 3.10 移植到 5iTEK9261S 开发板...................................................................................................................................... 19? 4.其他 Qt 测试程序开发 ............................................................................................................................................................. 20? 4.1 蜂鸣器测试程序 ............................................................................................................................................................ 20? 4.2 AD 测试程序 .................................................................................................................................................................. 20? 4.3 按键测试程序 ................................................................................................................................................................ 20? 4.4 温度传感器测试程序 .................................................................................................................................................... 20? 4.5 CF 卡吞吐量测试程序 ................................................................................................................................................... 20? 4.6 LED 灯测试程序 ............................................................................................................................................................ 20? 5.建立 Qt4 开发平台 .................................................................................................................................................................. 21? 5.1 准备工作 ........................................................................................................................................................................ 21? 5.2 编译 PC 版本的 Qt4 ..................................................................................................................................................... 21? 1.1 Qt 的区别 ......................................................................................................................................................................... 4?

北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601

北京 爱泰 电子
工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

-2-

北京爱泰电子

5.3 编译 ARM 版本的 Qt4................................................................................................................................................. 22? 5.4 Qt4 根文件系统的制作 ................................................................................................................................................. 22? 5.5 QtCreator 的使用 ......................................................................................................................................................... 22?

北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601

北京 爱泰 电子
工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

-3-

北京爱泰电子

1.Qt 的几个相关概念
1.1 Qt 的区别

在学习 Qt 开发之前,让我们先区分几个概念,这几个概念也是开发板中提供的 Qt 的相关源码包和目录的区别, 搞明白这些概念将会有助于我们理解 Qt。 必须了解的一点:Qt 是一个完整的 C++应用程序开发框架,应为它的 API 在所有的平台上是相同的,所以 Qt 工 具在所有的开发平台上的使用方法是一致的,因此 Qt 的应用程序开发和平台无关(请注意:是程序开发与平台无关) Qt 的概念,Qt 泛指 Qt 的所有版本和图像界面库,比如 Qt/X11、Qt Windows、Qt/MAC 和 Qt/Embeded 等。 由于 Qt 最早是在 Linux 中随 KDE 流行起来的,所有我们通常所说的 Qt 都是指用于 Linux/Unix 的 Qt/X11。后面会 讲到 Qt2、Qt3 和 Qt4。2、3 和 4 指的是 Qt 的版本号。 Qt/Embeded 的概念:它是用于嵌入式 Linux 系统的 Qt 版本,Qt/Embeded 也简称 Qte 或 Qt/E(下文使用 Qte 表示)。Qte 去掉了 X Lib 的依赖而直接工作在 Framebuffer 上,虽然它是 Qt 的嵌入式版本,但它不是 Qt/X11 的子 集,它有部分机制(比如 QCOP 等)不能用于 Qt/X11 中。 Qtopia 是一个基于 Qte 的类似桌面系统的应用环境,包含 PDA 和 Phone 版本。请注意是基于 Qte 的应用环境。 换个说法就是 Qte 是库(实际上也是库,叫基础类库) ,Qtopia 是用 Qte 这个库开发出来的应用程序。Qtopia 最高 版本是 Qtopia-2.2.0,在这之后就没有在推出过免费的 Qtopia 了。 Qtopia Core:可以认为是上面讲到 Qte,虽然名字中含有 Qtopia,不过它实质上还是上面刚刚讲到的 Qte。虽 然从 Qt4 开始把 Qtopia Core 并到 Qtopia 的产品线了,但实质上 Qtopia Core 还是基础类库,相当于 Qte。 qt-embeded: 实际上是上面刚刚讲到的 Qtopia Core, 最近, 官方取消了 Qtopia Core 的命名, 改为 qt-embeded。

1.2 Qt 的版本介绍

看完上面所讲到的几个概念后,相信对 Qt 有个初步了解了,下面了解一下目前市面上流行的 Qt 的用于嵌入式的 版本类型。

1.2.1 qtopia-2.20

获取 qtopia-2.20 的源码之后,打开源码包,可以看到 qt2、qtopia 和 tmake 几个目录。 Qt2 目录:可以编译出所需要的 Qte 库和 Qt 工具。 qtopia 目录:2.20 版本的 qtopia 与源码。 tmake 目录:提供 progen 和 tmake 工具。 1.2.2 Qt4 版本

前面已经提到 qtopia-2.20 是 Qtopia 的 PDA 版本是最终版本,所以在 Qt4 中是没有 Qtopia 的,我们移植 Qt4 时,是不会产生 Qtopia 的。我们使用的 Qt4 版本是 qt-embedded-linux-opensource-src-4.5.3.tar.bz2,可以从我 们开发板的光盘中得到。

北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601

北京 爱泰 电子
工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

关于 Qt 的常规性介绍这里就不重复了,使用搜索引擎所搜 Qt 相关字样,有超多的介绍性的文字供参考。

技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

-4-

北京爱泰电子

获取源码包后,打开源码包,看一下里面的文件结构是不包含 qtopia 目录的,不过在包含 examples 和 demos 两个目录,这两个目录包含了一些测试程序源码。当编译好 Qte 的库之后,可以编译这些测试程序出来测试 Qt4 是否 移植成功。

designer:用于设计窗口组件的应用程序,使用它可以很方便的制作成应用程序界面,并且得到 xxx.ui 的用户界 面文件,该文件是按照 XML 格式保存的; uic:将刚刚得到的 xxx.ui 文件转换为 xxx.h 和 xxx.cpp 文件;

moc:用于 Qt C++扩展的 metra-object 编译器,利用刚刚产生的 xxx.h 生成 moc-xxx.cpp 文件; qvfb:是为 qt 提供一个虚拟 frambuffer 的应用程序,实现对 qt 的应用程序提供一个模拟的运行窗口,我们在 PC 上面开发 qt 程序时,主要使用它来进行仿真; qtCreater:用于编译 Qt 项目的 IDE 工具,是开发 Qt4 应用程序的利器。

北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601

北京 爱泰 电子
工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

1.3 Qt 的开发软件介绍

技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

-5-

北京爱泰电子

2.建立 Qtopia-2.2.0 开发平台
需要注意的是,因为我们是在 PC 上面进行开发的,所以使用的是针对 x86 的 Qt,仿真我们也是在 PC 上面运行的,所以我们首先要建立 x86 的 Qt 开发平台。

2.1 准备工作

编译 qtopia-2.2.0 需要的软件包如下: e2fsprogs-1.41.12.tar.gz——可以生成 libuuid 的动态库,没有这个库,编译 Qtopia-2.2.0 时会提示 “cannot find luuid” jpegsrc.v6b.tar.gz——可以生成 jpeg 的动态库,没有这个库,编译 Qtopia-2.2.0 时会提示“cannot find ljpeg” tslib-1.4.1.tar.bz2——如果您使用触摸屏, 必须编译这个 tslib 动态库, 没有这个库, 编译 Qtopia-2.2.0 时会提示“cannot find lts”,如果不需要触摸屏支持,可以不编译这个库,同 时要在 configuer Qtopia-2.2.0 时把“-ltslib”的选项去掉。 qtopia-2.2.0.tar.bz2——qtopia-2.2.0 源码包。 zlib-1.2.5.tar.tar——可以生成 libz 的动态库, 没有这个库, 在编译 konqueror 时会提示“cannot find lz” konqueror.tar.bz2——qt 下 web 浏览器。 各个软件包可以从附赠的光盘中获得(qte-2.2.0.tar.bz2)位于光盘的“linux/apps/qt”目录下,解 压后的目录树如下: . |-- arm | |-- e2fsprogs-1.41.12.tar.gz | |-- jpegsrc.v6b.tar.gz | |-- tslib-1.4.1.tar.bz2 | |-- qtopia-2.2.0.tar.bz2 | |-- zlib-1.2.5.tar.tar | |-- konqueror.tar.bz2 | |-- mke2fsprogs.sh | |-- mktslib.sh | |-- mkqtopia4arm.sh | |-- mkzlib.sh | |-- mkkonqueror4arm.sh | `-- setARM_QpeEnv.sht
北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601 工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

北京 爱泰 电子

编 译 Qtopia-2.2.0 我 们 使 用 的 是 RedHat9.0 , 本 手 册 中 使 用 的 交 叉 编 译 是 arm-none-linux-gnueabi-4.2.3.tar.bz2,可以从开发板附带的光盘中得到。使用命令:#tar –jxvf arm-none-linux-gnueabi-4.2.3.tar.bz2 –C /opt。将其解压到 RedHat9.0 的/opt 目录下。使用命令 #echo “PATH=$PATH:/opt/arm-2008q1/bin”>> /etch/profie 将交叉工具链加入环境变量 PATH (注意一定是‘>>’号,否则将会产生意想不到的后果) 。使用命令#source /etc/profile 使环境变量 生效。

-6-

北京爱泰电子

需要注意的是: 1. 编译 Qtopia-2.2.0 我们使用的是 RedHat9.0,并且是完全安装的,RedHat9 完全安装大概需要 4.8G 的空间,如果不完全安装会导致编译出错,原因是缺少某些必要的库,当然您也可以使用 Fedora 系统或 ubuntu 系统,前提是编译 Qt 所需要的系统库要安装全。 2. 对于 Qt 的编译只要成功了,仅仅编译一次即可,之后就可以不用在编译了。 3. 对于 Qt 的编译过程中出现的错误,多数情况是因为 RedHat9 没有完全安装导致的(首先请确 认 RedHat9 是否完全安装。也有部分错误是因为您所打开的终端执行了别的设置导致编译器某 些库没有及时生效而产生的,此时就需要您重新打开一个终端即可。 2.2 编译 PC 版本的 Qtopia-2.20

在 PC 的 linux 的终端执行命令#./mkqtopia4x86.sh,就开始编译 x86 版本 Qtopia 了,在 PC 的 linux 终端执行命令#./mkkconqueror4x86.sh 就开始编译 x86 版本的 konqueror 了。编译完成后,在 PC 的 linux 终端执行#./test_x86.sh 就可以在 PC 上看到 qtopia 的仿真效果了。 2.3 编译 ARM 版本的 Qtopia-2.2.0

下面介绍我们编译 Qtopia-2.2.0 时的详细步骤, 在我们附赠光盘中的交叉编译器中已经集成了 jpeg 库、tslib 库、e2fsprogs 库和 zlib 库。如果您使用我们光盘中的交叉编译器,在编译 Qtopia 时,不必 做 2.3.1、2.3.2 和 2.3.3 节介绍的步骤了。 2.3.1 编译 jpeg 库

编译 Qt 之前需要编译 jpeg 库,否则编译 Qt 的时候会出现“cannot find ljpeg”的错误,编译 jpeg 库的方法如 下:

解压 jpegsrc.v6b.tar.gz #tar –zxvf jpegsrc.v6b.tar.gz 生成 Makfile #cd jpeg-v6b #./configure --enable-shared --enable-static 打开 Makefile 文件 #vi Makefile
北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601

北京 爱泰 电子
--prefix=$PWD/_install
工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

`-- x86 |-- qtopia-2.2.0.tar.bz2 |-- mkqtopia4x86.sh |-- konqueror.tar.bz2 |-- mkkonqueror4x86.sh |-- setX86_QpeEnv.sh `-- test_x86.sh arm 目录是编译 arm 版本的 Qtopia-2.2.0 所用的源码包, 目录是编译 x86 版本的 Qtopia-2.2.0 x86 所用的源码包。

技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

-7-

北京爱泰电子

2.3.2 编译 tslib 触摸屏库

为了让 Qtopia 支持触摸屏,编译 Qt 之前需要编译 tslib 库,否则编译 Qt 的时候会出现“cannot find lts”的错 误,编译 tslib 的方法如下:

解压 tslib-1.4.1.tar.bz2 #tar –jxvf tslib-1.4.1.tar.bz2 生成 Makefile #cd tslib-1.4.1 #./configure --host=arm-linux --disable-hp3600 --disable-arctic2 --disable-mk712 \ --disable-collie --disable-corgi --disable-ucb1x00 --disable-linear-h2200 \ --with-gun-ld --prefix=$PWD/__install \ ac_cv_func_malloc_0_nonnull=yes 编译安装 #make #make install 复制库和头文件到交叉编译器的相应目录 #cp __install/include/* /opt/arm2008q1/arm-none-linux-guneabi/libc/usr/include #cp __install/lib/* /opt/arm2008q1/arm-none-linux-guneabi/libc/usr/lib 我们已经把以上编译过程写在 mktslib.sh 的脚本里,您可以在 PC 的 linux 终端里直接运行该脚本 完成整个编译过程 #./mktslib.sh 2.3.3 编译 e2fsprogs

编译 Qt 之前需要编译 e2fsprogs,否则编译 Qt 的时候会出现“cannot find luuid”的错误,编译 e2fsprogs 的方法如下:

解压 e2fsprogs-1.41.12.tar.gz #tar –zxvf e2fsprogs-1.41.12.tar.gz 生成 Makefile #cd e2fsprogs-1.41.12 #./configure --host=arm-linux --enable-elf-shlibs --prefix=$PWD/__install
北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601 工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

北京 爱泰 电子

把 CC= gcc 修改为 CC= arm-linux-gcc 把 AR= ar rc 修改为 AR= arm-linux-ar rc 把 AR2= runlib 修改为 AR2= arm-linux-runlib 编译安装 #make #mkdir –p __install/include __install/lib __install/bin __install/man/man1 #make install-libs 复制库和头文件到交叉编译器的相应目录 #cp –av __install/include/* /opt/arm2008q1/arm-none-linux-guneabi/libc/usr/include #cp –av __install/lib/* /opt/arm2008q1/arm-none-linux-guneabi/libc/usr/lib

-8-

北京爱泰电子

2.3.4 编译 Qtopia-2.2.0

所有的准备工作已经做好了,现在让我们来编译 Qtopia-2.20。

解压 qtopia-2.20.tar.bz2 #tar –jxvf qtopia-2.20.tar.bz2 由于 QT4.4 以下版本都不支持 BRG 模式,而且 AT91SAM9261 的 LCD 驱动是 BGR 模式,所以移 植 QT4.4 以 下 版 本 到 AT91SAM9261 时 都 会 遇 到 颜 色 不 对 的 问 题 。 通 过 修 改 qtopia-2.2.0/qt2/src/kernel/qgfx_qws.h 文件可以使 qt 支持 BGR555 模式,只要在 confgiure 时颜色深度不超过 16 位就没问题,超出也许要修改 qgfxlinuxfb_qws.cpp,这个没有去验证过,当 然也可以修硬件连接来支持 RGB565 模式。附赠光盘中的源码是经我们更改的,您无需亲自修改源 码,直接编译就可以了。以下贴出修改后的内容。 #if !defined( QT_NO_IMAGE_16_BIT ) || !defined( QT_NO_QWS_DEPTH_16 ) # ifndef QT_QWS_DEPTH16_RGB # define QT_QWS_DEPTH16_RGB 555 /*565->555 by 5itek */ # endif static const int qt_rbits = (QT_QWS_DEPTH16_RGB/100); static const int qt_gbits = (QT_QWS_DEPTH16_RGB/10%10); static const int qt_bbits = (QT_QWS_DEPTH16_RGB%10); /* static const int qt_red_shift = qt_bbits+qt_gbits-(8-qt_rbits); static const int qt_green_shift = qt_bbits-(8-qt_gbits); static const int qt_neg_blue_shift = 8-qt_bbits; static const int qt_blue_mask = (1<<qt_bbits)-1; static const int qt_green_mask = (1<<(qt_gbits+qt_bbits))-(1<<qt_bbits); static const int qt_red_mask = (1<<(qt_rbits+qt_gbits+qt_bbits))-(1<<(qt_gbits+qt_bbits)); */ static const int qt_blue_shift = qt_bbits+qt_gbits-(8-qt_rbits); static const int qt_green_shift = qt_bbits-(8-qt_gbits); static const int qt_neg_red_shift = 8-qt_bbits; static const int qt_red_mask = (1<<qt_bbits)-1; static const int qt_green_mask = (1<<(qt_gbits+qt_bbits))-(1<<qt_bbits); static const int qt_blue_mask =
北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601 工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

北京 爱泰 电子

编译安装 #make #make install 复制库到交叉编译器的相应目录 #cp __install/lib/* /opt/arm2008q1/arm-none-linux-guneabi/libc/usr/lib 我们已经把以上编译过程写在 mke2fsprogs.sh 的脚本里, 您可以在 PC 的 linux 终端里直接运行该 脚本完成整个编译过程 #./mke2fsprogs.sh

-9-

北京爱泰电子

(1<<(qt_rbits+qt_gbits+qt_bbits))-(1<<(qt_gbits+qt_bbits)); inline ushort qt_convRgbTo16( QRgb c ) { /* const int tr = qRed(c) << qt_red_shift; const int tg = qGreen(c) << qt_green_shift; const int tb = qBlue(c) >> qt_neg_blue_shift; */ const int tr = qRed(c) >> qt_neg_red_shift; const int tg = qGreen(c) << qt_green_shift; const int tb = qBlue(c) << qt_blue_shift;

return (tb & qt_blue_mask) | (tg & qt_green_mask) | (tr & qt_red_mask); }

inline ushort qt_convRgbTo16( QRgb c ) { /* const int tr = qRed(c) << qt_red_shift; const int tg = qGreen(c) << qt_green_shift; const int tb = qBlue(c) >> qt_neg_blue_shift; */ const int tr = qRed(c) >> qt_neg_red_shift; const int tg = qGreen(c) << qt_green_shift; const int tb = qBlue(c) << qt_blue_shift;

return (tb & qt_blue_mask) | (tg & qt_green_mask) | (tr & qt_red_mask); }

inline QRgb qt_conv16ToRgb( ushort c ) { const int r=(c & qt_red_mask); const int g=(c & qt_green_mask); const int b=(c & qt_blue_mask); /* const int tr = r >> qt_red_shift; const int tg = g >> qt_green_shift; const int tb = b << qt_neg_blue_shift; */ const int tr = r << qt_neg_red_shift;
北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601

北京 爱泰 电子
工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

- 10 -

北京爱泰电子

const int tg = g >> qt_green_shift; const int tb = b >> qt_blue_shift; return qRgb(tr,tg,tb);

inline void qt_conv16ToRgb( ushort c, int& r, int& g, int& b ) { const int tr=(c & qt_red_mask); const int tg=(c & qt_green_mask); const int tb=(c & qt_blue_mask); /* r = tr >> qt_red_shift; g = tg >> qt_green_shift; b = tb << qt_neg_blue_shift; */ r = tr << qt_neg_red_shift; g = tg >> qt_green_shift; b = tb >> qt_blue_shift; } #endif

生成 Makefile #cd qtopia-2.20 # echo yes | ./configure -qte '-embedded -no-xft -qconfig qpe -depths 16,32 -system-jpeg -qt-zlib -qt-libpng -gif -no-g++-exceptions -no-qvfb -xplatform linux-arm-g++ -tslib' -qpe 'edition pda -displaysize 640x480 -fontfamilies "helvetica fixed micro smallsmooth smoothtimes unifont" -xplatform linux-arm-g++ -luuid' -qt2 '-no-opengl -no-xft' -dqt '-no-xft -thread' 需要注意的是:根据实际情况修改显示尺寸,即“-displaysize 640x480”处 编译安装 #make #make install 我们已经把以上编译过程写在 mkqtopia4arm.sh 的脚本里,您可以在 PC 的 linux 终端里直接运行 该脚本完成整个编译过程 #./mkqtopia4arm.sh 2.3.5 编译 zlib 库

编译 konqueror 之前需要编译 zlib 库,否则编译 konqueror 的时候会出现“cannot find lz”的错误,编译 zlib 的方法如下:

解压 zlib-1.2.5.tar.tar
北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601 工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

北京 爱泰 电子

}

- 11 -

北京爱泰电子

2.3.6 编译 WEB 浏览器 konqueror

解压 konqueror.tar.bz2 并放到编译好的 qtopia-2.2.0 下 #tar –jxvf konqueror.tar.bz2 #mv –f konqueror qtopia-2.2.0/ 生成 Makefile #source qtopia-2.2.0/setQpeEnv #cd qtopia-2.2.0/konqueror #export AR=arm-linux-ar #export STRIP=arm-linux-strip #export RANLIB=arm-linux-ranlib #export CXX=arm-linux-g++ #export CCC=arm-linux-c++ #export CC=arm-linux-gcc #export CROSS_COMPILE=1 #export LDFLAGS=-ldl ./configure –host=arm-linux –target=arm-linux –enable-embedded –enable-qt-embedded –enable-qpe –with-gui=qpe –disable-debug –enable-ftp –enable-static –disable-shared –disable-mt –without-ssl –with-qt-dir=$QTDIR –with-qt-includes=$QTDIR/include –with-qt-libraries=$QPEDIR/lib –with-qtopia-dir=$QPEDIR 编译安装 #make #arm-linux-strip –strip-all kon-embed/src/conqueror #cp –avf konq-embed/src/conqueror $QPEDIR/image/opt/Qtopia/bin #cp –avf konq-embed/src/conqueror.png $QPEDIR/image/opt/Qtopia/pics #cp –avf konq-embed/src/conqueror.desktop $QPEDIR/image/opt/Qtopia/apps/Applications
北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601 工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

北京 爱泰 电子

#tar –zxvf zlib-1.2.5.tar.tar 生成 Makefile #cd zlib-1.2.5 #CC=arm-linux-gcc ./configure --prefix=$PWD/__install 编译安装 #make #make install 复制库和头文件到交叉编译器的相应目录 #cp __install/include/* /opt/arm2008q1/arm-none-linux-guneabi/libc/usr/include #cp __install/lib/* /opt/arm2008q1/arm-none-linux-guneabi/libc/usr/lib 我们已经把以上编译过程写在 mkzlib.sh 的脚本里, 您可以在 PC 的 linux 终端里直接运行该脚本完 成整个编译过程 #./mkzlib.sh

- 12 -

北京爱泰电子

2.3.7 制作包含 Qtopia-2.2.0 的根文件系统

注意:关于如何建立最基本根文件系统,请参考我们的另一篇文章《如何构建 Linux 的根文件系统》 ,在这篇文章 中不紧包含了制作根文件系统的步骤,还包括如何制作 ramdisk 格式的文件系统、如何制作 jffs2 格式的文件系统,以 及制作教你如何从 nfs 启动文件系统。在这篇文章中,我们还会继续增加制作 ubi 格式的文件系统和从 cf 卡启动的文 件系统等。

首先拷贝“qtopia-2.2.0/qtopia/image/opt”目录下的“Qtopia/”目录和“kde/”目录到开发 板根文件系统的“/opt” 目录下。 我们可以对文件系统下的“opt/Qtopia/lib/fonts”目录下面的字体 进行删减,以满足自己的需要,并且可以减小根文件系统的尺寸。 其 次 我 们 向 根 文 件 系 统 中 添 加 触 摸 屏 矫 正 所 用 的 tslib 相 关 文 件 , 拷 贝 “tslib-1.4.1/__install/etc/ts.conf”文件到开发板的根文件系统的“/etc”下,拷贝触摸屏等校准程序 “tslib-1.4.1/__install/bin/ts_calibrate”到开发板的根文件系统的“/sbin”目录下,拷贝触摸屏测试 程 序 tslib-1.4.1/__install/bin/ts_test” 到 开 发 板 的 根 文 件 系 统 的 “/sbin” 目 录 下 。 并 且 修 改 “ts.conf”文件如下: # Uncomment if you wish to use the linux input layer event interface module_raw input # Uncomment if you're using a Sharp Zaurus SL-5500/SL-5000d # module_raw collie

# Uncomment if you're using a Sharp Zaurus SL-C700/C750/C760/C860 # module_raw corgi

# Uncomment if you're using a device with a UCB1200/1300/1400 TS interface # module_raw ucb1x00 # Uncomment if you're using an HP iPaq h3600 or similar # module_raw h3600

北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601

北京 爱泰 电子
工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

#make –p \ $QPEDIR/image/opt/kde/share/apps/khtml/css $QPEDIR/image/opt/kde/share/config #cp –avf \ konq-embed/kdesrc/khtml/css/html4.css $QPEDIR/image/opt/kde/share/apps/khtml/css #cp –avf konq-embed/kdesrc/kdecore/charsets $QPEDIR/image/opt/kde/share/config 我们已经把以上编译过程写在 mkkonqueror4arm.sh 的脚本里,您可以在 PC 的 linux 终端里直接 运行该脚本完成整个编译过程 #./mkkonqueror4arm.sh

技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

- 13 -

北京爱泰电子

# Uncomment if you're using a Hitachi Webpad # module_raw mk712 # Uncomment if you're using an IBM Arctic II # module_raw arctic2 module pthres pmin=1 module variance delta=600 module dejitter delta=2000 module linear

最后别忘了复制相应的库文件到开发板根文件系统的“usr/lib”目录下,否则会导致在开发板上执 行 qtopia 时不找不到库。即编译出来的 tslib 动态库,jpeg 动态库、e2fsprogs 动态库和 zlib 库。 另外,为了让 qtopia 能够在开发板上运行起来,还需设置一些环境变量,可以把这些环境变量添加 到开发板的根文件系统的“/etc/profile”文件中,如下: #set for touchscreen export TSLIB_TSDEVICE=/dev/event0 export TSLIB_CONFFILE=/etc/ts.conf export TSLIB_PLUGINDIR=/usr/lib/ts export TSLIB_CALIBFILE=/etc/pointercal #set for qtopia export HOME=/root export QTDIR=/opt/Qtopia export QPEDIR=/opt/Qtopia export KDEDIR=/opt/kde/ export QWS_KEYBOARD=”USB:/dev/event1” export QWS_MOUSE_PROTO=”TPanel:/dev/event0 USB:/dev/mouse0” export PATH=$PATH:$QPEDIR/bin export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$QTDIR/lib:$QPEDIR/lib if [-f /etc/pointercal] ; then $QPEDIR/bin/qpe > /dev/null 2>/dev/null & else ts_calibrate $QPEDIR/bin/qpe >/dev/null 2>/dev/null & fi “>/dev/null 2>/dev/null”决定是否在串口终端上面打印 qtopia 启动信息, 有它则不打印 qtopia 的启动信息,无则打印。 “if [ -f /etc/pointercal ] ; then”这个地方用于判断是否需要调用触摸屏矫正程序,对于只想使用 USB 鼠标的客户,在制作根文件系统时,在“etc/”目录建立一个名为“pointercal”的空文件,用于
北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601 工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

北京 爱泰 电子

- 14 -

北京爱泰电子

跳过触摸屏校验这个步骤。 到这里带有 qtopia 的根文件系统就算基本完成了。 您还可以在根文件系统的“/root/”目录中建立 名为“Documents/”的目录,然后将您的文档比如 MP3 歌曲、图片等放到该目录下,就可以在开发 板启动后的 qtopia 界面的“Documents”菜单栏下浏览相应的文件了。 完成了带有 qtopia 的文件系统,按照《如何构建 Linux 的根文件系统》一文中讲解的方法制作您想 要的根文件系统格式, 这里建议, 在开发阶段, 您最好利用 NFS 来加载根文件系统, 这样调试比较方便。 到这里关于 Qt 移植的最基本的东西讲完了,下面我们进入到开发 Qt 应用程序的教程。这里声明一 点,我们能做到的是引导您教会您一种方法。最终的学习效果如何还需您自己的努力。

北京爱泰电子 QQ: 24736136 地址:北京海淀区西三旗旗胜家园 4#2-601

北京 爱泰 电子
工作室论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

技术支持电话:15810023908 淘宝店面:http://itek.taobao.com/

- 15 -

北京爱泰电子

3.第一个 Qt 应用程序的开发流程
本章主要讲解 Qt 程序的开发流程,从零开始讲解如何开发出第一个 Qt 程序,在继续本章节之前请 确保您已经成功的完成了第 2 章的编译。

第一个 Qt 程序实现的功能,就是按下我们设置的 user 按钮后,显示“xxxxxxxxxxxx”的打印信息 出来,按下 close 按钮后,退出该应用程序。 注意:本章节学习的目的是开发流程,对于源码分析之类的,暂时不要理会,首先学习一下开发流 程,下一章节我们将会进行源码分析。 3.1 建立 Qt 的项目文件

在 PC 的 Linux 的“/root/Qte/x86/pro”目录下新建一个名为“first/”的目录,以后的应用程序 都放到“pro/”目录下面。 在 PC 的 Linux 的终端中输入命令“#$QTDIR/bin/designer &”(在后台启动 Qt 设计器)。注意: 这里使用的设计器是我们自己编译出来的,不是安装 RedHat9.0 时系统提供的。对于设计器的时候用, 这里就不做介绍了,很简单的一个工具软件,自己摸索一下吧。多数用 Qt 做开发的朋友都不使用设计 器的,至于原因,等您熟悉了您就知道了。 新建一个项目,方法如下图:

。。。缺少 N 多图; 。。

3.2 产生源代码

我们使用 uic 软件将刚刚建立的工程转换为源代码,首先建立一个可执行脚本来完成文件的转换, 该脚本在以后的开发过程中会用到,到时可只需简单的修改即可用的别的工程中去,进入到 “/root/Qte/x86/pro”下制作“ui2cpp.sh”脚本。 #cd /root/Qte/x86/pro 可执行脚本“ui2cpp.sh”的脚本内容如下: #!/bin/sh

北京爱泰电子 QQ: 24736136

北京 爱泰 电子
论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

启 动 PC 的 Linux , 进 入 到 “setX86_QpeEnv.sh” 脚 本 所 在 的 x86 目 录 下 , 例 如 我 的 是 在 “root/Qpe/x86”目录下,然后在终端输入命令“#source setX86_QpeEnv.sh”,完成设置变量的操 作,当然您也可以自行一个一个变量的设置。这里需要注意的是,您必须到“setX86_QpeEnv.sh”脚 本所在的目录执行“source”命令,否则会导致设置环境变量出错,因为我们在脚本中用的 Linux 系统 的系统变量“PWD”。 #cd /root/Qte/x86 #source setX86_QpeEnv.sh

技术支持电话:1580023908 淘宝店面:http://shop35022211.taobao.com/

- 16 -

北京爱泰电子

$QTDIR/bin/uic –o first.h first.ui $QTDIR/bin/uic –o first.cpp –impl first.h first.ui $QTDIR/bin/moc first.h –o moc_fist.cpp

执行脚本,转换项目为源码 #./ui2cpp.sh

注意:每次使用设计器修改并保存*.ui 的工程文件后,必须使用 ui2cpp.sh 重新产生源代码,否则 会出现编译出错,切记这一点。所以一般情况,使用设计器做完界面之后,就不再使用它。而是直接修 改生成的源代码。 3.3 添加 main.cpp 文件

下面,我们添加 main.cpp 文件,注意该文件是一个通用的源码,以后的使用中我们仅仅简单的修 改即可用到别的工程中。main.cpp 文件的内容如下: #include “first.h” //调用刚刚得到的头文件 #include <application.h> #include <qtopia/qpeapplication.h> QTOPIA_ADD_APPLICATION(“first”, first)//第一个 first 是要生成的可执行文件名称, QTOPIA_MAIN //第二个 first 是主界面的名称 3.4 生成*.pro 文件

我们使用 tmake 中的 progen 软件产生 pro 文件,方法如下: 使用命令 progen 获取*.pro 文件 #progen #progen –o first.pro 修改生成的 first.pro 文件,把其中的 CONFIG = qt warn_on relaase 修改为 … CONFIG = qtopia warn_on release … 3.5 生成 Makefile 文件

根据上步得到的 pro 文件,我们使用 tmake 工具可以生成初步的 Makefile 文件,如下: #tmake –o Makefile first.pro 然后我们修改 Makefile 文件,去掉无用的信息和添加新的内容,修改后的 Makefile 文件的内容如 下,红色部分所示,注意:删掉的内容没法表示出来,删掉的内容主要是重复出现的地方,不删掉重复 出现的地方会导致编译出错,对于“重复出现”这个词语不明白的情况,请仔细比对下面列出来的内容
北京爱泰电子 QQ: 24736136 论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:1580023908 淘宝店面:http://shop35022211.taobao.com/

北京 爱泰 电子

设置“ui2cpp.sh”脚本具有可执行权限 #chmod +x ui2cpp.sh

- 17 -

北京爱泰电子

和您生成的内容。 。。一下是修改后的 Makefile 文件 。

创建一个桌面启动器 first.desktop 文件,first.desktop 文件内容如下:

[Desktop Entry] Version=1,0 Name=First Test

//如果需要启动器显示中文,请在 Name 这个地方将 First //Test 换 成 中 文 名 称 。 建 议 输 入 中 文 时 将 其 复 制 到 //Windows 系统中添加了中文在复制回来替换掉原文件 comment=5Itek First Qt Program Exec=first Icon=first Type=first 3.7 制作桌面图标

用 PHOTOSHOP 或者其他画图工具制作一个 16x16 像素的图标,命名为 first.png。将 first.png 复制到 Linux 的“/root/Qte/x86/pro”目录下。 。。 。。附制作图标图片

3.8 修改 first.cpp 文件

为了实现前面讲到的按下 user_button 按钮,出现预设的打印信息,我们还需要修改 first.cpp 文件,同时调整各 个按钮的位置等,下面列出修改后的 first.cpp 源码内容: 。。 。。付 first.cpp 源码

3.9 编译并仿真

完成了前面的步骤后,在 PC 的 Linux 的终端中输入“#make”命令,即可完成编译,编译之后的 “first”应用程序放在了“/root/Qte/x86/qtopia-2.2.0/qtopia/image/opt/Qtopia/bin”目录下, “first.png”图标放在“/root/Qte/x86/qtopia-2.2.0/qtopia/image/opt/Qtopia/pics”目录下面, “first.desktop”图标放到“/root/Qte/x86/qtopia-2.2.0/qtopia/image/opt/Qtopia/apps/5iTEK” 目录下面,然后执行脚本“#./test_x86.sh” ,仿真运行刚刚编译出来的的 Qt 的程序的情况截图:
。。付一张仿真的截图 。

北京爱泰电子 QQ: 24736136

北京 爱泰 电子
论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

3.6 制作启动器

技术支持电话:1580023908 淘宝店面:http://shop35022211.taobao.com/

- 18 -

北京爱泰电子

3.10 移植到 5iTEK9261S 开发板 首先复制刚刚的“first/”目录到“/opt/Qte/arm/pro”目录下,然后重新打开一个 PC 的 Linux 终端,重新设置环境变量,使用 tmake 软件生成 Makefile 文件,修改 Makefile 文件,然后编译即可 完成移植。 注意:这里使用的 tmake 工具因为重新设置了环境变量针对 arm 平台。

。。 。。附方法

北京爱泰电子 QQ: 24736136

北京 爱泰 电子
论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

技术支持电话:1580023908 淘宝店面:http://shop35022211.taobao.com/

- 19 -

北京爱泰电子

4.其他 Qt 测试程序开发

待补充

4.2 AD 测试程序 待补充

4.3 按键测试程序 待补充

4.4 温度传感器测试程序 待补充

4.5 CF 卡吞吐量测试程序 待补充

4.6 LED 灯测试程序

北京爱泰电子 QQ: 24736136

北京 爱泰 电子
论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:1580023908 淘宝店面:http://shop35022211.taobao.com/

4.1 蜂鸣器测试程序

- 20 -

北京爱泰电子

5.建立 Qt4 开发平台
编 译 Qte-4.5.3 我 们 使 用 的 是 ubuntu8.0.4 版 本 , 本 手 册 中 使 用 的 交 叉 编 译 是 arm-none-linux-gnueabi-4.2.3.tar.bz2,可以从开发板附带的光盘中得到。使用命令:#tar –jxvf arm-none-linux-gnueabi-4.2.3.tar.bz2 –C /opt。将其解压到 ubuntu8.0.4 的/opt 目录下。使用命令 #echo “PATH=$PATH:/opt/arm-2008q1/bin”>> /etch/bash.bashrc 将交叉工具链加入环境变量 PATH(注意一定是‘>>’号,否则将会产生意想不到的后果) 。使用命令#source /etc/bash.bashrc 使环境变量生效。 5.1 准备工作

这里我们使用 Qte-4.5.3 的源码,下面列出原始的 Qte-4.5.3 的下载地址:

ftp://ftp.trolltech.com/qt/source/qt-embedded-linux-opensource-src-4.5.3.tar.gz 下面列出 QtCreator 软件的下载地址: ftp://ftp.trolltech.com/qtcreator/qt-creator-linux-x86-opensource-1.3.1.bin 关于 QtCreator 软件的介绍自行 GOOGLE 一下,这里就不详细解释了,只需知道它是开发 Qt4 的 利器即可,使用方法在后面章节会有详细讲解。 各个软件包可以从附赠的光盘中获得(qte-4.5.3.tar.bz2)位于光盘的“linux/apps/”目录下, 解压后 的目录树如下: . |-- qt-embedded-linux-opensource-src-4.5.3.tar.gz |-- mkqte4.5.3-4arm.sh `-- mkqte4.5.3-4x86.sh mkqte4.5.3-4arm.sh 和 mkqte4.5.3-4x86.sh 两个脚本是分别编译 ARM 版本的 Qt 脚本和编译 x86 版本的 Qt 的脚本。 需要注意的是:

1. 编译 Qte-4.5.3 我们使用的是 ubuntu8.04,并且安装了必要的软件包,所以在下文中提到 PC 中的 linux 指的是 ubuntu8.0.4 系统; 2. 在 ubuntu 中编译软件过程中,如果提示缺少某些库文件或工具,可以使用“apt-get install” 命令进行在线安装,当然,前提您得有个能上公网的网络; 3. 我们在编译工程中,安装的工具和库这里就不在赘述了,请您更具您的经验通过命令在线安装; 5.2 编译 PC 版本的 Qt4

在 PC 的 Linux 终端中输入命令“#./mkqt4.5.3-4x86.sh” ,PC 将会自动开始编译 Qte4.5.3 的 PC 版本,大概需要 2 小时才能完成编译,编译时间长短根据您电脑的配置高低而定。 编译结束后,在

北京爱泰电子 QQ: 24736136

北京 爱泰 电子
论坛: WWW.5iTEK.COM MSN: gmechina@live.cn

技术支持电话:1580023908 淘宝店面:http://shop35022211.taobao.com/

- 21 -

北京爱泰电子

5.3 编译 ARM 版本的 Qt4 待补充

待补充

5.5 QtCreator 的使用 待补充

北京爱泰电子 QQ: 24736136

北京 爱泰 电子
论坛: WWW.5iTEK.COM MSN: gmechina@live.cn 技术支持电话:1580023908 淘宝店面:http://shop35022211.taobao.com/

5.4 Qt4 根文件系统的制作

- 22 -


相关文章:
Qt4.7移植
5页 1财富值 5iTEK9261S开发板系列教程... 22页 免费 QT移植详解 6页 免费如要投诉违规内容,请到百度文库投诉中心;如要提出功能问题或意见建议,请点击此处进行...
飞凌S3C6410开发板_QT移植百科全书.pdf
2页 1下载券 qt移植到s3c2440开发板上... 5页 2下载券 5iTEK9261S开发板系列教... 22页 免费 QT_Embedded_4.5.0_移植... 4页 7下载券喜欢...
更多相关标签:
qt程序移植到开发板 | qt移植到开发板 | 内核在arm开发板移植 | 移植vnc到开发板 | arm开发板 内核移植 | 海思开发板vsftpd移植 | 红米1s电信版移植oppo | 红米1s移植oppo |