Wprowadzenie
Jest to przewodnik do kompilacji krzyżowej Qt 5.15.2 dla Raspberry Pi 4 i instalowania go na module obliczeniowym 4. Jest to aktualizacja mojego postu na blogu Qt na Raspberry Pi 4, z tą różnicą, że tym razem używam Raspberry Pi OS Lite (pobierz tutaj: https://www.raspberrypi.org/software/operating-systems/), Qt w wersji 5.15.2 i Ubuntu 20 LTS jako komputer do kompilacji krzyżowej w maszynie wirtualnej.
Źródła
Oprócz mojego starego wpisu na blogu (patrz wyżej), korzystałem również z następujących źródeł:
- Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Uwaga
Istnieje aktualizacja tego artykułu, która zawiera kompilację krzyżową dla Raspberry Pi, Qt6 i Ubuntu 22.04 LTS. Jeśli potrzebujesz nowszych wersji, skorzystaj z tego linku.
Raspberry Pi OS Lite
Zainstaluj Raspberry Pi OS Lite na Raspberry Pi 4 lub na Raspberry Compute Module 4, jak opisano w moim poście na blogu Instalowanie Raspberry Pi OS na Raspberry Compute Module 4 .
Qt 5.15.2 na Ubuntu 20 LTS
Po zainstalowaniu systemu operacyjnego Raspberry Pi na module obliczeniowym i uruchomieniu Raspberry z pamięci eMMC, nadszedł czas, aby zainstalować wymagane oprogramowanie na Raspberry i na komputerze Ubuntu.
Raspberry Compute Module 4
Kroki pokazane poniżej powinny również działać na "normalnym" Raspberry Pi 4.
Po włączeniu Pi 4 otwórz menu konfiguracji.
sudo raspi-config
Do naszej konfiguracji potrzebujemy "SSH" i "GL (Fake KMS)". Zobacz poniższe dwa zrzuty ekranu.- Następnie dodaj źródła programistyczne do /etc/apt/sources.list. Aby to zrobić, dodaj następujący wiersz:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Następnie zaktualizuj system za pomocą następujących poleceń:sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- A następnie zainstaluj wymagane pakiety Qt i rozwojowe: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
- Następnie utwórz katalog dla RaspberryQt:sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Maszyna Ubuntu
Wymagany jest komputer lub maszyna wirtualna z zainstalowanym systemem Ubuntu 20 LTS.
Przede wszystkim zaktualizuj Ubuntu i zainstaluj wymagane biblioteki:
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
Następnie - jeśli nie jest jeszcze dostępny - utwórz klucz ssh i zainstaluj go na Raspberry, aby nie pojawiał się monit o hasło przy każdym rsync i trzeba wprowadzić nazwę użytkownika i hasło. W Internecie jest wystarczająco dużo instrukcji, więc oszczędzę sobie szczegółowego opisu tutaj.
Utwórz strukturę katalogów dla bibliotek Raspberry
Dla wymaganych plików tworzę następującą strukturę katalogów w 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
Pobierz zasoby Qt
Pobieramy zasoby Qt i rozpakowujemy je w katalogu 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
Teraz musimy nieco zmodyfikować plik mkspec, abyśmy mogli go używać z naszym kompilatorem. Aby to zrobić, uruchom następujące polecenia:
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
Pobierz Cross-Compiler
Jako kompilator krzyżowy używam Linaro w wersji 7.4.1. Aby to zrobić, przejdź do katalogu narzędzi i pobierz i rozpakuj kompilator:
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 bibliotek malinowych
Teraz potrzebujemy oryginalnych bibliotek z Raspberry Pi, które kopiujemy do katalogów Ubuntu za pomocą 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/
Teraz musimy wyczyścić linki symboliczne, które zostały skopiowane przez rsync, aby wskazywały na poprawne oryginalne pliki. Istnieje mały skrypt Pythona do pobrania:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
Następnie ustaw skrypt jako wykonywalny i nazwij go:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Kompilowanie Qt
Teraz możemy skonfigurować kompilację, a następnie ją skompilować.
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
Po kilku minutach skrypt powinien zostać zakończony i następujące warunki EGLFS powinny być ustawione lub nie.
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
Jeśli tak nie jest lub jeśli pojawią się inne komunikaty o błędach, sprawdź i oczyść. Jeśli chcesz ponownie uruchomić skrypt konfiguracyjny ze zmienionymi zmiennymi, usuń wcześniej zawartość katalogu kompilacji.
Jeśli wszystko jest w porządku, uruchom polecenia make i make install.
make -j4
make install
Zainstaluj skompilowane pliki na Raspberry
Jeśli kompilacja zakończy się pomyślnie, skompilowane pliki - znajdują się w katalogu qt5.15 - można skopiować do Raspberry Pi. Ponownie robimy to za pomocą polecenia rsync.
rsync -avz --rsync-path="sudo rsync" qt5.15 pi@192.168.1.7:/usr/local/
Konfiguracja QtCreator
W następnym wpisie na blogu wyjaśnię, jak używać QtCreator do użytku ze skompilowanymi bibliotekami.