iTOP-4412开发板【精英版】搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,兼具快速读取与大容量,纵使海量思考也能及时处理。配备三星S5M8767电源管理。配备Android、Linux+Qt、Ubuntu操作系统,开启学习、研发的全新方式。Exynos4412开发板处理器成功应用于三星GALAXYS3,联想K860,魅族MX2等热门产品当中,并取得巨大成功。功耗控制以及强劲的性能一直为业内称道,超过5000万片的出货量,足以证明其稳定性与可用性。已成为三星官方推广的处理器之一,并承诺长期供货。
第九章 QtE4.7系统编译
9.1 Qt简介
Qt 是一种基于 C++的跨平台图形用户界面应用程序开发框架。如何跨平台?上到服务器上位机,下到嵌入式 GUI,上天入地无所不能。Qt 最早是由 1991 年由 Qt Company 开发,但是到 2008 年,Qt Company 科技被诺基亚公司收购,是的,就是拥有着我们很多情怀的诺基亚。但在 2012 年,Qt 又被 Digia 收购。
Qt 的授权是分为两条线,商业版和开源版。如果使用商业版的 Qt,那么开发出的程序可以是私有的和商业的;如果使用的是开源版的 Qt,由于其使用的是 GPL 协议,那么程序也必须是 GPL 的。不过自从 qt 4.5.0 版本被研发,诺基亚公司使用了 LGPL 协议后,写出的程序就归开发者所有。
Qt 的版本是按照不同的图形系统来划分的,目前分为四个版本:
适用于 Windows 平台;
适用于使用了 x 系统的各种 Linux 和 unix 的平台;
Mac 版,适用于苹果 MacOS;
embedded 版,适合于具有帧缓冲(frame buffer)的 Linux 的平台。
Qt 一般指代桌面版本,例如在 Linux(x86),Windows,Mac 系统上运行的。
QtE 全称是 Qt embedded,特指嵌入式版本。它是 Qt 的 Embedded Linux 分支平台,在原始 Qt 的基础上,做了许多出色的调整以适合嵌入式环境。删除掉了一些与嵌入式无关的 Lib 库,使其相对来说更加节省嵌入式平台的内存空间,毕竟对嵌入式应用来讲,资源还是相对受限的,不像 PC 机、服务器这些通用机系统有更大的内存和硬盘;为了稳定性以及成本考虑,嵌入式的产品一般更加简洁高效。
Qt 虽然经常被当做一个 GUI 库,用来开发图形界面应用程序,但这并不是 Qt 的全部;Qt 除了可以绘制漂亮的界面(包括控件、布局、交互),还包含很多其它功能,比如多线程、访问数据库、图像处理、音频视频处理、网络通信、文件操作等,这些 Qt 都已经内置了。
Qt 是应用程序开发的一站式解决方案,有了 Qt,你就可以高枕无忧了!Qt 本身包含的模块也日益丰富, 一直有新模块和第三方模块加入进来。
大部分应用程序都可以使用 Qt 实现,除了与计算机底层结合特别紧密的,例如驱动开发,它直接使用硬件提供的编程接口,而不能使用操作系统自带的函数库。
1997 年,Qt 被用来开发 Linux 桌面环境 KDE,大获成功,使 Qt 成为 Linux 环境下开发 C++ GUI 程序的事实标准。
下面的程序都使用 Qt 开发:WPS、YY 语音、Skype、豆瓣电台、虾米音乐、淘宝助理、千牛、暴雪的战网客户端、VirtualBox、Opera、咪咕音乐、Google 地图、Adobe Photoshop Album 等。
Qt 虽然也支持手机操作系统,但是由于 Android 本身已经有 Java ,iOS 本身已经有Objective-C ,所以 Qt 在移动端的市场份额几乎可以忽略。
总起来说,Qt 主要用于桌面程序开发和嵌入式图形界面的开发。
Qt4.7 的发布使 Qt 又有了更为长足的进步,通过官方提供的“changs”,可以看到如下改变。
1、首先是 Qt Quick UI Tools 的正式发布,这可以说是 Qt4.7 里最重大的改变,再次强调了 Qt 发展方向,把 UI 设计交给专业的设计人员,功能模块和界面设计独立,减短软件开发的周期。
2、文档的巨大变化,可以说最近 Qt 的三个版本已经发生了翻天覆地的变化,在 Qt4.5中,文档保持了 Qt 一贯的风格,而 Q4.6,则在内容组织和布局上进行了改变,Qt4.7 文档则是一次变革,不仅在布局和内容上更加人性化,新的 UI 风格也给人眼前一亮的感觉。
3、QtCreator 正式迈入 2.0 时代,在保持原来桌面开发内容的基础下,更考虑到未来移动开发的趋势,增加了 symbian 开发环境,而是,对于中国开发者来说,终于拥有了中文的界面,这是令许多开发者高兴的事情。
4、网络方面得到了加强,有新的类加入,弥补原来的众多不足。
5、质量和性能上得到提升,Qt4.7 中采用了最新的 webkit2.0 模块,同时,大量第三方相关库也得到了更新,并且补充了新的功能类和函数,保证 Qt 功能上的强大。
注意:Qt4.7.1 是 Qt4.7.0 一个 bug 修复版本,它保持对 Qt4.7.0 向前和向后的兼容(源代码和二进行制),iTOP-4412 使用 Qt4.7.1 版本。
Qt/E4.7.1 的 u-boot-iTOP-4412.bin、zImage 以及 ramdisk-uboot.img 和 Qtopia 通用,编译方法也一样。它们的区别是“Qtopia”带有一个桌面系统,“Qt/E4.7.1”只是一个强大的库。
Qt/E4.7.1 使用的编译器是交叉编译器编译工具“arm-linux-gcc-4.3.2.tar.gz”,编译器在用户光盘文件夹“08_源码_QtE 以及 qtopia2.2.0 文件系统”中。
Qt/E4.7.1 的源码压缩包“qt-everywhere-opensource-src-4.7.1.tar.gz”在用户光盘文件夹“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\08_源码_QtE 以及 qtopia2.2.0 文件系统”中。
9.2 QtE4.7编译环境
使用已经搭建编译环境的镜像,用户只需要安装虚拟机“Vmware_Workstaion_wm”, 然后用虚拟机加载搭建好环境的 Ubuntu16.04 镜像。“搭建好的镜像”提供网址供大家下载,加载方法参考“3.1安装VMware-workstation”和“3.2.1 加载搭建好的Ubuntu16.04虚拟机”。
自己搭建环境参考第三章VMware和Ubuntu环境搭建
编译QtE4.7库使用的编译器是交叉编译器编译工具“arm-linux-gcc-4.3.2.tar.gz”,注意:文件系统的编译器和uboot和kernel 的编译器不一样。
在我们搭建好的环境中交叉编译器已经安装好了,只需要修改.bashrc环境变量即可,以下是自行搭建环境所要进行的步骤。
QtE4.7编译器在用户光盘文件夹“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\08_源码_QtE 以及 qtopia2.2.0 文件系统”中。将“arm-linux-gcc-4.3.2.tar.gz”解压到 Ubuntu 系统的文件夹“/usr/local/arm”中,解压后,如下图所示.
然后修改环境变量,修改环境变量前,确定是在 root 用户下,接着输入命令“cd”,确定修改的是 root 用户的环境变量,如下图。
然后输入命令“vim .bashrc”,打开设置环境变量的文件“.bashrc”。
输入如上图所示的命令“vim .bashrc 后,输入回车,进入".bashrc"文件,然后进入最后行,将环境变量修改为“export PATH=$PATH:/usr/local/arm/4.3.2/bin”,注意需要注释掉其他环境变量,如下图所示:
保存退出,然后更新一下环境变量,输入命令“source .bashrc”。
然后打开新的终端,测试一下编译器路径设置的对不对。如下图,在 Ubuntu 命令行中输入命令"arm", 然后按键盘"Tab",出现编译器“arm-none-linux-gnueabi-gcc-4.3.2”,这就说明编译器路径设置正确。
9.3 交叉编译QtE4.7库
将光盘文件夹“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\08_源码_QtE 以及 qtopia2.2.0 文件系统”中的 QtE4.7 源码压缩包“qt- everywhere-opensource-src-4.7.1.tar.gz”拷贝到 Ubuntu 的/opt目录下。
然后,在 Ubuntu 命令行中输入解压命令“tar -vxf qt-everywhere-opensource-src- 4.7.1.tar.gz”,解压后得到文件夹“qt-everywhere-opensource-src-4.7.1”,如下图所示
进入“qt-everywhere-opensource-src-4.7.1”文件夹中,执行编译脚本“./build-all”,注意这个命令有个点“.”,
输入回车,如下图所示,开始编译,编译比较耗费时间,在一个小时左右,编译过程如下图所示:
编译完成后,进入"/opt"目录,可以看到编译生成的“qt-4.7.1”文件夹。
到此QtE4.7库就生成了,下面把Qt库安装到开发板的文件系统,并生成镜像。
9.4 生成system.img
生成可以下载的 system.img 文件需要工具“mkimage”,这个工具在用户光盘“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\02_编译器以及烧写工具\tools”文件夹下的压缩包“linux_tools.tgz”中。
如下图所示。
如果使用我们配置好的环境该工具已经安装好了,不再需要进行工具的安装。
拷贝压缩包到 Ubuntu 系统的“/”目录下,注意目录是“/”
进入“/”目录,然后使用命令“tar -vxf linux_tools.tgz ”,将压缩包解压。
解压后如下图所示,在“/usr/local/bin/”目录下生成了两个文件。
使用命令“cd /home/topeet/”进入 topeet 目录,然后使用命令“” 新建一个“Linux+QT”文件夹,如下图所示。
找到用户光盘“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\08_源码_QtE 以及 qtopia2.2.0 文件系统”目录下的压缩包“root_XXX.tar.gz”,XXX 表示日期,如下图所示。
拷贝用户光盘“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\08_源码_QtE 以及 qtopia2.2.0 文件系统”目录下的压缩包“root_XXX.tar.gz”(XXX 表示日期)到新建的“Linux+QT”文件夹下
使用命令“tar -vxf root_xxxx.tar.gz”解压压缩包,解压完成会生成文件夹“root”,如下图所示。
进入文件夹“/home/topeet/Linux+QT/root/opt”(红色的目录 topeet 根据用户实际建立的文件夹调整),然后将“qt-4.7.1”文件夹拷贝到该目录下,如下图。红色框中的“qt- 4.7.1”文件夹是 QtE4.7。可删除Qtopia文件夹。
打开文件系统内的“/home/topeet/Linux+QT/root/etc/init.d/rcS”文件,进入文件中的最后一行,修改成如下图所示,其中“qt4”文件是编写好的脚本,用来设置,用户可用来参考学习和修改。
如下图,进入文件夹“/home/topeet/Linux+QT”中,输入命令:
make_ext4fs -s -l 314572800 -a root -L linux system.img root
编译生成二进制文件“system.img”。如下图,文件“system.img”就是 Qt/E4.7 的文件系统镜像。
9.5 编译uboot和kernel
Qt系统的inux 内核和 Android4.0.3 中的 Linux 内核源码是一样的,编译环境和编译方法也一样,自行搭建环境可参考第七章。使用已经配置好的环境需要修改.bashrc环境变量。注意:编译uboot和kernel使用的是arm-2009q3编译器,编译QtE4.7文件系统用的是arm-linux-gcc-4.3.2.tar.gz。
Qt的uboot和 Android4.0.3 的 Uboot 源码,编译器,参数配置,编译过程都是通用的,可参考7.3章节。
Qt的Linux内核的编译和 Android4.0.3 的内核、源码以及编译环境一样。区别在于“配置文件”不一样。
内核的编译是组合式配置文件,基本的配置文件名是“config_for_linux_YY_elite”,YY 表示用下表所示的参数替代。
硬件分类 | 配置文件 |
核心板 SCP 1G 或者 2G 内存 | config_for_linux_scp_elite |
核心板 POP 1G 内存 | config_for_linux_pop_elite |
核心板 POP 2G 内存 | config_for_linux_pop2G_elite |
这里以 SCP 1G 核心板为例编译 zImage 内核镜像,那么配置文件为“config_for_linux_scp_elite”。
将光盘“06_源码_uboot 和 kernel”目录下的压缩包“iTop4412_Kernel_3.0_xxx.tar.gz”拷贝到 Ubuntu,然后解压,得到文件夹“iTop4412_Kernel_3.0 ”,如下图所示。
进入文件夹“iTop4412_Kernel_3.0 ”,使用命令“cp config_for_linux_scp_elite .config”覆盖自带的配置文件,如下图所示。
如果用户要使用 5 寸屏幕,先要参考用户手册“5.5 支持 5 寸屏的内核补丁文件”,给内核打补丁,然后使用命令“vim .config”,在文件中搜索关键词“CONFIG_TOUCHSCREEN_GT9XX=y”,在“CONFIG_TOUCHSCREEN_GT9XX=y”之后添加一行“CONFIG_TOPEET_LCD5X0=y”,添加完成之后,如下图所示。如果用户不使用 5 寸屏幕,则可以跳过这一步。
最后使用编译命令“make zImage”,如下图所示。
编译的过程中可能会报错,请参照“7.4 编译Linux内核”进行修改。
编译完成,如下图所示。
文件夹“iTop4412_Kernel_3.0 ”下的“arch”-->“arm”-->“boot”会生成镜像文件“zImage”,这个 zImage 镜像可以给 SCP 1G 和 SCP 2G 的核心板使用,如下图所示。
9.6 QtE4.7的触摸校准
如果用户烧写镜像后,第一次运行正常,断电重启后,文件系统出现如下图的错误。这是由于开机后“校准文件为空”。
出现上图中的错误,则需要在超级终端中,输入命令“rm -rf /etc/point*”,然后输入命令“reboot”重启开发板,如下图所示。
如上图,重启后就可以重新校准。
为了避免这个错误,用户需要在文件系统的校准阶段,按照屏幕界面“十字”标识,依次点击标识。这个过程就是触摸屏的校准阶段,确保校准的每一次都是按在系统指示的位置。
9.7 QtE库的编译配置选项简介
在 QtE 库编译的时候,可以根据需求来配置,迅为提供的是已经配置好的。用户如果有其他功能的需求,可以自行配置。
下面给大家简单介绍一下 QtE 库编译时的配置。如下图,进入 QtE4.7 的库文件源码目录。
打开“build-all”文件。如下图,可以看到“./configure”后面的配置,通过这些配置可以确定编译出来库的属性。
通过“./configure --help”可以查看每一个配置的具体含义。
如下图,有大量的可配置选项。
下面给大家简要介绍使用到的配置参数。
-opensource 自由版本(免费的)
-embedded arm 嵌入式 arm 架构
-xplatform qws/linux-arm-g++ 交叉编译的目标平台
-no-webkit 去掉 webkit 插件
-qt-libtiff 支持 tiff 插件
-qt-libmng 支持 mng 插件
-qt-mouse-tslib,-qt-mouse-pc,-no-mouse-linuxtp 触摸相关
-I ... Add an explicit include path,添加路径,这里包含了“/usr/local/tslib/include”
-L Add an explicit library path 添加库路径,这里包含了“/usr/local/tslib/lib” 其它常用参数,例如“-verbose”可以打印每一步的信息,编译查找编译过程中的问
题;“-static”可以将库文件编译成静态,通过静态库移植的应用,不用将 QtE 库下载到开发板上。
还有上面的“/usr/local/tslib”则是迅为电子移植的触摸库文件。
Qt/E 的另外一个特征是拥有大量的库文件,跨平台,还可以很容易移植已有的第三方库文件。
9.8 连接WIFI (MT6620的使用)
使用我们编译好的QtE4.7文件系统镜像可以使用WiFi功能,烧写“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\04_镜像_QT文件系统\system”文件夹下的镜像,可连接WiFi。
首先使用 wpa_passphrase 配置 ssid 以及密码,连接 WIFI 之前确认 WIFI 的名称和密码,启动开发板之后输入命令。
wpa_passphrase XXX "YYY " >> /etc/wpa_supplicant.conf
其中 XXX 代表您的 WiFi 网络名称, YYY 代表 WPA-PSK 或者 WPA2-PSK 加密的密码。然后运行脚本
./etc/init.d/mt6620
如果路由器接通了外网,则开发板现在可以 ping 通外网了