Qt 5.15 cross compile para sa Raspberry Compute Module 4 sa Ubuntu 20 LTS

Panimula

Ito ay isang gabay para sa cross compiling Qt 5.15.2 para sa Raspberry Pi 4 at pag install nito sa Compute Module 4. Ito ay isang update sa aking blog post Qt sa Raspberry Pi 4, na may pagkakaiba na oras na ito ako ay gumagamit ng Raspberry Pi OS Lite (download dito: https://www.raspberrypi.org/software/operating-systems/), Qt bersyon 5.15.2 at Ubuntu 20 LTS bilang isang cross compile computer sa isang virtual machine.

Mga Pinagmulan

Bukod sa dati kong blog post (tingnan sa itaas), ginamit ko rin ang mga sumusunod na sources:

Raspberry Pi OS Lite

Mag install ng Raspberry Pi OS Lite sa isang Raspberry Pi 4 o sa isang Raspberry Compute Module 4 tulad ng inilarawan sa aking blog post Pag install ng Raspberry Pi OS sa Raspberry Compute Module 4 .

Qt 5.15.2 sa Ubuntu 20 LTS

Matapos mai install ang Raspberry Pi OS sa Compute Module at ang mga bota ng Raspberry pabalik mula sa memorya ng eMMC, oras na upang mai install ang kinakailangang software sa Raspberry at sa makina ng Ubuntu.

Raspberry Compute Module 4

Ang mga hakbang na ipinapakita sa ibaba ay dapat ding gumana sa isang "normal" Raspberry Pi 4.

Pagkatapos lumipat sa Pi 4, buksan ang menu ng pagsasaayos.

sudo raspi-config
Para sa aming configuration kailangan namin ang "SSH" at "GL (Fake KMS)". Tingnan ang sumusunod na dalawang screenshot.
SSH Konfiguration

FKMS Konfiguration

- Pagkatapos ay magdagdag ng mga mapagkukunan ng pag-unlad sa /etc/apt/sources.list. Upang gawin ito, idagdag ang sumusunod na linya:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Pagkatapos ay i-update ang system sa sumusunod na mga utos:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- At pagkatapos ay i-install ang kinakailangang Qt at pag-unlad ng mga pakete:
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
- Pagkatapos ay lumikha ng isang direktoryo para sa RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Ubuntu Machine

Kailangan ang PC o virtual machine na may Ubuntu 20 LTS na naka install.
Una sa lahat, dalhin Ubuntu up to date at i install ang ilang mga kinakailangang aklatan:

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

Pagkatapos - kung hindi pa magagamit - lumikha ng isang ssh-key at i-install ito sa Raspberry, upang ang isang password prompt ay hindi lilitaw sa bawat rsync at username at password ay may upang ipasok. May sapat na mga tagubilin sa Internet, kaya hindi ko na ipagkakaloob ang detalyadong paglalarawan dito.

Lumikha ng istraktura ng direktoryo para sa mga aklatan ng Raspberry

Para sa mga kinakailangang file, nilikha ko ang sumusunod na istraktura ng direktoryo sa ilalim ng Mga Dokumento/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

Download Qt Resources

I download namin ang mga mapagkukunan ng Qt at i unpack ang mga ito sa direktoryo ng 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

Ngayon kailangan nating baguhin nang kaunti ang mkspec file upang magamit natin ito sa ating compiler. Upang gawin ito, patakbuhin ang mga sumusunod na utos:

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

Download Kumpulan ng Krus

Bilang isang cross compiler gumagamit ako ng isang bersyon ng Linaro 7.4.1. Upang gawin ito, baguhin sa direktoryo ng mga tool at i download at i unpack ang compiler:

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 ng mga Aklatan ng Raspberry

Ngayon kailangan namin ang mga orihinal na aklatan mula sa Raspberry Pi, na kinokopya namin sa mga direktoryo ng Ubuntu na may rsync:

cd ..
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/lib sysroot/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/usr/include sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/usr/lib sysroot/usr/
rsync -avz --rsync-path="sudo rsync" --delete [email protected]:/opt/vc sysroot/opt/

Ngayon ay kailangan nating linisin ang mga simbolikong link na kinopya ng rsync upang ituro nila ang tamang orihinal na mga file. Mayroong isang maliit na script ng Python para sa pag download:

wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py

Pagkatapos ay gawin ang script executable at tawagan ito:

sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot

Pagbubuo ng Qt

Ngayon maaari naming i configure ang build at pagkatapos ay i compile ito.

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

Pagkatapos ng ilang minuto, ang script ay dapat na tapos na at ang mga sumusunod na kondisyon ng EGLFS ay dapat itakda o hindi itakda.

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

Kung hindi ito ang kaso o kung ang anumang iba pang mga mensahe ng error ay lumitaw, mangyaring mag imbestiga at maglinis. Kung nais mong patakbuhin muli ang script ng pagsasaayos na may mga nagbago na variable, mangyaring tanggalin ang mga nilalaman ng direktoryo ng build bago.
Kung OK ang lahat, pagkatapos ay patakbuhin ang gumawa at gumawa ng mga utos sa pag install.

make -j4
make install

Mag install ng mga natipon na file sa Raspberry

Kung matagumpay ang pagtitipon, ang mga nakalap na file - matatagpuan ang mga ito sa qt5.15 directory - ay maaaring kopyahin sa Raspberry Pi. Muli, ginagawa namin ito gamit ang rsync command.

rsync -avz --rsync-path="sudo rsync" qt5.15 [email protected]:/usr/local/

Pag configure QtCreator

Sa susunod na blog post ay ipapaliwanag ko kung paano gamitin ang QtCreator para magamit sa mga natipon na library.