Qt 5.15 cross compile برای Raspberry Compute Module 4 در اوبونتو 20 LTS

مقدمه

این یک راهنمای برای کامپایل متقابل Qt 5.15.2 برای Raspberry Pi 4 و نصب ان در Compute Module 4 است. این به روز رسانی به وبلاگ من Qt در Raspberry Pi 4 است، با این تفاوت که این بار من با استفاده از Raspberry Pi OS Lite (اینجا دانلود کنید: https://www.raspberrypi.org/software/operating-systems/)، نسخه Qt 5.15.2 و اوبونتو 20 LTS به عنوان یک کامپیوتر کامپایل متقابل در یک ماشین مجازی.

منابع

علاوه بر وبلاگ قدیمی من (بالا را ببینید)، من همچنین از منابع زیر استفاده کردم:
توسط Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4

سیستم عامل Raspberry Pi Lite

Raspberry Pi OS Lite را بر روی Raspberry Pi 4 یا Raspberry Compute Module 4 نصب کنید، همانطور که در وبلاگ من توضیح داده شده است نصب Raspberry Pi OS در Raspberry Compute Module 4 .

Qt 5.15.2 در اوبونتو 20 LTS

پس از نصب سیستم عامل Raspberry Pi بر روی ماژول Compute و چکمه های Raspberry از حافظه eMMC، وقت ان است که نرم افزار مورد نیاز را بر روی Raspberry و دستگاه اوبونتو نصب کنید.

ماژول محاسبه تمشک 4

مراحل نشان داده شده در زیر نیز باید بر روی Raspberry Pi 4 "عادی" کار کنند.

پس از روشن کردن Pi 4، منوی پیکربندی را باز کنید.

sudo raspi-config
برای پیکربندی ما نیاز به "SSH" و "GL (KMS جعلی)". دو تصویر زیر را ببینید.
SSH Konfiguration

FKMS Konfiguration

- سپس منابع توسعه را به /etc/apt/sources.list اضافه کنید. برای انجام این کار، خط زیر را اضافه کنید:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- سپس سیستم را با دستورات زیر به روز رسانی کنید:
sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- و سپس Qt مورد نیاز و بسته های توسعه را نصب کنید:
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
- سپس یک دایرکتوری برای RaspberryQt ایجاد کنید:
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

ماشین اوبونتو

یک کامپیوتر یا ماشین مجازی با نصب اوبونتو 20 LTS مورد نیاز است.
اول از همه، اوبونتو را به روز کنید و برخی از کتابخانه های مورد نیاز را نصب کنید:

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

سپس - اگر قبلا در دسترس نیست - یک کلید ssh ایجاد کنید و ان را بر روی تمشک نصب کنید، به طوری که یک اعلان رمز عبور با هر rsync ظاهر نمی شود و نام کاربری و رمز عبور باید وارد شود. دستورالعمل های کافی در اینترنت وجود دارد، بنابراین من خودم را از توضیحات دقیق در اینجا صرف نظر می کنم.

ایجاد ساختار دایرکتوری برای کتابخانه های تمشک

برای فایل های مورد نیاز، ساختار دایرکتوری زیر را تحت 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

دانلود منابع Qt

ما منابع Qt را بارگیری می کنیم و انها را در دایرکتوری 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

در حال حاضر ما نیاز به تغییر فایل mkspec کمی به طوری که ما می توانیم ان را با کامپایلر ما استفاده کنید. برای انجام این کار، دستورات زیر را اجرا کنید:

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

دانلود کراس کامپایلر

به عنوان یک کامپایلر متقابل من با استفاده از Linaro نسخه 7.4.1. برای انجام این کار، دایرکتوری ابزار را تغییر دهید و کامپایلر را دانلود و باز کنید:

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 از کتابخانه های تمشک در حال حاضر ما نیاز به کتابخانه های اصلی از Raspberry Pi داریم که ما در دایرکتوری های اوبونتو با 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/

حالا ما باید پیوندهای نمادین را که توسط rsync کپی شده اند پاک کنیم تا به فایل های اصلی صحیح اشاره کنند. یک اسکریپت Python کوچک برای دانلود وجود دارد:

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

سپس اسکریپت را اجرایی کنید و ان را فراخوانی کنید:

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

کامپایل Qt

حالا ما می توانیم ساخت را پیکربندی کنیم و سپس ان را کامپایل کنیم.

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

پس از چند دقیقه، فیلمنامه باید به پایان رسید و شرایط EGLFS زیر باید تنظیم شود یا تنظیم نشود.

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

اگر این مورد نیست و یا اگر هر پیام خطای دیگری ظاهر می شود، لطفا بررسی و تمیز کردن. اگر می خواهید اسکریپت پیکربندی را دوباره با متغیرهای تغییر یافته اجرا کنید، لطفا محتویات دایرکتوری ساخت را از قبل حذف کنید.
اگر همه چیز خوب است، دستورات make and install را اجرا کنید.

make -j4
make install

نصب فایل های کامپایل شده بر روی تمشک

اگر مجموعه موفقیت امیز باشد، فایل های کامپایل شده - انها در دایرکتوری qt5.15 قرار دارند - می توانند در Raspberry Pi کپی شوند. باز هم، ما این کار را با استفاده از دستور rsync انجام می دهیم.

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

پیکربندی QtCreator

در وبلاگ بعدی من توضیح خواهد داد که چگونه به استفاده از QtCreator برای استفاده با کتابخانه های کامپایل شده است.</: