Raspberry Pi Qt cross-compile
Raspberry Pi Qt cross-compile
Anleitung Cross-Compiling von Qt auf dem Raspberry PI 4 (RPI4) und ComputeModul 4 (CM4).
Eigenheiten beim RPI4 oder CM4 sind gekennzeichnet mit [RPI4] oder [CM4].
Vorbereitung RPI
Download letztes raspian-lite:
wget https://downloads.raspberrypi.org/raspios_lite_armhf_latest
[CM4] Bevor das raspian auf dem CM4 installiert wird, muss USB und/oder SSH aktiviert werden, um überhaupt Zugriff auf das CM4 zu bekommen.
- 1. Image mounten: Linux - ISO-Image bearbeiten
- 2. SSH und USB aktivieren: Raspberry Pi CM4
Image auf SD-Card installieren:
dd if=raspbian.img of=/dev/sdb bs=1M #raspbian.img -> SD-Card dd if=/dev/sdb of=raspbian.img bs=1M #SD-Card -> raspbian.img sync #leeren Zwischenspeicher BS
RPI starten, Dateisystem erweitern und Grafikspeicher erhöhen:
sudo raspi-config #expand filesystem and change the GPU memory to 128 MB sudo rpi-update reboot
Installation Bibliotheken:
sudo vim /etc/apt/sources.list #uncomment the deb-src line 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
Zielverzeichnis anlegen:
sudo mkdir /usr/local/qt5.15 sudo chown pi:pi /usr/local/qt5.15
Zugriff RPI Datein
Variante 1: Netzwerk (langsam)
Der RPI muss per ssh erreichbar sein.
Variante 2: mount image (schnell)
Image von SD-Karte ziehen:
sudo mkdir /mnt/rasp-pi-rootfs dd if=/dev/sdb of=raspbian.img bs=1M fdisk -l raspian.img sudo mount -o loop,offset=62914560 raspian.img /mnt/rasp-pi-rootfs #Partition 2: 512 * 122880 = 62914560
Variante 3: mount SD-Card (schnell)
Das mounten der SD-Karte erfolgt in den meisten Linux-Distributionen automatisch. Ansonsten:
sudo mount /dev/sdb2 /mnt/rasp-pi-rootfs
Cross-Compile Toolchain
Arbeitsverzeichnis und Tools
Arbeitsverzeichnis anlegen und nötige Tools installieren:
sudo mkdir /opt/qt5.15.2 /opt/qt5.15.2/build /opt/qt5.15.2/tools cd /opt/qt5.15.2 sudo apt install build-essential
sysroot
Erstellen des sysroot Verzeichniss-Struktur und synchronisation mit raspian-image sysroot verzeichniss:
mkdir sysroot sysroot/usr sysroot/opt rsync -avz /mnt/rasp-pi-rootfs/lib sysroot rsync -avz /mnt/rasp-pi-rootfs/usr/include sysroot/usr rsync -avz /mnt/rasp-pi-rootfs/usr/lib sysroot/usr rsync -avz /mnt/rasp-pi-rootfs/opt/vc sysroot/opt
Symlinks
Symlinks relativ anpassen:
wget https://raw.githubusercontent.com/Kukkimonsuta/rpi-buildqt/master/scripts/utils/sysroot-relativelinks.py chmod +x sysroot-relativelinks.py ./sysroot-relativelinks.py sysroot
Qt Resourcen
Download Qt Resourcen [Pfad: /opt/qt5.15.2]
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 Datei für den Compiler modifizieren
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
Cross-Compiler
Download Linaro v7.4.1:
cd /opt/qt5.15.2/tools wget https://releases.linaro.org/components/toolchain/binaries/latest-7/arm-linux-gnueabihf/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz tar -xvf gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz
Qt für RPI kompilieren:
cd build ../qt-everywhere-src-5.15.2/configure -release -opengl es2 -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=/opt/qt5.15.2/tools/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf- -sysroot /opt/qt5.15.2/sysroot -prefix /usr/local/qt5.15 -extprefix /opt/qt5.15.2/qt5.15 -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -make libs -pkg-config -no-use-gold-linker -v -recheck make make install
| Option | Erklärung |
|---|---|
-prefix /usr/local/qt5.15'
|
Qt Version für Qt-Creator |
-device linux-rasp-pi4-v3d-g++
|
RPI4:linux-rasp-pi4-v3d-g++
Optionen für das Ziel-Gerät |
Kompilierte Dateien auf RPI kopieren:
cd /opt/qt5.15.2 rsync -avz qt5pi /mnt/rasp-pi-rootfs/usr/local
Update RPI
RPI starten und Bibliotheken updaten:
echo /usr/local/qt5pi/lib | sudo tee /etc/ld.so.conf.d/qt5pi.conf sudo ldconfig
Fix EGL/GLES Bibliotheken
sudo mv /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0_backup sudo mv /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0_backup sudo ln -s /opt/vc/lib/libEGL.so /usr/lib/arm-linux-gnueabihf/libEGL.so.1.0.0 sudo ln -s /opt/vc/lib/libGLESv2.so /usr/lib/arm-linux-gnueabihf/libGLESv2.so.2.0.0 sudo ln -s /opt/vc/lib/libbrcmEGL.so /opt/vc/lib/libEGL.so sudo ln -s /opt/vc/lib/libbrcmGLESv2.so /opt/vc/lib/libGLESv2.so
Fehlende symbolische Links ergänzen:
sudo ln -s /opt/vc/lib/libEGL.so /opt/vc/lib/libEGL.so.1 sudo ln -s /opt/vc/lib/libGLESv2.so /opt/vc/lib/libGLESv2.so.2
QT Creator
Geräte
Einstellungen ⇒ Geräte ⇒ Hinzufügen ⇒ IP, user, pass ⇒ Finish
Compiler
Einstellungen ⇒ Kits ⇒ Compilers ⇒ Hinzufügen ⇒ GCC ⇒ C und C++
Compiler path C: ~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-gcc Compiler path C++: ~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++
Debugger
Einstellungen ⇒ Debuggers ⇒ Hinzufügen
/opt/qt5.15.2/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gdb
Qt Versionen
Einstellungen ⇒ Kits ⇒ Qt Versionen ⇒ Hinzufügen
qmake location: /opt/qt5.12.4/sysroot/usr/local/qt5pi/bin/qmake
Kits
Einstellungen ⇒ Build & Run ⇒ Kits ⇒ Hinzufügen
Generic Linux Device Device: the one we just created Sysroot: ~/raspi/sysroot Compiler: the one we just created Debugger: the one we just created Qt version: the one we saw under Qt Versions Qt mkspec: leave empty
bcm2835
Download
Auf RPI download bcm2835
wget http://www.airspayce.com/mikem/bcm2835/bcm2835-1.69.tar.gz
Installation
tar zxvf bcm2835-1.69.tar.gz cd bcm2835-1.69 ./configure make sudo make check sudo make install
Nach Anpassungen an den .h und .c Datein:
cd bcm2835-1.69 make clean ./configure make sudo make check sudo make install
Quellen
Raspberry Pi Beginners Guide
RaspberryPi2EGLFS
Cross-Compile QT 5.15.2 / Raspberry Pi 4