移植QTE动态时钟到UP-MobNet-II实验箱LED显示屏
文章目录
- 开发箱
- 实验目的
- 实验内容
- 实验环境
- 实验原理
- 1、Qt/Embedded 简介
- 2、QtE 的特征
- 3、Qt/E 与 Qt/X11 的比较
- 软件资料链接
- 实验步骤
- 1. Qt软件包拷贝到redhat中
- 2. 建立 QT/Embedded 实验目录
- 3. 解压Qt软件
- 4. 编译 tslib1.4 触摸屏库
- (1.)进入解压后的 tslib-1.4 目录
- (2.)修改 build.sh 文件,指定 CC 编译器,以及-prefix 的安装路径。
- (3.)使用 build.sh 编译 tslib 库
- (4.)进到 tslib1.4 目录修改源文件input-raw.c:
- 5. 配置编译 QT/Embedded 环境
- (1.)将 QT/Embedded 压缩包(/UP-CUP4412/SRC/gui/目录下)拷贝到新建立的目录下并解压
- (2.)进入 qt-embedded-linux-opensource-src-4.4.0 目录
- (3.)修改qmake.conf
- (4.)修改qt-embedded-linux-opensource-src-4.4.0下的configure文件
- (1.)为什么修改它:
- (5.)执行命令
- (6.)编译 QT/Embedded 库
- (1.)在这里打开终端执行make命令
- (7.)安装 QT/Embedded 库
- 6. 编译 analogclock 例程
- (1.)转移工作目录
- 7. 使用 qmake 生成 Makefile
- 8. make 编译程序
- 9. 将生成的 analogclock 可执行程序拷贝到QT/E 实验目录
- 10. 打包 QT/Embedded 库环境
- (1.)拷贝 QT/Embedded 库环境到桌面
- (2.)拷贝 tslib 环境到桌面的QtEmbedded-4.4.0-arm中
- (3.)将桌面的QtEmbedded-4.4.0-arm在redhat中压缩
- 11. tftpd32传输文件到开发箱
- (1.)将redhat桌面的压缩包拷贝到window桌面上
- (2.)打开tftpd32
- (3.)网线连接开发箱的网口和电脑的网口
- (4.)ifconfig查看开发箱的IP地址
- (5.)在电脑端打开命令窗口ipconfig查看自己电脑的ip地址........这里大家查看自己的ip
- (5.)修改开发箱上的IP地址
- (6.)ping电脑的IP地址若可以通则进行下一步
- (7.)执行传输命令
- 12. 在实验箱中解压压缩包
- (1.)新建目录
- (2.)解压至新建目录
- 13. 配置环境变量
- 14. 在开发箱执行该程序
- 15. 观察 UP-CUP4412 设备 LCD 输出 QT 界面,会显示一个时钟界面。
- 特别强调
开发箱
名称 | 移动互联网教学科研平台Ⅱ型 |
---|---|
型号 | UP-MOBNET-Ⅱ |
编号 | 03019024 |
批号 | 32017040520 |
实验目的
1. 了解在 Linux 下安装 Qt 的基本步骤
2. 学会 Qt/E 在 ARM 设备上的移植方法与步骤
3. 了解Qt基本信息
实验内容
1. 搭建 Qt/E 环境,移植 QT/E 到 UP-MobNet-II 型网关部分设备上
2. 在 ARM 设备上运行,演示程序
实验环境
实验环境交叉编译环境、实验箱烧写linux系统不在演示。详细在下面的连接里 硬件:
UP-MobNet-II 型嵌入式实验平台,网线,串口转USB线
软件:
Vmware Workstation 、 linux/ubuntu/rehat 、 超级终端/Xshell 、 ARM-LINUX 交叉编译开发环境 QT 软件包:
qt-embedded-linux-opensource-src-4.4.0.tar.gz、tslib-1.4.tar.bz2
实验原理
1、Qt/Embedded 简介
Qt/Embedded(简称 QtE)是一个专门为嵌入式系统设计图形用户界面的工具包。Qt 是挪威 Trolltech 软件公司的产品,它为各种系统提供图形用户界面的工具包,QtE 就是 Qt 的嵌入式版本。 使用 QtE,开发者可以:
- 用 QtE 开发的应用程序要移植到不同平台时,只需要重新编译代码,而不需要对代码进行修改。
- 可以随意设置程序界面的外观。
- 可以方便地为程序连接数据库。
- 可以使程序本地化。
- 可以将程序与 Java 集成。
- 嵌入式系统地要求是小而快速,而 QtE 就能帮助开发者为满足这些要求开发强壮地应用程序。
- QtE 是模块化和可裁剪地。开发者可以选取他所需要的一些特性,而裁剪掉所不需要的。这样,通过选择所需要的特性,QtE 的映像变得很小,最小只有 600K 左右。
- 同 Qt 一样,QtE 也是用 C++写的,虽然这样会增加系统资源消耗,但是却为开发者提供了清洗的程序框架,使开发者能够迅速上手,并且能够方便地编写自定义的用户界面程序。
- 由于 QtE 是作为一种产品推出,所以它有很好的开发团体和技术支持,这对于使用 QtE 的开
发者来说,方便开发过程,并增加了产品的可靠性。
2、QtE 的特征
1. 拥有同 Qt 一样的 API;开发者只需要了解 Qt 的 API,不用关心程序所用到的系统与平台。
2. 它的结构很好地优化了内存和资源地利用。
3. 拥有自己的窗口系统:QtE 不需要一些子图形系统。它可以直接对底层的图形驱动进行操作。
4. 模块化:开发者可以根据需要自己定制所需要的模块。
5. 代码公开以及拥有十分详细的技术文档帮助开发者。
6. 强大的开发工具。
7. 与硬件平台无关:QtE 可以应用在所有主流平台和 CPU 上。支持所有主流的嵌入式 Linux,对于在 Linux 上的 QtE 的基本要求只不过是 Frame Buffer 设备和一个 C++编译器(如 gcc)。Qte同时也支持很多实时的嵌入式系统,如 QNX 和 WindowsCE。
8. 提供压缩字体格式:即使在很小的内存中,也可以提供一流的字体支持。
9. 支持多种的硬件和软件的输入。
10. 支持 Unicode,可以轻松地使程序支持多种语言。
11. 支持反锯齿文本和 Alpha 混合的图片。
QtE 虽然公开代码和技术文档,但是它不是免费的,当开发者的商业化产品需要用到他的运行库时,
必须向 Trolltech 公司支持 license 费用(每套 3 美金),如果开发的东西不用于商业用途则不需要付费。
QtE 由于平台无关性和提供了很好的 Gui 编程接口,在许多嵌入式系统中得到了广泛的应用,是一个
成功的嵌入式 GUI 产品。
3、Qt/E 与 Qt/X11 的比较
1、QT/Embedded 通过 Qt API 与 Linux I/O 设施直接交互,成为嵌入式 linux 端口。2、同 Qt/X11相比,QT/Embedded 很节省内存,其不需要一个 X 服务器或是 Xlib 库,它在底层摈弃了 Xlib,采用 framebuffer(帧缓存)作为底层图形接口。
3、同时,将外部输入设备抽象为 keyboard 和 mouse输入事件。
4、QT/Embedded 的应用程序可以直接写内核缓冲帧,这可避免开发者使用繁琐的 Xlib/Server 系统。
软件资料链接
QtEmbedded-4.4.0-arm.tar.gz 这个压缩包里面全部配置好了,只需移植到开发板解压配置环境变量,即可运行
qt-embedded-linux-opensource-src-4.4.0.tar.bz2、qt-x11-opensource-src-4.4.0.tar.gz这两个是Qt环境的压缩包
tslib-1.4.tar.bz2这个是触摸屏的压缩包
环境变量.txt是要配置在开发板的环境变量
实验步骤
1. Qt软件包拷贝到redhat中
2. 建立 QT/Embedded 实验目录
建立 QT/Embedded 实验目录。所有 QT 相关实验都放在该目录下完成,后面文章不在赘述。 命令:[root@localhost /]# cd /home/
[root@localhost home]# mkdir uptech
建立 QT4 目录 [root@localhost home]# cd uptech/
[root@localhost uptech]# mkdir QT4/
建立 QT/Embedded 目录 for_arm [root@localhost uptech]# cd QT4/
[root@localhost QT4]# mkdir for_arm
后续所有关于 QT/Embedded 实验环境都建在此目录(/home/uptech/QT4/for_arm/)下进行。 3. 解压Qt软件
将 tslib1.4 压缩包(/UP-CUP4412/SRC/gui/目录下)解压至新建立的实验目录[root@localhost 桌面]# tar -xjvf tslib-1.4.tar.bz2 -C /home/uptech/QT4/for_arm/
其中“-C”参数指定解压后存放目录 后面在解压另一个压缩包,这里先解压一个 4. 编译 tslib1.4 触摸屏库
(1.)进入解压后的 tslib-1.4 目录
[root@localhost for_arm]# cd /home/uptech/QT4/for_arm/tslib-1.4/
(2.)修改 build.sh 文件,指定 CC 编译器,以及-prefix 的安装路径。
内容如下:#/bin/sh
export CC=arm-none-linux-gnueabi-gcc
./autogen.sh
echo "ac_cv_func_malloc_0_nonnull=yes" >arm-linux.cache
./configure --host=arm-none-linux-gnueabi --cache-file=arm-linux.cache
-prefix=$PWD/../tslib1.4-install
make
make install
(3.)使用 build.sh 编译 tslib 库
[root@localhost tslib-1.4]# ./build.sh
编译成功后会在 tslib-1.4 的同级目录下产生编译号的安装目录 tslib1.4-install [root@localhost for_arm]# ls
tslib-1.4 tslib1.4-install
触摸屏所使用环境都存放在 tslib1.4-install 的目录下,后面会用到。 (4.)进到 tslib1.4 目录修改源文件input-raw.c:
[root@localhost for_arm]# cd tslib-1.4
修改源文件input-raw.c: [root@localhost tslib-1.4]# vi plugins/input-raw.c
这里推荐用编辑打开修改 修改 static int check_fd(struct tslib_input *i)函数去掉设备检测代码,如下所示: static int check_fd(struct tslib_input *i)
{struct tsdev *ts = i->module.dev;int version;u_int32_t bit;u_int64_t absbit;/*if (! ((ioctl(ts->fd, EVIOCGVERSION, &version) >= 0) &&(version == EV_VERSION) &&(ioctl(ts->fd, EVIOCGBIT(0, sizeof(bit) * 8), &bit) >= 0) &&(bit & (1 << EV_ABS)) &&(ioctl(ts->fd, EVIOCGBIT(EV_ABS, sizeof(absbit) * 8), &absbit) >= 0)&&(absbit & (1 << ABS_X)) &&(absbit & (1 << ABS_Y)) && (absbit & (1 << ABS_PRESSURE)))) {fprintf(stderr, "selected device is not a touchscreen Iunderstand\n");return -1;}if (bit & (1 << EV_SYN))*/i->using_syn = 1;return 0;
}
5. 配置编译 QT/Embedded 环境
(1.)将 QT/Embedded 压缩包(/UP-CUP4412/SRC/gui/目录下)拷贝到新建立的目录下并解压
[root@localhost 桌面]# tar xzvf qt-embedded-linux-opensource-src-4.4.0.tar.bz2 -C /home/uptech/QT4/for_arm/
这样在实验目录的 for_arm 下产生解压后的 qt-embedded-linux-opensource-src-4.4.0 目录。所有 QT/Embedded 环境源码都存放在此。 (2.)进入 qt-embedded-linux-opensource-src-4.4.0 目录
[root@localhost for_arm]# cd qt-embedded-linux-opensource-src-4.4.0/
(3.)修改qmake.conf
将源码目录 mkspecs/qws/linux-arm-g++/下的 qmake.conf 中的编译器名称做修改。将全部的 arm-linux修改为 arm-none-linux-gnueabi,并在其中 4 行后边都加“-lts”参数,如下所示:[root@localhost qt-embedded-linux-opensource-src-4.4.0]# vi mkspecs/qws/linux-arm-g++/qmake.conf
这里推荐使用编辑来打开,使用里面的搜索和替换功能arm-linux 成 arm-none-linux-gnueabi
#
# qmake configuration for building with arm-linux-g++
#
include(../../common/g++.conf)
include(../../common/linux.conf)
include(../../common/qws.conf)
# modifications to g++.conf
QMAKE_CC = arm-none-linux-gnueabi-gcc -lts
QMAKE_CXX = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK = arm-none-linux-gnueabi-g++ -lts
QMAKE_LINK_SHLIB = arm-none-linux-gnueabi-g++ -lts
# modifications to linux.conf
QMAKE_AR = arm-linux-ar cqs
QMAKE_OBJCOPY = arm-linux-objcopy
QMAKE_STRIP = arm-linux-strip
load(qt_config)
(4.)修改qt-embedded-linux-opensource-src-4.4.0下的configure文件
(1.)为什么修改它:
以免出现大端小端错误导致安装中断CFG_ENDIAN=Q_LITTLE_ENDIAN
CFG_HOST_ENDIAN=Q_LITTLE_ENDIAN
(5.)执行命令
保存配置文件后执行 configure 文件,配置 QT/Embedded 环境,下面一段命令都要输入执行: 使用该命令时候请仔细检查不要写错。这里的命令都是写在一行的!!!
[root@localhost qt-embedded-linux-opensource-src-4.4.0]# ./configure -embedded arm -xplatform qws/linux-arm-g++ -nomake demos -nomake examples -no-stl -no-qt3support -no-phonon -no-svg -no-webkit -no-openssl -no-nis -no-cups -no-iconv -no-pch -no-dbus -no-separate-debug-info -depths 8,16,32 -fast -little-endian -qt-mouse-linuxtp -qt-mouse-tslib -I$PWD/../tslib1.4-install/include -L$PWD/../tslib1.4-install/lib -prefix /usr/local/Trolltech/Qt-embedded-4.6.2 -D__ARM_ARCH_5TEJ__
在输出的许可证提示符下输入“yes”同意回车即可进入 QT/Embedded 库的配置过程,注意 yes 大小
写及全称。
(6.)编译 QT/Embedded 库
[root@localhost qt-embedded-linux-opensource-src-4.4.0]# make
(1.)在这里打开终端执行make命令
由于 QT 库环境的庞大体积,编译 QT/Embedded 库环境时间比较长,具体时间因机器配置而异(大约 40分钟左右)。我20分钟(7.)安装 QT/Embedded 库
[root@localhost qt-embedded-linux-opensource-src-4.4.0]# make install
此时便会在/usr/local/目录下产生 Trolltech/QtEmbedded-4.4.0-arm目录 6. 编译 analogclock 例程
(1.)转移工作目录
[root@localhost qt-everywhere-opensource-src-4.6.2]# cd examples/widgets/analogclock/
[root@localhost analogclock]# ls
analogclock.cpp analogclock.h analogclock.pro main.cpp
[root@localhost analogclock]#
7. 使用 qmake 生成 Makefile
命令:[root@localhost analogclock]# /usr/local/Trolltech/Qt-embedded-4.6.2/bin/qmake
[root@localhost analogclock]# ls
Makefile analogclock.cpp analogclock.h analogclock.pro main.cpp
[root@localhost analogclock]#
上图工作目录下执行/usr/local/Trolltech/Qt-embedded-4.6.2/bin/qmake 后如图:
8. make 编译程序
[root@localhost analogclock]# make
此时将会在此目录下生成 analogclock 可执行程序如图:make后:
9. 将生成的 analogclock 可执行程序拷贝到QT/E 实验目录
[root@localhost analogclock]# cp analogclock /usr/local/Trolltech/QtEmbedded-4.4.0-arm
命令拷贝或者手动拷贝都可以 10. 打包 QT/Embedded 库环境
(1.)拷贝 QT/Embedded 库环境到桌面
[root@localhost Trolltech]# cp /usr/local/Trolltech/QtEmbedded-4.4.0-arm /root/桌面 -arf
代码拷贝或者手动拷贝都可以 (2.)拷贝 tslib 环境到桌面的QtEmbedded-4.4.0-arm中
注意下面的命令
[root@localhost Trolltech]# cp /home/uptech/QT4/for_arm/tslib1.4-install/lib/* /root/桌面/QtEmbedded-4.4.0-arm/lib/ -a
[root@localhost Trolltech]# cp /home/uptech/QT4/for_arm/tslib1.4-install/bin/* /root/桌面/QtEmbedded-4.4.0-arm/bin/ -a
[root@localhost Trolltech]# cp /home/uptech/QT4/for_arm/tslib1.4-install/etc /root/桌面/QtEmbedded-4.4.0-arm/ -a
[root@localhost Trolltech]#
依然是,命令拷贝或者手动拷贝都可以,注意是哪里拷贝到哪里 拷贝后的图示: bin:
lib:
etc:
(3.)将桌面的QtEmbedded-4.4.0-arm在redhat中压缩
11. tftpd32传输文件到开发箱
这里如果不想用tftd32来传输文件,可以使用U盘来实现。但是一定要看下面的特别强调 U盘挂载参考连接(1.)将redhat桌面的压缩包拷贝到window桌面上
(2.)打开tftpd32
(3.)网线连接开发箱的网口和电脑的网口
2口
连接如图:
(4.)ifconfig查看开发箱的IP地址
命令:
ifconfig
(5.)在电脑端打开命令窗口ipconfig查看自己电脑的ip地址…这里大家查看自己的ip
使用xshell连接arm试验箱(5.)修改开发箱上的IP地址
修改开发箱上的IP地址,将网段修改为同一网段(指的是前三个字段保持一致,最后一个字段相差不大,不要一样) 命令(样例):ifconfig eth0 192.168.51.110
(6.)ping电脑的IP地址若可以通则进行下一步
这是一个样图:(7.)执行传输命令
QtEmbedded-4.4.0-arm.tar.gz要和tftpd32软件在同一目录中,现在可以去了解一下tftpd32命令语法。tftfp -g -r QtEmbedded-4.4.0-arm.tar.gz 192.168.***.***
12. 在实验箱中解压压缩包
(1.)新建目录
mkdir Qt
(2.)解压至新建目录
tar -zxvf QtEmbedded-4.4.0-arm.tar.gz -C Qt
-C是解压到的目录 13. 配置环境变量
在刚解压的目录中配置环境变量cd /mnt/yyafs/Qt/QtEmbedded-4.4.0-arm
export QTDIR=$PWD
export LD_LIBRARY_PATH=$PWD/lib
export TSLIB_TSDEVICE=/dev/event1
export TSLIB_PLUGINDIR=$PWD/lib/ts
export TSLIB_CONSOLEDEVICE=none
export TSLIB_CONFFILE=$PWD/etc/ts.conf
export POINTERCAL_FILE=$PWD/etc/ts-calib.conf
export QWS_MOUSE_PROTO=tslib:/dev/event1
export TSLIB_CALIBFILE=$PWD/etc/ts-calib.conf
export QT_QWS_FONTDIR=$PWD/lib/fonts
export LANG=zh_CN
export QWS_MOUSE_PROTO=MouseMan:/dev/event2
14. 在开发箱执行该程序
[root@UP-TECH Qt-embedded-4.6.2]# ./analogclock -qws
15. 观察 UP-CUP4412 设备 LCD 输出 QT 界面,会显示一个时钟界面。
特别强调
U盘挂载和tftpd32传输文件的注意点:首先这个试验中我先使用了U盘挂载来传输文件,虽然可以但是不要把压缩包解压后放在U盘里,要在挂载U盘后在arm设备里使用命令解压缩才行,不可以在Windows中解压缩。这个不可以是因为我们大部分U盘都是NTFS文件系统,压缩包中有好多不同文件属性的文件,其中有链接文件等等。如果在NTFS文件系统中解压缩会破坏这些文件属性,使得虽然挂载上arm设备了但是其中的文件属性不能用了。如果想在Windows中的解压缩,那么需要你的U盘是ext4/3/2文件系统,不然解压缩后文件属性会被破坏。可以把U盘格式化为ext4/3/2的文件系统,但是没必要。
tftpd32,这个软件传输的一定是文件,不可以是目录。在这个实验中我使用tftpd32来传输压缩包,然后再在arm设备中解压缩。tftpd32传输明显要麻烦一点,首先需要同一网段,其原理是利用网络传输协议来传输文件。