itop-3568 开发板文件系统构建学习笔记(3)最小系统移植 QT 库

《【北京迅为】itop-3568 开发板文件系统构建手册v1.0.pdf》学习笔记

下载 QT 源码

QT 源码下载地址:https://download.qt.io/archive/qt/

我所下载的版本是 5.15.2:

在这里插入图片描述

编译 QT 库

解压源码

将 QT 源码压缩包复制到虚拟机开发环境中,使用 tar -vxf qt-everywhere-src-5.15.2.tar.xz 进行解压:

在这里插入图片描述

确认交叉编译器

确认当前环境变量中已经添加交叉编译器路径,

在这里插入图片描述

修改 qmake.conf

进入 qt 源码根文件目录,修改 qtbase/mkspecs/linux-arm-gnueabi-g++/qmake.conf 文件,将 arm-linux-gnueabi 替换成我当前开发环境中使用的交叉编译器名称(如果用 vim 替换,可以参考下图),

在这里插入图片描述

该文件需要修改的地方包括下面两个区域,根据自己实际情况更改,

在这里插入图片描述

配置编译选项

编译项配置通过根目录下的 configure 配置,执行 ./configure --help 可以查看可配置项,

在这里插入图片描述

由于需要配置的项目太多,所以我们可以将需要的配置项写成一个脚本,创建 autoconfigure.sh,将下面的内容添加到该脚本内,

#!/bin/sh
./configure \
-v \
-prefix /opt/qt5.15.2 \
-confirm-license \
-opensource \
-release \
-xplatform linux-aarch64-gnu-g++ \
-optimized-qmake \
-c++std c++11 \
--rpath=no \
-pch \
-skip qt3d \
-skip qtactiveqt \
-skip qtandroidextras \
-skip qtcanvas3d \
-skip qtconnectivity \
-skip qtdatavis3d \
-skip qtdoc \
-skip qtgamepad \
-skip qtlocation \
-skip qtmacextras \
-skip qtnetworkauth \
-skip qtpurchasing \
-skip qtremoteobjects \
-skip qtscript \
-skip qtscxml \
-skip qtsensors \
-skip qtspeech \
-skip qtsvg \
-skip qttools \
-skip qttranslations \
-skip qtwayland \
-skip qtwebengine \
-skip qtwebview \
-skip qtwinextras \
-skip qtx11extras \
-skip qtxmlpatterns \
-make libs \
-make examples \
-nomake tools -nomake tests \
-gui \
-widgets \
-dbus-runtime \
--glib=no \
--iconv=no \
--pcre=qt \
--zlib=qt \
-no-openssl \
--freetype=qt \
--harfbuzz=qt \
-no-opengl \
-linuxfb \
--xcb=no \
--libpng=qt \
--libjpeg=qt \
--sqlite=qt \
-plugin-sql-sqlite \
-I/opt/tslib1.4/include \
-L/opt/tslib1.4/lib \
-recheck-all
exit

脚本中的 tslib 库可以暂时不加(我还没编译 tslib),保存该脚本后,使用 chmod 777 autoconfigure.sh 修改脚本权限,然后执行脚本,

在这里插入图片描述

配置完成,

在这里插入图片描述

编译源码

输入 make 进行编译,我没有使用多线程编译,花了 1.5 小时完成编译,

在这里插入图片描述
安装(生成QT库)

使用 make install 进行安装,由于前面的配置将 QT 库的安装路径放到了 /opt,是系统目录,所以要 root 权限,

在这里插入图片描述

下面是我使用 sudo make install 的结果,依然没成功,

在这里插入图片描述
原来是我配置的全局交叉编译器只在当前用户生效(~/.bashrc),所以使用 sudo aarch64-linux-gnu-xxx 会提示找不到命令,

在这里插入图片描述

解决办法是先使用 sudo -s(该命令可以使用 root 权限的同时,保留 ~/.bashrc 里的环境变量),然后直接 make install,

在这里插入图片描述

安装完成,

在这里插入图片描述

此时安装目录下有以下几个文件夹,

在这里插入图片描述

将 QT 库移植到文件系统

拷贝 QT 库

根文件系统是上一篇笔记中制作的,将刚才编译好的 QT 库复制到根文件系统的 /opt/ 目录下(没有该目录的话需要新建),

在这里插入图片描述

拷贝字库

字库文件需要我们手动复制,我们可以直接将 Windows 系统下的字库文件拷贝到最小系统中,

在这里插入图片描述

我将字库目录放到了根文件系统的 /lib 目录,

在这里插入图片描述

配置 QT 环境变量

下面的 QT 环境变量参考原文档,由于我还没移植 tslib,所以只添加了 QT 的基本环境变量,不包括触摸屏相关配置,

在这里插入图片描述

#QT 基本配置
export QT_ROOT=/opt/qt5.15.2
export TSLIB_CONSOLEDEVICE=none
export TSLIB_FBDEVICE=/dev/fb0
export LD_LIBRARY_PATH=/lib:/usr/lib:/usr/local/lib:$QT_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

将 rootfs 打包成镜像

移植完 QT 后,根文件系统已经由 64M 变为 719M,然后按照下面的步骤制作 rootfs.ext4,

在这里插入图片描述

将 rootfs.ext4 挂载到 rootfs/,然后将根文件系统的所有文件拷贝到 rootfs/,取消挂载后,将 roofs.ext4 复制成 rootfs.img,

在这里插入图片描述

最后,通过相关工具将 rootfs.img 烧录到开发板上。

测试 QT 库

这里我用 QT 的一个官方 demo 做测试,在虚拟机的 Qt Creator 软件上编译出一个可执行程序,然后拷贝到开发板上,

运行该程序,没有报缺库的错误,所以我们移植的 QT 库是没问题的,

在这里插入图片描述

程序虽然运行了,但却看不到字体,

在这里插入图片描述

原来是环境变量的配置出了问题,我并没有把字库文件放到 QT 库目录,而是放到了系统库目录,所以需要修改 QT_QPA_FONTDIR 环境变量值,

在这里插入图片描述

重启或者执行 source /etc/profile 后,再次运行 charactermap 例程,此时已经能够正常显示字体。

在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_43772810/article/details/129141751