Ubuntu 5.15 LTS上のラズベリーコンピューティングモジュール4用のQt 20クロスコンパイル

紹介

これは、Raspberry Pi 4用のQt 5.15.2をクロスコンパイルし、コンピューティングモジュール4にインストールするためのガイドです。 これは、Raspberry Pi 4に関する私のブログ投稿Qtのアップデートですが、今回はRaspberry Pi OS Lite(ダウンロードはこちら:https://www.raspberrypi.org/software/operating-systems/)、Qtバージョン5.15.2、Ubuntu 20 LTSを仮想マシンのクロスコンパイルコンピューターとして使用しているという違いがあります。

ソース

私の古いブログ投稿(上記を参照)に加えて、私は次のソースも使用しました:

ラズベリーパイOS Lite

私のブログ記事「Raspberry Pi OS をRaspberry Compute Module 4にインストールする」で説明されているように、Raspberry Pi OS Liteを Raspberry Pi 4またはRaspberry Compute Module 4に インストールします。

Qt 5.15.2 on Ubuntu 20 LTS

ラズベリーパイOSがコンピューティングモジュールにインストールされ、ラズベリーがeMMCメモリから起動したら、ラズベリーとUbuntuマシンに必要なソフトウェアをインストールします。

ラズベリーコンピューティングモジュール 4

以下に示す手順は、「通常の」ラズベリーパイ4でも機能するはずです。

Pi 4の電源を入れた後、構成メニューを開きます。

sudo raspi-config
構成には、「SSH」と「GL(偽のKMS)」が必要です。次の 2 つのスクリーンショットを参照してください。
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
- 次に、ラズベリーQtのディレクトリを作成します。
sudo mkdir /usr/local/qt5.15
sudo chown -R pi:pi /usr/local/qt5.15

###ウブンツマシン Ubuntu 20 LTSがインストールされているPCまたは仮想マシンが必要です。 まず、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を作成してラズベリーにインストールし、rsyncごとにパスワードプロンプトが表示されないようにし、ユーザー名とパスワードを入力する必要があります。インターネットには十分な指示があるので、ここで詳細な説明は割愛します。

ラズベリーライブラリのディレクトリ構造を作成する

必要なファイルについては、ドキュメント/ 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リソースをダウンロードし、ラズベリーpi4ディレクトリに解凍します。

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を使用しています。これを行うには、toolsディレクトリに移動し、コンパイラをダウンロードして解凍します。

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を使用してUbuntuディレクトリにコピーします。

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コマンドとmakeインストールコマンドを実行します。

make -j4
make install

####コンパイルされたファイルをラズベリーにインストールする
コンパイルが成功した場合、コンパイルされたファイル(qt5.15ディレクトリにあります)をRaspberryPiにコピーできます。繰り返しますが、rsyncコマンドを使用してこれを行います。

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

設定 QtCreator

次の ブログ記事 では、コンパイルされたライブラリで使用するためにQtCreatorを使用する方法を説明します。