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