【北京迅为】iTOP-4412精英版使用手册-第十章 QtE5.7系统编译

iTOP-4412开发板【精英版】搭载三星Exynos四核处理器,配备1GB内存,4GB固态硬盘EMMC存储,兼具快速读取与大容量,纵使海量思考也能及时处理。配备三星S5M8767电源管理。配备Android、Linux+Qt、Ubuntu操作系统,开启学习、研发的全新方式。Exynos4412开发板处理器成功应用于三星GALAXYS3,联想K860,魅族MX2等热门产品当中,并取得巨大成功。功耗控制以及强劲的性能一直为业内称道,超过5000万片的出货量,足以证明其稳定性与可用性。已成为三星官方推广的处理器之一,并承诺长期供货。


 

第十章 QtE5.7系统编译

本章介绍 QT5.7 版本在开发板上的移植。用到的文件可以在网盘的“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP- 4412 开发板系统源码及镜像(其他)\QtE5.7 移植资料\iTOP-4412-QtE-移植 QtE5.7 系统.zip”文件中找到。

制作好的Qt5.7文件系统在iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412开发板系统源码及镜像(其他)\QtE5.7移植资料\QtE5.7系统升级目录\20180511\system.img”,可直接烧写。

环境:ubuntu16.04(Qt5.7creater 需要在 16.04 版本上运行)

下载链接:http://cn.ubuntu.com/download/

编译器:arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

下载链接:http://www.veryarm.com/arm-none-linux-gnueabi-gcc

触摸工具:tslib-1.4.tar.gz

下载链接:http://vdisk.weibo.com/s/AcUHxOERV2k0?sudaref=www.baidu.com

Qt 源码:qt-everywhere-opensource-src-5.7.0.tar.gz

下载链接:http://download.qt.io/official_releases/qt/5.7/5.7.0/

迅为开发板可以支持 QtE5.7 系统,将 uboot 和内核在同一 Ubuntu 环境下编译,有助于提高开发效率。请注意,在 Ubuntu16.04 下是无法编译 Android4.0 系统的,必须要使用Android4.0 编译章节对应的 Ubuntu 系统。

10.1 使用搭建好的环境

搭建好的编译环境在网盘“iTOP4412 开发板资料汇总(不含光盘内容)\iTOP-4412 开发板搭建编译环境所需要的工具包以及补丁包\09-QtE5.7 的编译环境安装包\02-搭建好的QtE5.7 编译环境”目录下。用户如果使用搭建好的编译环境,在简单的修改环境变量之后,就可以完成本章的编译。

10.2 安装交叉编译器

首先安装对应的依赖库,命令如下:

apt-get install lzop u-boot-tools autoconf automake libtool libstdc++6 lib32c-dev lib32stdc++6 lib32z1 lib32ncurses5

编译 QtE5.7 用到的编译器在网盘资料“iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412开发板系统源码及镜像(其他)\QtE5.7移植资料\iTOP-4412-QtE-移植QtE5.7系统\”,是:

arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

将编译器拷贝到“/usr/local/arm”目录下,并解压。使用命令“cd”(一定要使用 root 账户),接着使用“vim .bashrc”命令,打开环境变量配置文件,添加export PATH=$PATH:/usr/local/arm/arm-2014.05/bin,使用搭建好的环境取消注释即可(一定要将其他环境变量注释掉)如下图所示。

 

接着还需要更新一下环境变量,如下图所示,使用命令“source .bashrc”。 

 

最后做一下环境变量测试。重启下控制台后,在 Ubuntu 控制台中输入“arm-none-linux-gnueabi-gcc -v”,然后回车,会出现如下图所示内容。 

 

由于我们默认的编译环境要编译低版本的安卓,所以降低了GCC编译器的版本,而编译QT5.7的时候会由于版本过低而编译失败,所以我们需要升级gcc的版本(gcc版本升级后,如果之后要编译安卓,需要根据7.2.4降低GCC版本章节将GCC的版本降低),拷贝“iTOP-4412精英版\20200411\iTOP-4412精英版光盘资料\02_编译器以及烧写工具”路径下的update_gcc.sh文件到虚拟机ubuntu上,如下图所示: 

 

然后使用命令

chmod 777 update_gcc.sh

赋予文件可执行权限,然后使用命令“./update_gcc.sh”,来执行对应的命令,执行成功如下图所示:

 

可以看到我们的GCC版本已经升级到5.4.0。

编译触摸

解压源码 tslib-1.4.tar.gz,在网盘资料“iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412开发板系统源码及镜像(其他)\QtE5.7移植资料\iTOP-4412-QtE-移植QtE5.7系统\iTOP-开发板-QtE-移植QtE5.7系统”,然后执行如下命令。 

cd tslib
./autogen.sh

./configure CC=arm-none-linux-gnueabi-gcc CXX=arm-none-linux-gnueabi-g++ --host=arm-none-linux-gnueabi -- prefix=/opt/tslib1.4 ac_cv_func_malloc_0_nonnull=yes

make

make install

vim /opt/tslib1.4/etc/ts.conf 修改第二行如下

 

注意这里第二行module_raw input前面不能有空格,保存,退出。

10.3 交叉编译QtE5.7库

使用“tar -vxf qt-everywhere-opensource-src-5.7.0”命令解压 QtE5.7 源码,并进入解压生成的“qt-everywhere-opensource-src-5.7.0”目录。

在“qt-everywhere-opensource-src-5.7.0”目录下,使用

vi qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf ”命令,打开 qmake.conf 文件,并修改为如下所示内容,如下图所示,红色字体为添加或者修改的部分。

#
# qmake configuration for building with arm-linux-gnueabi-g++ 
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental 
QMAKE_INCREMENTAL_STYLE = sublib

QT_QPA_DEFAULT_PLATFORM = linux  #eglfs 
QMAKE_CFLAGS_RELEASE += -O2 -march=armv7-a 
QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv7-a

include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf) 

# modifications to g++.conf

QMAKE_CC			= arm-none-linux-gnueabi-gcc 
QMAKE_CXX			= arm-none-linux-gnueabi-g++ 
QMAKE_LINK			= arm-none-linux-gnueabi-g++ 
QMAKE_LINK_SHLIB	= arm-none-linux-gnueabi-g++

# modifications to linux.conf

QMAKE_AR			= arm-none-linux-gnueabi-ar cqs 
QMAKE_OBJCOPY		= arm-none-linux-gnueabi-objcopy 
QMAKE_NM			= arm-none-linux-gnueabi-nm -P 
QMAKE_STRIP			= arm-none-linux-gnueabi-strip 
load(qt_config)

然后保存退出,使用“vi autoconfigure.sh”命令,新建“autoconfigure.sh”脚本。脚本内容如下所示。

#!/bin/sh
./configure \
-v \
-prefix /opt/qt5.7.0 \
-release \
-opensource \
-make libs \
-xplatform linux-arm-gnueabi-g++ \
-optimized-qmake \
-pch \
-qt-sql-sqlite \
-qt-libjpeg \
-qt-zlib \
-no-opengl \
-skip qt3d \
-skip qtcanvas3d \
-skip qtpurchasing \
-no-sse2 \
-no-openssl \
-no-nis \
-no-cups \
-no-glib \
-no-iconv \
-nomake examples \
-nomake tools \
-skip qtvirtualkeyboard \
-I/opt/tslib1.4/include \
-L/opt/tslib1.4/lib

exit

如下图:

 保存脚本,退出。使用命令“chmod 777 autoconfigure.sh”修改脚本权限,然后使用命令“./autoconfigure.sh”执行脚本,会有版本认证,如下图。

 输入“yes”即可。接着使用编译命令“make”,之后使用安装命令“make install”。完成后,可以在“/opt”目录下可以查看到生成的“qt5.7.0”文件,如下图所示。

在下一小节的打包过程中,会用到该文件。

10.4 生成QtE5.7文件系统镜像

生成镜像‘system.img’文件的话需要工具“mkimage”。

在使用‘已经搭建好的环境’时,该工具已经给大家设置好,使用自己搭建的环境时,用户要严格按照如下步骤进行操作,若用户自己使用命令安装该工具,可能会因为版本问题,在打包或烧写时出现各种错误。

安装打包工具

工具在用户光盘“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\02_编译器以及烧写工具\tools”文件夹下的压缩包\linux_tools.tgz”中。

