介绍
这是为树莓派 4 交叉编译 Qt 5.15.2 并将其安装在计算模块 4 上的指南。 这是我在Raspberry Pi 4上的博客文章Qt的更新,不同的是这次我使用Raspberry Pi OS Lite(在此处下载:https://www.raspberrypi.org/software/operating-systems/),Qt版本5.15.2和Ubuntu 20 LTS作为虚拟机中的交叉编译计算机。
来源
除了我的旧博客文章(见上文)之外,我还使用了以下来源:
请注意
本文已有更新,包含Raspberry Pi 、Qt6 和Ubuntu 22.04 LTS 的交叉编译。如果您需要更新版本,请点击此链接。
树莓派操作系统精简版
在树莓派 4 或树莓计算模块 4 上安装 Raspberry Pi OS Lite,如我的博客文章 在树莓计算模块 4 上安装 Raspberry Pi OS 中所述。
Qt 5.15.2 on Ubuntu 20 LTS
在计算模块上安装了Raspberry Pi OS并且Raspberry从eMMC内存启动后,是时候在Raspberry和Ubuntu机器上安装所需的软件了。
树莓计算模块 4
下面显示的步骤也应该适用于“普通”的树莓派 4。
打开Pi 4后,打开配置菜单。
sudo raspi-config
对于我们的配置,我们需要“SSH”和“GL(假KMS)”。请参阅以下两个屏幕截图。- 然后将开发源代码添加到 /etc/apt/sources.list。为此,请添加以下行:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- 然后使用以下命令更新系统:sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- 然后安装所需的Qt和开发包:sudo apt-get build-dep qt5-qmake
sudo apt-get build-dep libqt5gui5
sudo apt-get build-dep libqt5webengine-data
sudo apt-get build-dep libqt5webkit5
sudo apt-get install libudev-dev libinput-dev libts-dev libxcb-xinerama0-dev libxcb-xinerama0 gdbserver
- 然后为RaspberryQt创建一个目录:sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Ubuntu Machine
需要安装了 Ubuntu 20 LTS 的 PC 或虚拟机。 首先,使 Ubuntu 保持最新并安装一些必需的库:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc git bison python gperf pkg-config gdb-multiarch
sudo apt install build-essential
然后 - 如果尚不可用 - 创建一个 ssh 密钥并将其安装在 Raspberry 上,这样就不会在每个 rsync 时出现密码提示,并且必须输入用户名和密码。互联网上有足够的说明,所以我在这里就不做详细的描述了。
为 Raspberry 库创建目录结构
对于所需的文件,我在 Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4 下创建以下目录结构:
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/build
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/tools
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/usr
sudo mkdir ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot/opt
sudo chown -R 1000:1000 ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
cd ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4
下载Qt资源
我们下载Qt资源并将它们解压缩到raspberrypi4目录中:
sudo wget http://download.qt.io/archive/qt/5.15/5.15.2/single/qt-everywhere-src-5.15.2.tar.xz
sudo tar xfv qt-everywhere-src-5.15.2.tar.xz
现在我们需要稍微修改一下 mkspec 文件,以便我们可以在编译器中使用它。为此,请运行以下命令:
cp -R qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qt-everywhere-src-5.15.2/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf
下载交叉编译器
作为交叉编译器,我使用 Linaro 版本 7.4.1。为此,请切换到 tools 目录并下载并解压缩编译器:
cd tools
sudo wget https://releases.linaro.org/components/toolchain/binaries/7.4-2019.02/arm-linux-gnueabihf/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
tar xfv gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf.tar.xz
树莓库的同步
现在我们需要来自 Raspberry Pi 的原始库,我们使用 rsync 将其复制到 Ubuntu 目录中:
cd ..
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/lib sysroot/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/usr/include sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/usr/lib sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete pi@192.168.1.7:/opt/vc sysroot/opt/
现在我们必须清理由 rsync 复制的符号链接,以便它们指向正确的原始文件。有一个小的Python脚本可供下载:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
然后使脚本可执行并调用它:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
编译 Qt
现在我们可以配置构建,然后编译它。
cd build
../qt-everywhere-src-5.15.2/configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/tools/gcc-linaro-7.4.1-2019.02-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/sysroot -prefix /usr/local/qt5.15 -extprefix ~/Documents/Qt-CrossCompile-RaspberryPi/raspberrypi4/qt5.15 -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck
几分钟后,脚本应完成,并且应设置或不设置以下 EGLFS 条件。
QPA backends:
DirectFB ............................... no
EGLFS .................................. yes [SHOULD BE YES]
EGLFS details:
EGLFS OpenWFD ........................ no
EGLFS i.Mx6 .......................... no
EGLFS i.Mx6 Wayland .................. no
EGLFS RCAR ........................... no
EGLFS EGLDevice ...................... yes [SHOULD BE YES]
EGLFS GBM ............................ yes
EGLFS VSP2 ........................... no
EGLFS Mali ........................... no
EGLFS Raspberry Pi ................... no [SHOULD BE NO]
EGLFS X11 ............................ yes
LinuxFB ................................ yes
VNC .................................... yes
如果不是这种情况或出现任何其他错误消息,请进行调查并清理。如果要使用更改的变量再次运行配置脚本,请事先删除构建目录的内容。 如果一切正常,则运行 make 和 make 安装命令。
make -j4
make install
在树莓上安装编译文件
如果编译成功,编译后的文件(位于qt5.15目录中)可以复制到树莓派。同样,我们使用 rsync 命令执行此操作。
rsync -avz --rsync-path="sudo rsync" qt5.15 pi@192.168.1.7:/usr/local/
配置 QtCreator
在下一篇 博文 中,我将解释如何使用QtCreator与编译库一起使用。