【Linux】Linux开发板搭载Ubuntu18.04移植Qt5并设置Qt应用开机自启动
前言
把Ubuntu14.04虚拟机交叉编译的Qt5,移植到搭载Ubuntu18.04的Linux开发板,然后通过一系列的配置让开发板能够开机就启动Qt应用程序。
一、实验环境
宿主机:Ubuntu14.04 x86_64
目标机:Ubuntu18.04 aarch64
Qt5源码:qtbase 5.12.10
交叉编译器:gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu
二、配置交叉编译器
GCC(GNU Compiler Collection,GNU编译器套件)是由GNU开发的编程语言编译器。GNU编译器套件包括C、C++、 Objective-C、 Fortran、Java、Ada和Go语言前端,也包括了这些语言的库(如libstdc++,libgcj等)。
在宿主机下执行如下步骤:
下载,
wget https://releases.linaro.org/components/toolchain/binaries/6.3-2017.05/aarch64-linux-gnu/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
解压,
xz -dv gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz
tar xvf gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu.tar
添加环境变量,
vim ~/.bashrc
#添加如下:
export PATH=/home/root/gcc-linaro-6.3.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
source ~/.bashrc
若通过如下命令能够查看到版本信息,如下图所示,则证明配置完成。
aarch64-linux-gnu-gcc -v
三、交叉编译tslib
tslib是一个开源的程序,能够为触摸屏驱动获得的采样提供诸如滤波、去抖、校准等功能。
在宿主机下执行如下步骤:
下载,
wget https://gitlab.com/tslib/tslib/-/archive/1.22/tslib-1.22.tar.gz
解压,
tar zxvf tslib-1.22.tar.gz
进入tslib目录,
cd tslib-1.22
生成配置文件,
./auto autogen.sh
配置,
CC=aarch64-linux-gnu-gcc \
CXX=aarch64-linux-gnu-g++ \
./configure \
--host=arm-linux-gnu \
--prefix=/opt/tslib
编译安装,
make && make install
若过程没有出现错误,则安装完成。
四、交叉编译Qt5
qtbase是Qt的基础模块,包含了core、widgets、sql和network等模块,只安装它也足够开发常用的Qt应用。
在宿主机下执行如下步骤:
下载,
wget https://download.qt.io/archive/qt/5.12/5.12.10/submodules/qtbase-everywhere-src-5.12.10.tar.xz
解压,
xz -dv qtbase-everywhere-src-5.12.10.tar.xz
tar xvf qtbase-everywhere-src-5.12.10.tar
进入qtbase目录,创建并进入build文件夹,创建自动配置脚本autoconfig.sh,
cd qtbase-everywhere-src-5.12.10
mkdir build
cd build
vim autoconfig.sh
autoconfig.sh编辑如下,
../configure \
-prefix /opt/qt-5.12.10-aarch64 \
-xplatform linux-aarch64-gnu-g++ \
-opensource \
-confirm-license \
-release \
-strip \
-shared \
-c++std c++11 \
-no-opengl \
-no-openssl \
-nomake examples \
-nomake tests \
-tslib \
-I"/opt/tslib/include" \
-L"/opt/tslib/lib" \
-recheck-all
运行autoconfig.sh,
sh autoconfig.sh
结果如下图所示,
编译安装,
make -j2 && make install
若过程没有出现错误,则安装完成。
五、配置Qt Creator
Qt Creator是一款跨平台的、轻量级的Qt集成开发环境(IDE),使用它能够方便快速地完成Qt应用的开发。
在宿主机下执行如下步骤:
安装qtcreator,
apt install qtcreator
运行qtcreator,
qtcreator
进入qtcreator的设置界面,
添加编译器,
添加Qt Version,
添加Kit,点击Add添加,自定义Name,Device Type选择Generic Linux Device(通用Linux设备),选择对应的Compiler和Qt version,点击Apply生效,点击OK关闭。
配置完成,可以使用qtcreator编译生成aarch64架构的Qt应用。
打开Qt工程,添加编译工具,
最后,点击build,编译工程即可。
在对应目录下生成了Qt应用文件,通过file命令可看到其属于aarch64架构的。
六、Qt5添加字库
上述步骤交叉编译的Qt5不带字库,若Qt程序需要显示文字,就需要指定字库,以下为添加中文字库为例,
在/opt/qt-5.12.10-aarch64/lib目录下新建fonts文件夹,
把Windows电脑下的字库复制到/opt/qt-5.12.10-aarch64/lib/fonts即可。
七、移植Qt5和tslib
把上述步骤交叉编译的Qt5、tslib和Qt应用复制到目标机。
由于交叉编译时指定的目录是/opt,所以只要把宿主机上的Qt5和tslib复制到目标机的/opt目录下即可,
然后目标机配置环境变量如下所示,
vim ~/.bashrc
#添加如下:
export PATH=$PATH:/opt/tslib/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/tslib/lib
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event2
source ~/.bashrc
其作用是指定显示为/dev/fb0外设,触摸为/dev/input/eventX外设。
运行Qt应用,有结果如下图所示,
到此,Qt5已经成功移植到目标机了。
八、开机自启动Qt应用
目标机通过串口在宿主机上显示终端,默认是需要密码登陆的,想让Qt应用开机后启动,需要设置成免密登陆。
在目标机下执行如下步骤:
设置串口终端免密登陆,如下图所示,
vim /lib/systemd/system/serial-getty@.service
#添加如下:
ExecStart=-/sbin/agetty -a root --keep-baud 115200,38400,9600 %I $TERM
关闭虚拟终端服务,
systemctl disable getty@.service
然后查看是否关闭,有结果如下图所示,
systemctl list-unit-files | grep tty
编辑自动启动脚本,在/etc/profile.d目录下新建脚本,开机后会自动运行该脚本,
cd /etc/profile.d
vim runqtapp.sh
脚本编辑如下,
#!/bin/sh
export PATH=$PATH:/opt/tslib/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/tslib/lib
export QT_QPA_PLATFORM=linuxfb:fb=/dev/fb0
export QT_QPA_GENERIC_PLUGINS=tslib:/dev/input/event2
cd /root
./animatedtiles
然后重启,就会发现Qt程序自动运行了。
九、实验结果
在制作GIF的过程中,我去除了大部分的视频,但是我保留了一部分,我觉得保留了一部分视频,才知道你看的是GIF。