Qt 5.15 kompilasi silang untuk Raspberry Compute Module 4 di Ubuntu 20 LTS

Perkenalan

Ini adalah panduan untuk kompilasi silang Qt 5.15.2 untuk Raspberry Pi 4 dan menginstalnya di Compute Module 4. Ini adalah pembaruan untuk posting blog saya Qt di Raspberry Pi 4, dengan perbedaan bahwa kali ini saya menggunakan Raspberry Pi OS Lite (unduh di sini: https://www.raspberrypi.org/software/operating-systems/), Qt versi 5.15.2 dan Ubuntu 20 LTS sebagai komputer kompilasi silang di mesin virtual.

Sumber

Selain posting blog lama saya (lihat di atas), saya juga menggunakan sumber-sumber berikut:

Raspberry Pi OS Lite

Instal Raspberry Pi OS Lite pada Raspberry Pi 4 atau pada Raspberry Compute Module 4 seperti yang dijelaskan dalam posting blog saya Menginstal Raspberry Pi OS pada Raspberry Compute Module 4 .

Qt 5.15.2 pada Ubuntu 20 LTS

Setelah OS Raspberry Pi diinstal pada Compute Module dan Raspberry melakukan booting kembali dari memori eMMC, saatnya untuk menginstal perangkat lunak yang diperlukan pada Raspberry dan pada mesin Ubuntu.

Modul Komputasi Raspberry 4

Langkah-langkah yang ditunjukkan di bawah ini juga harus bekerja pada Raspberry Pi 4 "normal".

Setelah menyalakan Pi 4, buka menu konfigurasi.

sudo raspi-config
Untuk konfigurasi kami, kami membutuhkan "SSH" dan "GL (KMS Palsu)". Lihat dua tangkapan layar berikut.
SSH Konfiguration

FKMS Konfiguration

- Kemudian tambahkan sumber pengembangan ke /etc/apt/sources.list. Untuk melakukan ini, tambahkan baris berikut:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Kemudian perbarui sistem dengan perintah berikut:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- Dan kemudian instal Qt dan paket pengembangan yang diperlukan:
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
- Kemudian buat direktori untuk RaspberryQt:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

Mesin Ubuntu

Diperlukan PC atau mesin virtual dengan Ubuntu 20 LTS terinstal.
Pertama-tama, bawa Ubuntu up to date dan instal beberapa pustaka yang diperlukan:

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

Kemudian - jika belum tersedia - buat ssh-key dan instal di Raspberry, sehingga prompt kata sandi tidak muncul dengan setiap rsync dan nama pengguna dan kata sandi harus dimasukkan. Ada cukup banyak instruksi di Internet, jadi saya akan menyisihkan deskripsi detailnya di sini.

Buat struktur direktori untuk perpustakaan Raspberry

Untuk file yang diperlukan, saya membuat struktur direktori berikut di bawah Documents/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

Unduh Sumber Daya Qt

Kami mengunduh sumber daya Qt dan membongkarnya di direktori 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

Sekarang kita perlu memodifikasi file mkspec sedikit sehingga kita dapat menggunakannya dengan kompiler kita. Untuk melakukannya, jalankan perintah berikut:

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

Unduh Cross-Compiler

Sebagai kompiler silang saya menggunakan Linaro versi 7.4.1. Untuk melakukan ini, ubah ke direktori alat dan unduh dan bongkar kompiler:

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 Perpustakaan Raspberry

Sekarang kita membutuhkan pustaka asli dari Raspberry Pi, yang kita salin ke direktori Ubuntu dengan 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/

Sekarang kita harus membersihkan tautan simbolis yang disalin oleh rsync sehingga mengarah ke file asli yang benar. Ada skrip Python kecil untuk diunduh:

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

Kemudian buat skrip dapat dieksekusi dan beri nama:

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

Kompilasi Qt

Sekarang kita dapat mengkonfigurasi build dan kemudian mengkompilasinya.

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

Setelah beberapa menit, skrip harus selesai dan kondisi EGLFS berikut harus diatur atau tidak diatur.

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

Jika ini tidak terjadi atau jika ada pesan kesalahan lain yang muncul, harap selidiki dan bersihkan. Jika Anda ingin menjalankan skrip konfigurasi lagi dengan variabel yang diubah, hapus konten direktori build terlebih dahulu.
Jika semuanya baik-baik saja, jalankan perintah make and make install.

make -j4
make install

Instal file yang dikompilasi di Raspberry

Jika kompilasi berhasil, file yang dikompilasi - mereka berada di direktori qt5.15 - dapat disalin ke Raspberry Pi. Sekali lagi, kita melakukan ini menggunakan perintah rsync.

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

Konfigurasi QtCreator

Dalam posting blog berikutnya saya akan menjelaskan cara menggunakan QtCreator untuk digunakan dengan perpustakaan yang dikompilasi.