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)
Variante 2: mount image (schnell)
Image von SD-Karte ziehen oder
sudo mkdir /mnt/rasp-pi-rootfs
Partition 2: 512 * 122880 = 62914560
fdisk -l raspian.img sudo mount -o loop,offset=62914560 raspian.img /mnt/rasp-pi-rootfs
Variante 3: mount SD-Card (schnell)
SD-Karte direkt mounten
Cross-Compile Toolchain
Arbeitsverzeichnis
Arbeitsverzeichnis anlegen:
sudo mkdir /opt/qtVERSION cd /opt/qtVERSION
RPI tools
Download RPI tools:
git clone https://github.com/raspberrypi/tools
Pfad:
/opt/qtVERSION/tools
sysroot
Erstellen des sysroot verzeichnisses und synchronisation mit raspian-image sysroot verzeichnisses:
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
Pfad:
/opt/qtVERSION/sysroot
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
qtbase
qtbase für RPI bauen. [Pfad: /opt/qtVERSION]
mkdir qt5build git clone git://code.qt.io/qt/qtbase.git -b <qt-version> cd qtbase
<rpi-version>
linux-rasp-pi-g++ for RPi, linux-rasp-pi2-g++ for RPi2 and linux-rasp-pi3-g++ for RPi3
Configuration: (Für höhere Qt versionen (als 5.9.1) hinzufügenen der option -no-use-gold-linker
./configure -release -opengl es2 -device <rpi-version> -device-option CROSS_COMPILE=~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf- -sysroot /opt/qtVERSION/sysroot -prefix /usr/local/qt5pi -opensource -confirm-license -make libs -no-use-gold-linker -v -skip wayland -skip qtscript -nomake tests -nomake examples make make install
buld säubern:
git clean -dfx
rsync qt5build to mount
cd /opt/qtVERSION rsync -avz qt5pi /mnt/rasp-pi-rootfs/usr/local
Update RPI
RPI starten und Bibliotheken updaten [auf RPI]:
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 Module
git clone git://code.qt.io/qt/<qt-module>.git -b <qt-version> cd <qt-module> /opt/qtVERSION/qt5/bin/qmake make make install rsync -avz qt5pi /mnt/rasp-pi-rootfs/usr/local
QT Creator
Geräte
Einstellungen -> Geräte -> Hinzufügen -> IP, user, pass -> Finish
Compiler
Einstellungen -> Compilers -> Hinzufügen -> GCC
Compiler path: ~/raspi/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian/bin/arm-linux-gnueabihf-g++
Debugger
Einstellungen -> Debuggers -> Hinzufügen
/opt/qtVERSION/tools/arm-bcm2708/gcc-linaro-arm-linux-gnueabihf-raspbian-x64/bin/arm-linux-gnueabihf-gdb
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
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