移植QTE时钟到UP-MobNet-II实验箱LED显示屏

移植QTE动态时钟到UP-MobNet-II实验箱LED显示屏

文章目录

开发箱


名称 移动互联网教学科研平台Ⅱ型
型号 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 I
 understand\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传输明显要麻烦一点,首先需要同一网段,其原理是利用网络传输协议来传输文件。

猜你喜欢

转载自blog.csdn.net/Lazy_Goat/article/details/117231197