前提
两个环境:虚拟机ubuntu20.0和全志T527开发板
目的:在虚拟机上编译好可执行文件,放在开发板上运行
编译好的qt和tslib也要移植给开发板,运行需要这两个环境
准备好交叉编译环境aarch64-linux-gnu
此步省略。
1 tslib1.23源码编译
1.1 源码获取
1.2 编译
# 1.解压
tar xvf tslib-1.23.tar.gz
# 2.进入文件夹
cd tslib-1.23
# 3.编译并安装
./autogen.sh
./configure --host=aarch64-linux-gnu --prefix=$(pwd)/_install --cache-file=aarch64-linux.cache
make
make install
#_install文件夹内就是生成的文件
1.3 开发板配置tslib环境变量
export TSLIB_CONFFILE=/etc/ts.conf
export TSLIB_TSDEVICE=/dev/input/event7
export TSLIB_FBDEVICE=/dev/fb0
export TSLIB_PLUGINDIR=/usr/lib/ts
export TSLIB_CONSOLEDEVICE=none
2 qt5.12.5源码编译
2.1 源码获取
2.2 编译
2.2.1 解压
# 1.解压
tar -xvf qt-everywhere-src-5.15.2.tar.xz
# 2.进入文件夹
cd qt-everywhere-src-5.12.5
2.2.2 修改qmake.conf
#
# qmake configuration for building with aarch64-linux-gnu-g++
#
MAKEFILE_GENERATOR = UNIX
CONFIG += incremental
QMAKE_INCREMENTAL_STYLE = sublib
QT_QPA_DEFAULT_PLATFORM = linuxfb
include(../common/linux.conf)
include(../common/gcc-base-unix.conf)
include(../common/g++-unix.conf)
# modifications to g++.conf
QMAKE_CC = aarch64-linux-gnu-gcc
QMAKE_CXX = aarch64-linux-gnu-g++
QMAKE_LINK = aarch64-linux-gnu-g++
QMAKE_LINK_SHLIB = aarch64-linux-gnu-g++
# modifications to linux.conf
QMAKE_AR = aarch64-linux-gnu-ar cqs
QMAKE_OBJCOPY = aarch64-linux-gnu-objcopy
QMAKE_NM = aarch64-linux-gnu-nm -P
QMAKE_STRIP = aarch64-linux-gnu-strip
load(qt_config)
解释:
- QT_QPA_DEFAULT_PLATFORM = linuxfb 中linuxfb视自己情况选择
- aarch64-linux-gnu-gcc及后面的值我的环境变量中已经配好了。
- 运行下面的命令可以查看aarch64-linux-gnu交叉编译环境是否存在
# 命令
aarch64-linux-gnu-gcc -v
# 显示结果
Using built-in specs.
COLLECT_GCC=aarch64-linux-gnu-gcc
COLLECT_LTO_WRAPPER=/usr/lib/gcc-cross/aarch64-linux-gnu/9/lto-wrapper
Target: aarch64-linux-gnu
Configured with: ../src/configure -v --with-pkgversion='Ubuntu 9.4.0-1ubuntu1~20.04.2' --with-bugurl=file:///usr/share/doc/gcc-9/README.Bugs --enable-languages=c,ada,c++,go,d,fortran,objc,obj-c++,gm2 --prefix=/usr --with-gcc-major-version-only --program-suffix=-9 --enable-shared --enable-linker-build-id --libexecdir=/usr/lib --without-included-gettext --enable-threads=posix --libdir=/usr/lib --enable-nls --with-sysroot=/ --enable-clocale=gnu --enable-libstdcxx-debug --enable-libstdcxx-time=yes --with-default-libstdcxx-abi=new --enable-gnu-unique-object --disable-libquadmath --disable-libquadmath-support --enable-plugin --enable-default-pie --with-system-zlib --without-target-system-zlib --enable-libpth-m2 --enable-multiarch --enable-fix-cortex-a53-843419 --disable-werror --enable-checking=release --build=x86_64-linux-gnu --host=x86_64-linux-gnu --target=aarch64-linux-gnu --program-prefix=aarch64-linux-gnu- --includedir=/usr/aarch64-linux-gnu/include
Thread model: posix
gcc version 9.4.0 (Ubuntu 9.4.0-1ubuntu1~20.04.2)
2.2.3 配置编译选项
# 1.编写一个autoconfigure.sh文件
vi autoconfigure.sh
# 2.内容
./configure -prefix /home/ys/yao/qt-everywhere-src-5.12.5/arm-qt -opensource -confirm-license -release -shared -xplatform linux-aarch64-gnu-g++ -make libs -make examples -no-opengl -skip qt3d -skip qtdoc -skip qttools -tslib -I/home/ys/yao/tslib-1.23/_install/include -L/home/ys/yao/tslib-1.23/_install/lib -recheck-all
# 3. 将2中的内容分开来看
./configure -prefix /home/ys/yao/qt-everywhere-src-5.12.5/arm-qt \
-opensource \
-confirm-license \
-release \
-shared \
-xplatform aarch64-linux-gnu-g++ \
-make libs \
-make examples \
-no-opengl \
-skip qt3d \
-skip qtdoc \
-skip qttools \
-tslib \
-I/home/ys/yao/tslib-1.23/_install/include \
-L/home/ys/yao/tslib-1.23/_install/lib \
-recheck-all
解释:
- /home/ys/yao/qt-everywhere-src-5.12.5/arm-qt中arm-qt就是输出的文件夹
- aarch64-linux-gnu-g++选择交叉编译环境
- -tslib链接tslib的库
- -I/home/ys/yao/tslib-1.23/_install/include和-L/home/ys/yao/tslib-1.23/_install/lib分别是tslib的头文件路径和库路径
# 其他参数含义
-opensource:构建Qt的开源版本
-release:使用release版本的Qt
-xplatform linux-arm-gnueabi-g++:指定编译器
-skip qt3d:跳过Qt的3d
-make libs:编译要用到的库
-make examples:编译生成Qt的例程代码
-nomake tools:不生成Qt的工具
-no-openssl:不使用openssl
2.2.4 开始编译
./autoconfigure.sh
make
make install
结果参考:嵌入式Linux-Qt环境搭建
此时,编译结果放在了arm-qt中
2.2.5 移植qt
打包arm-qt,并将其复制到开发板的/usr/local下
# 配置qt环境变量
vi /etc/profile
# 在最后添加:
export QT_QPA_FB_TSLIB=1
export QT_QPA_EGLFS_TSLIB=1
export QT_QPA_PLATFORM=linuxfb
export QT_QPA_EGLFS_ROTATION=0
export QT_QPA_EGLFS_INTEGRATION=none
export QT_QPA_GENERIC_PLUGINS="tslib:/dev/input/event7"
# export QT_QPA_FONTDIR=/usr/local/arm_qt/fonts
export QT_QPA_PLATFORM_PLUGIN_PATH=/usr/local/arm_qt/plugins
export QML2_IMPORT_PATH=/usr/local/arm_qt/qml/
# 立即生效配置
source /etc/profile
3.运行测试
# 在qt-everywhere-src-5.12.5/arm-qt/examples/widgets/animation/animatedtiles/下有一个可执行文件animatedtiles
# 将文件上传至开发板(此时在虚拟机)
cd /home/ys/yao/qt-everywhere-src-5.12.5/arm-qt/examples/widgets/animation/animatedtiles/
scp animatedtiles root@192.168.0.10:/root
# 在开发板上运行(此时在开发板)
cd /root
./animatedtiles
运行结果:运行结果
参考文献: