Qt 5.15 biên dịch chéo cho Raspberry Compute Module 4 trên Ubuntu 20 LTS

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:

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.
SSH Konfiguration

FKMS Konfiguration

- 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.