แนะ นำ
นี่คือคําแนะนําสําหรับการรวบรวมข้าม 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 เป็นคอมพิวเตอร์คอมไพล์ข้ามเครื่องในเครื่องเสมือน
แหล่งที่มา
นอกจากโพสต์บล็อกเก่าของฉัน (ดูด้านบน) แล้วฉันยังใช้แหล่งข้อมูลต่อไปนี้:
- โดย Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
การดูแล
มีการอัปเดตบทความนี้ซึ่งมีการรวบรวมข้ามสําหรับ Raspberry Pi, Qt6 และ Ubuntu 22.04 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 ปลอม)" ดูภาพหน้าจอสองภาพต่อไปนี้- จากนั้นเพิ่มแหล่งการพัฒนาลงใน /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 เพื่อใช้กับไลบรารีที่คอมไพล์แล้ว