Qt 5.15 cross compile สําหรับ Raspberry Compute Module 4 บน Ubuntu 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 และ Ubuntu 20 LTS เป็นคอมพิวเตอร์คอมไพล์ข้ามเครื่องในเครื่องเสมือน

แหล่งที่มา

นอกจากโพสต์บล็อกเก่าของฉัน (ดูด้านบน) แล้วฉันยังใช้แหล่งข้อมูลต่อไปนี้:

ราสเบอร์รี่ Pi OS Lite

ติดตั้ง Raspberry Pi OS Lite บน Raspberry Pi 4 หรือบน Raspberry Compute Module 4 ตามที่อธิบายไว้ในบล็อกโพสต์ของฉันการติดตั้ง Raspberry Pi OS บน Raspberry Compute Module 4

Qt 5.15.2 บน Ubuntu 20 LTS

หลังจากติดตั้ง Raspberry Pi OS บน Compute Module และ Raspberry บูทกลับจากหน่วยความจํา eMMC แล้วก็ถึงเวลาติดตั้งซอฟต์แวร์ที่จําเป็นบน Raspberry และบนเครื่อง Ubuntu

โมดูลประมวลผลราสเบอร์รี่ 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

เครื่องอูบุนตู

จําเป็นต้องมีพีซีหรือเครื่องเสมือนที่ติดตั้ง Ubuntu 20 LTS
ก่อนอื่นให้นํา Ubuntu มาอัปเดตและติดตั้งไลบรารีที่จําเป็น:

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-key และติดตั้งบน Raspberry เพื่อให้พรอมต์รหัสผ่านไม่ปรากฏขึ้นพร้อมกับ rsync และชื่อผู้ใช้และรหัสผ่านทุกรายการ มีคําแนะนําเพียงพอบนอินเทอร์เน็ตดังนั้นฉันจะสํารองคําอธิบายโดยละเอียดไว้ที่นี่

สร้างโครงสร้างไดเรกทอรีสําหรับไลบรารี Raspberry

สําหรับไฟล์ที่ต้องการฉันสร้างโครงสร้างไดเร็กทอรีต่อไปนี้ภายใต้ 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

ดาวน์โหลด Cross-Compiler

ในฐานะคอมไพเลอร์ข้ามฉันใช้ 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 ซึ่งเราคัดลอกลงในไดเรกทอรี Ubuntu ด้วย 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 make install

make -j4
make install

ติดตั้งไฟล์ที่คอมไพล์แล้วบน Raspberry

หากการคอมไพล์สําเร็จไฟล์ที่คอมไพล์แล้วจะอยู่ในไดเร็กทอรี qt5.15 สามารถคัดลอกไปยัง Raspberry Pi ได้ อีกครั้งเราทําสิ่งนี้โดยใช้คําสั่ง rsync

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

การกําหนดค่า QtCreator

ใน บล็อกโพสต์ ถัดไปฉันจะอธิบายวิธีใช้ QtCreator เพื่อใช้กับไลบรารีที่คอมไพล์แล้ว