Знакомство
Это руководство по кросс-компиляции Qt 5.15.2 для Raspberry Pi 4 и его установке на Compute Module 4. Это обновление моего сообщения в блоге Qt на Raspberry Pi 4, с той разницей, что на этот раз я использую Raspberry Pi OS Lite (скачать здесь: https://www.raspberrypi.org/software/operating-systems/), Qt версии 5.15.2 и Ubuntu 20 LTS в качестве компьютера кросс-компиляции в виртуальной машине.
Источники
В дополнение к моему старому сообщению в блоге (см. Выше) я также использовал следующие источники:
- Увинду Виджесинге: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Внимание
Вышло обновление этой статьи, содержащее кросс-компиляцию для Raspberry Pi, Qt6 и Ubuntu 22.04 LTS. Если вам нужны более новые версии, перейдите по этой ссылке.
Raspberry Pi OS Lite
Установите Raspberry Pi OS Lite на Raspberry Pi 4 или Raspberry Compute Module 4, как описано в моем блоге Установка ОС Raspberry Pi на Raspberry Compute Module 4 .
Qt 5.15.2 на Ubuntu 20 LTS
После того, как ОС Raspberry Pi установлена на вычислительном модуле и Raspberry загрузится из памяти eMMC, пришло время установить необходимое программное обеспечение на Raspberry и на машине Ubuntu.
Вычислительный модуль Raspberry 4
Шаги, показанные ниже, также должны работать на «обычном» Raspberry Pi 4.
После включения Pi 4 откройте меню конфигурации.
sudo raspi-config
Для нашей конфигурации нам понадобятся «SSH» и «GL (Fake 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
Требуется ПК или виртуальная машина с установленной Ubuntu 20 LTS.
Прежде всего, обновите 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
rsync библиотек Raspberry
Теперь нам понадобятся оригинальные библиотеки от Raspberry Pi, которые мы копируем в каталоги Ubuntu с помощью rsync:
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 install.
make -j4
make install
Установите скомпилированные файлы на Raspberry
Если компиляция прошла успешно, скомпилированные файлы - они находятся в каталоге qt5.15 - могут быть скопированы на Raspberry Pi. Опять же, мы делаем это с помощью команды rsync.
rsync -avz --rsync-path="sudo rsync" qt5.15 pi@192.168.1.7:/usr/local/
Конфигурация QtCreator
В следующем сообщении блога я объясню, как использовать QtCreator для использования со скомпилированными библиотеками.