Raspberry Pi Qt cross-compile

Aus Nicki Wiki
Zur Navigation springen Zur Suche springen

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

Raspberry Pi mount image

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

Arbeitsverzeichnis anlegen:

sudo mkdir /opt/qt5.15.2/build
sudo mkdir /opt/qt5.15.2
cd /opt/qt5.15.2

RPI tools

Download RPI tools:

git clone https://github.com/raspberrypi/tools

Pfad:

/opt/qt5.15.2/tools

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

Pfad:

/opt/qt5.15.2/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/qt5.15.2]

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/qt5.15.2/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/qt5.15.2
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/qt5.15.2/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

Website 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