拷贝压缩包到 Ubuntu 系统的“/”目录下,注意目录是“/”。进入“/”目录,然后使用“tar -vxf linux_tools.tgz ”命令将压缩包解压。解压后,在“/usr/local/bin/”目录下生成了两个文件。如下图所示。

 

生成system.img镜像

使用提供好的根文件系统,在“/home/topeet”目录下,新建“Linux+QtE5.7”文件夹,并把光盘“iTOP-4412精英版\20200624\iTOP-4412精英版光盘资料\08_源码_QtE 以及 qtopia2.2.0 文件系统”目录下的“root_20150422.tar.gz”文件上传到刚才新建的文件夹中,如下图所示。

解压后生成 root 目录,如下图所示。 

 将刚才编译生成的“qt5.7.0”文件和“tslib1.4”触摸文件,拷贝到“/home/topeet/Linux+QtE5.7/root/opt”目录下,并删除之前存在的“qt-4.7.1”和“Qtopia”目录。如下图所示。

 将字库文件“fonts”拷贝到“/home/topeet/Linux+QtE5.7/opt/qt5.7.0/lib/”目录下。将“libstdc.tar.gz”拷贝到/home/topeet/Linux+QtE5.7/root/lib”目录下解压,并输入命令:

ln -s libstdc++.so.6.0.19 libstdc++.so.6

(使用上述链接命令时,如果显示文件已经存在,则继续向下执行即可) 修改环境变量“vim etc/profile”,如下所示。

# Ash profile 
# vim: syntax=sh

# No core files by default
ulimit -S -c 0 > /dev/null 2>&1

USER="`id -un`"
LOGNAME=$USER
PS1='\e[36m\h@\e[33m\u:\e[34m\e[1m\w\e[0m# '
PATH=$PATH

HOSTNAME=`/bin/hostname`
export USER LOGNAME PS1 PATH
export TSLIB_ROOT=/opt/tslib1.4 
export QT_ROOT=/opt/qt5.7.0
export TSLIB_TSDEVICE=/dev/input/event2 
export TSLIB_TSEVENTTYPE=input
export TSLIB_CONFFILE=/opt/tslib1.4/etc/ts.conf 
export TSLIB_PLUGINDIR=/opt/tslib1.4/lib/ts 
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_PRELOAD=$TSLIB_ROOT/lib/libts.so
export QWS_MOUSE_PROTO=tslib:/dev/input/event2
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_ROOT/lib:$TSLIB_ROOT/lib:$TSLIB_ROOT/lib/ 
export QT_QPA_PLATFORM_PLUGIN_PATH=$QT_ROOT/plugins
export QT_QPA_PLATFORM=linuxfb:tty=/dev/fb0 
export QT_QPA_FONTDIR=$QT_ROOT/lib/fonts 
export QT_QPA_GENERIC_PLUGINS=tslib

保存,退出。

修改开机启动脚本“vi etc/init.d/rcS”,注释掉“/bin/qt4 &”,并加上“/bin/qt5.7 &”。

将迅为提供的“qt5.7”文件(iTOP4412开发板资料汇总(不含光盘内容)\iTOP-4412开发板系统源码及镜像(其他)\QtE5.7移植资料\iTOP-4412-QtE-移植QtE5.7系统\iTOP-开发板-QtE-移植QtE5.7系统\qt5.7)拷贝到“bin”目录下,并修改 qt5.7 的权限为 777。

 在“/home/topeet/Linux+QtE5.7”目录下,使用以下命令打包镜像:

make_ext4fs -s -l 314572800 -a root -L linux system.img root

生成“system.img”镜像文件。

 

至此,QtE5.7 的编译就全部完成了。

10.5 编译U-boot和Kernel镜像

Qt系统的inux 内核和 Android4.0.3 中的 Linux 内核源码是一样的,编译环境和编译方法也一样,自行搭建环境可参考第七章。使用已经配置好的环境需要修改.bashrc环境变量。注意:编译uboot和kernel使用的是arm-2009q3编译器,编译QtE5.7文件系统用的是arm-2014.05-29-arm-none-linux-gnueabi-i686-pc-linux-gnu.tar.bz2

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 的核心板使用,如下图所示。 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值