Qt na Raspberry Pi 4

Często do opracowywania powierzchni graficznych używany jest Qt. Qt zawiera biblioteki C++ do tworzenia graficznych interfejsów użytkownika, które można kompilować w różnych systemach operacyjnych.
Ponieważ kompilacja wymaga dużej mocy obliczeniowej, zaleca się przeprowadzenie programowania i kompilacji na komputerze hosta w przypadku procesorów o stosunkowo niskiej wydajności, a dopiero potem załadowanie gotowej aplikacji na komputer docelowy.
W Internecie znajduje się wiele instrukcji dotyczących tworzenia aplikacji Qt dla modeli Raspberry Pi 3 i Pi 4. Niestety nie mogłem znaleźć takich, które działałby bezbłędnie dla Raspberry Pi 4. Niniejsza instrukcja oparta jest na https://www.kampis-elektroecke.de/raspberry-pi/qt/ i zmodyfikowałem ją w niektórych miejscach, aby działała u mnie.
Wersja 5.14.1 jest używana dla Qt, używam Ubuntu 18 LTS jako komputera hosta do kompilacji krzyżowej, która jest zainstalowana w vmware.

Przygotowywanie Raspberry Pi 4

Do podstawowej instalacji potrzebny jest system operacyjny Raspbian na Pi 4. Użyłem „2020-02-13-raspbian-buster-lite.img”. Pliki do pobrania i instrukcje dotyczące tworzenia karty SD można znaleźć na stronie https://www.raspberrypi.org/downloads/raspbian/. Po włączeniu Pi 4 pojawia się menu konfiguracji, w którym możesz dokonać różnych ustawień (np. nazwa hosta, adres IP itp.). Do naszej konfiguracji potrzebujemy „SSH” i „GL (Fake KMS)”. Spójrz na dwa następujące zrzuty ekranu.

Konfiguracja SSH

Konfiguracja FKMS

  • Wprowadź źródła development w /etc/apt/sources.list. 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 po tym zainstaluj wymagane pakiety Qt i programistyczne:
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

Ważne: nie tworzyć lub zmieniać tak, jak jest to opisane w niektórych instrukcjach, symlinków dla bibliotek EGL i GLES. - Utwórz katalog dla RaspberryQt:

sudo mkdir /usr/local/RaspberryQt
sudo chown -R pi:pi /usr/local/RaspberryQt

Przygotowanie Ubuntu

  • Zaktualizuj oprogramowanie i zainstaluj dodatkowe pakiety:
sudo apt-get update
sudo apt-get upgrade
sudo apt-get install gcc git bison python gperf pkg-config gdb-multiarch
  • Wygeneruj klucz ssh dla Raspberry i zainstaluj go na Raspberry:
ssh-keygen -t rsa -C [email protected] -P "" -f ~/.ssh/rpi_root_id_rsa
ssh-keygen -t rsa -C [email protected] -P "" -f ~/.ssh/rpi_pi_id_rsa
cat ~/.ssh/rpi_root_id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys && chmod 640 .ssh/authorized_keys'
cat ~/.ssh/rpi_pi_id_rsa.pub | ssh [email protected] 'cat >> .ssh/authorized_keys && chmod 640 .ssh/authorized_keys'
  • Pobierz kompilator gcc, skrypt Qt i skrypt symlink:
mkdir /opt/RaspberryQt
cd /opt/RaspberryQt
wget http://download.qt.io/archive/qt/5.14/5.14.1/single/qt-everywhere-src-5.14.1.tar.xz
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
  • Pliki są kompilatorem krzyżowym dla Raspberry Pi, używanej wersji Qt (tutaj 5.14.1) oraz skrypt Pythona dla linków symbolicznych zastępować pliki względnymi linkami (będą potrzebne później).
  • Pobierz kompilator gcc „rpi-gcc-8.3.0_linux.tar.xz” z https://bugfreeblog.page.link/rasplinuxgcc830 i wypakuj go do katalogu narzędzi
  • Następnie wyodrębniona zostanie wersja Qt i nazwa używanego Kompilatory (tutaj arm-linux-gnueabihf) w pliku konfiguracyjnym Qt dostosowane.
tar xf qt-everywhere-src-5.14.1.tar.xz
cp -R qt-everywhere-src-5.14.1/qtbase/mkspecs/linux-arm-gnueabi-g++ qt-everywhere-src-5.14.1/qtbase/mkspecs/linux-arm-gnueabihf-g++
sed -i -e 's/arm-linux-gnueabi-/arm-linux-gnueabihf-/g' qt-everywhere-src-5.14.1/qtbase/mkspecs/linux-arm-gnueabihf-g++/qmake.conf
  • Utwórz katalogi robocze:
sudo mkdir /opt/RaspberryQt
sudo mkdir /opt/RaspberryQt/build
sudo mkdir /opt/RaspberryQt/sysroot
sudo mkdir /opt/RaspberryQt/sysroot/usr
sudo mkdir /opt/RaspberryQt/sysroot/opt
sudo chown -R 1000:1000 /opt/RaspberryQt
  • Teraz wymagane są biblioteki używane przez cel (tutaj Raspberry Pi) Pi. Można je pobrać z Raspberry Pi przy użyciu rsync.
rsync -avz [email protected]:/lib sysroot
rsync -avz [email protected]:/usr/include sysroot/usr
rsync -avz [email protected]:/usr/lib sysroot/usr
rsync -avz [email protected]:/opt/vc sysroot/opt
  • Przed użyciem plików, linki symboliczne, które nadal wskazują na system plików Raspberry Pi, muszą zostać zastąpione odnośnikami z nowego katalogu sysroot. Odbywa się to za pomocą pobranego skryptu Python:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
  • Na końcu konfiguruje się Qt:
cd /opt/RaspberryQt/build
../qt-everywhere-src-5.14.1/configure -release -opengl es2  -eglfs -device linux-rasp-pi4-v3d-g++ -device-option CROSS_COMPILE=/opt/RaspberryQt/tools/rpi-gcc-8.3.0/bin/arm-linux-gnueabihf- -sysroot /opt/RaspberryQt/sysroot -prefix /usr/local/RaspberryQt -opensource -confirm-license -skip qtscript -skip qtwayland -skip qtwebengine -nomake tests -nomake examples -make libs -pkg-config -no-use-gold-linker -v -recheck
make -j4
make install
  • Skompilowane biblioteki Qt należy następnie skopiować do Raspberry Pi przy użyciu rsync:
cd /opt/RaspberryQt
rsync -avz sysroot/usr/local/RaspberryQt [email protected]:/usr/local

Instalacja Qt Creator

Najlepszym sposobem na tworzenie aplikacji Qt jest użycie Qt Creator. Do instalacji proszę pobrać i uruchomić pliki instalacyjne online z witryny Qt.

Zaktualizowana wersja

Ten wpis na blogu został zaktualizowany w serii 3 postów: