Giới thiệu
Đây là hướng dẫn biên dịch chéo Qt 5.15.2 cho Raspberry Pi 4 và cài đặt nó trên Mô-đun tính toán 4. Đó là bản cập nhật cho bài đăng trên blog của tôi Qt trên Raspberry Pi 4, với sự khác biệt là lần này tôi đang sử dụng Raspberry Pi OS Lite (tải xuống tại đây: https://www.raspberrypi.org/software/operating-systems/), phiên bản Qt 5.15.2 và Ubuntu 20 LTS làm máy tính biên dịch chéo trong máy ảo.
Nguồn
Ngoài bài đăng trên blog cũ của tôi (xem ở trên), tôi cũng sử dụng các nguồn sau:
- Uvindu Wijesinghe: https://github.com/UvinduW/Cross-Compiling-Qt-for-Raspberry-Pi-4
Chú ý
Có một bản cập nhật cho bài viết này, trong đó có biên dịch chéo cho Raspberry Pi, Qt6 và Ubuntu 22.04 LTS. Theo liên kết này, nếu bạn cần phiên bản mới hơn.
Raspberry Pi OS Lite
Cài đặt Raspberry Pi OS Lite trên Raspberry Pi 4 hoặc trên Raspberry Compute Module 4 như được mô tả trong bài đăng trên blog của tôi Cài đặt hệ điều hành Raspberry Pi trên Raspberry Compute Module 4 .
Qt 5.15.2 trên Ubuntu 20 LTS
Sau khi hệ điều hành Raspberry Pi được cài đặt trên Mô-đun tính toán và Raspberry khởi động trở lại từ bộ nhớ eMMC, đã đến lúc cài đặt phần mềm cần thiết trên Raspberry và trên máy Ubuntu.
Mô-đun tính toán Raspberry 4
Các bước được hiển thị bên dưới cũng sẽ hoạt động trên Raspberry Pi 4 "bình thường".
Sau khi bật Pi 4, hãy mở menu cấu hình.
sudo raspi-config
Đối với cấu hình của chúng tôi, chúng tôi cần "SSH" và "GL (KMS giả)". Xem hai ảnh chụp màn hình sau đây.- Sau đó thêm nguồn phát triển vào /etc/apt/sources.list. Để thực hiện việc này, hãy thêm dòng sau:
deb-src http://raspbian.raspberrypi.org/raspbian/ buster main contrib non-free rpi
- Sau đó cập nhật hệ thống bằng các lệnh sau:sudo apt-get update
sudo apt-get dist-upgrade
sudo reboot
sudo rpi-update
sudo reboot
- Và sau đó cài đặt Qt yêu cầu và các gói phát triển: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
- Sau đó tạo một thư mục cho RaspberryQt:sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15
Máy Ubuntu
Cần có PC hoặc máy ảo có cài đặt Ubuntu 20 LTS.
Trước hết, hãy cập nhật Ubuntu và cài đặt một số thư viện cần thiết:
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
Sau đó - nếu chưa có sẵn - hãy tạo một ssh-key và cài đặt nó trên Raspberry, để lời nhắc mật khẩu không xuất hiện với mọi rsync và tên người dùng và mật khẩu phải được nhập. Có đủ hướng dẫn trên Internet, vì vậy tôi sẽ dành cho mình mô tả chi tiết ở đây.
Tạo cấu trúc thư mục cho các thư viện Raspberry
Đối với các tệp cần thiết, tôi tạo cấu trúc thư mục sau trong Tài liệu / 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
Tải xuống Tài nguyên Qt
Chúng tôi tải xuống các tài nguyên Qt và giải nén chúng trong thư mục 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
Bây giờ chúng ta cần sửa đổi tệp mkspec một chút để chúng ta có thể sử dụng nó với trình biên dịch của mình. Để thực hiện việc này, hãy chạy các lệnh sau:
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
Tải xuống trình biên dịch chéo
Là một trình biên dịch chéo, tôi sử dụng phiên bản Linaro 7.4.1. Để thực hiện việc này, hãy thay đổi thư mục công cụ và tải xuống và giải nén trình biên dịch:
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 của Thư viện Raspberry
Bây giờ chúng ta cần các thư viện gốc từ Raspberry Pi, chúng ta sao chép vào các thư mục Ubuntu với 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/
Bây giờ chúng ta phải dọn dẹp các liên kết tượng trưng đã được sao chép bởi rsync để chúng trỏ đến các tệp gốc chính xác. Có một tập lệnh Python nhỏ để tải xuống:
wget https://raw.githubusercontent.com/riscv/riscv-poky/master/scripts/sysroot-relativelinks.py
Sau đó làm cho tập lệnh có thể thực thi và gọi nó:
sudo chmod +x sysroot-relativelinks.py
./sysroot-relativelinks.py sysroot
Biên dịch Qt
Bây giờ chúng ta có thể cấu hình bản dựng và sau đó biên dịch nó.
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
Sau vài phút, tập lệnh sẽ được hoàn thành và các điều kiện EGLFS sau đây nên được đặt hoặc không đặt.
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
Nếu không đúng như vậy hoặc nếu có bất kỳ thông báo lỗi nào khác xuất hiện, vui lòng điều tra và dọn dẹp. Nếu bạn muốn chạy lại tập lệnh cấu hình với các biến đã thay đổi, vui lòng xóa nội dung của thư mục xây dựng trước.
Nếu mọi thứ đều ổn, sau đó chạy lệnh make và make install (tạo và thực hiện các lệnh cài đặt).
make -j4
make install
Cài đặt các tệp đã biên dịch trên Raspberry
Nếu quá trình biên dịch thành công, các tệp được biên dịch - chúng nằm trong thư mục qt5.15 - có thể được sao chép vào Raspberry Pi. Một lần nữa, chúng tôi làm điều này bằng cách sử dụng lệnh rsync.
rsync -avz --rsync-path="sudo rsync" qt5.15 [email protected]:/usr/local/
Cấu hình QtCreator
Trong bài đăng blog tiếp theo, tôi sẽ giải thích cách sử dụng QtCreator để sử dụng với các thư viện được biên dịch.