一、 项目要求
- 配置QT5.7基于x86及arm 等两种CPU架构的调试及开发环境;
- 移植arm编译后的QT5.7及屏幕校准工具tslib1.4至CORTEX ARM9实验平台;
- 开发基于QT5.7的嵌入式音视频播放器;
- 开发基于QT5.7的嵌入式串口工具,实现数据双向通信;
- 能用Q5.7T在开发板上实现读取SD卡及U盘的文件(目录)信息,并以相关组件展示;
- 开发基于QT5.7的嵌入式LED io控制器,实现对LED设备的控制;
- 开发嵌入式QT小游戏模块;
- QT开发计算器模块;
- 实现日期组件,能够修改系统(arm平台)时间并实时刷新;
二、 项目开发环境
2.1 硬件环境
2.1.1开发端(PC)
操作系统:64位ubuntu-19.04(虚拟机)
CPU :INTER_X86 core i5-6200 主频可加速至2.8GHZ
GPU :NVIDIA GEFORCE-920M
虚拟硬盘:25GB
RAM :4GB
2.1.2教学实验平台
CPU:Samsung Exynos4412, 四核Cortex-A9,主频为1.4~1.6GHz
GPU: ARM Mali-400 MP Core (Quad Fragment processors)
操作系统:Linux 3.0
2.2 软件环境
2.2.1 编译QT5.7(ARM)
QT及相关工具下载
- 从http://download.qt.io/archive/qt/5.7/5.7.0/single/qt-everywhere-opensource-src-5.7.0.tar.gz下载linux下QT5.7源码版本(考虑到QT4.8.5中对音视频库的支持不够友好,我们直接选择版本更高的QT5并将平台上的QT4予以替换)
- 由于编译源码的需要,需要从https://www.veryarm.com/arm-none-linux-gnueabi-gcc下载交叉编译工具arm-none-linux-gnueabi-gcc
- 实验平台屏幕校准工具tslib1.4:http://vdisk.weibo.com/s/AcUHxOERV2k0?sudaref=www.baidu.com
- 最后将下载成功的qt-everywhere-opensource-src-5.7.0.tar.gz、arm-linux-gcc-4.4.3-20100728.tar.gz及tslib1.4.tar.gz拷贝到虚拟机上。
交叉编译环境配置
解压arm-linux-gcc-4.4.3-20100728.tar.gz
执行tar zxvf arm-linux-gcc-4.4.3-20100728.tar.gz 并将解压后的目录复制到/usr/local/arm/4.4.3下得到:
配置arm-gcc环境变量
重启之后执行arm-linux-gcc -v
这里出现报错,查阅相关资料了解到该交叉编译工具仅支持32位系统,需安装依赖包
执行sudo apt-get install lib32ncurses5 lib32z1之后 验证arm-linux-gcc -v命令显示成功!
由此交叉编译环境搭建完毕。
交叉编译tslib1.4
进入tslib1.4压缩文件目录,并解压
安装完成进入tslib目录执行./configure命令
此处如果出现了报错,原因是autoreconf:notfound 则是缺失automake及autoconf库,
索性一次性安装所有make命令相关依赖包
执行sudo apt-get install autoconf automake libtool make libsysfs-dev
这里我在解压后的tslib-1.4目录新建配置脚本autogen.sh,
写入 ./configure --prefix=/usr/local/tslib --host=arm-linuxac_cv_func_malloc_0_nonnull=yes并修改其文件模式为777
执行./autogem.sh
成功配置之后会在相应目录下生成Makefile文件,执行编译操作
如果在/user/local/tslib下生成了bin include等目录则证明编译成功!
交叉编译QT5.7
解压QT5.7在任意目录
命令行模式下进入该目录,修改qmake.conf配置参数
执行命令为vim ./qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf
并修改为以下内容:
MAKEFILE_GENERATOR = UNIX CONFIG += incremental QMAKE_INCREMENTAL_STYLE = sublib QT_QPA_DEFAULT_PLATFORM = linux #eglfs QMAKE_CFLAGS_RELEASE += -O2 -march=armv9-a QMAKE_CXXFLAGS_RELEASE += -O2 -march=armv9-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)
创建一个脚本文件,用于生成Makefile,vim autocqt.sh,主要目的就是对qt进行裁剪和一些安装配置,脚本内容如下:
#!/bin/sh ./configure \ -v \ -prefix /user/local/Trolltech/QtEmbedded-4.6.3-arm \ -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/user/local/tslib/include \ #注意该路径为方才交叉编译tslib的目标目录下相应的include目录 -L/user/local/tslib/lib #注意该路径为方才交叉编译tslib的目标目录下相应的lib目录 Exit
执行./autocqt.sh
这里出现了错误,缺失libxtst-dev,执行apt-get还是不能安装
解决办法:进入软件包目录, 直接安装缓存的软件包
找到libx11-dev*和libxext-dev*
问题解决,提示如下信息则执行make命令
还是出现错误,提示如下信息,太不容易了,继续排错。
找到linux-gcc的位置,添加如下变量
不存在QMAKE_CXXFLAGS变量,则在../common/linux.conf、../common/gcc-base-unix.conf、../common/g++-unix.conf 这三个文件。如果没有找到还需要递归的打开着三个文件中包含的文件。
在../common/gcc-base.conf (包含在文件../common/gcc-base-unix.conf 中)文件中找到,并修改为
../common/g++-base.conf
以及../common/gcc-base.conf,和以上文件一样的修改方式相同
修改之后运行成功查看 /user/local/Trolltech/QtEmbedded-4.6.3-arm
qmake被成功构建
至此QT5.7交叉编译成功!
整理待移植目录到任意目录下