Blog:
組み込みArmプラットフォーム向けQt5ソースコードのクロスコンパイル

Thursday, November 4, 2021

はじめに

Qtグラフィックス開発フレームワークは、組み込みArmプラットフォームおよび組み込みLinuxシステム向けのグラフィカルユーザーインターフェースとして最も広く使われてきました。Yocto Projectに基づいてコンパイルされた組み込みLinuxシステムでは、OpenEmbedded開発環境を利用した、特定のQtオープンソースバージョンへの変換が非常に便利です。ランタイムライブラリは組み込みLinuxシステムに統合されています。例えば、Yoctoリリース2.4はQt5.9バージョンに対応しており、Qt5.12など、これと異なるバージョンの場合は、ソースコードを介してクロスコンパイルする必要があります。この記事では、関連するテストの例を利用します。

このデモンストレーションで利用するArmプラットフォームは、NXP i.MX6Q SoCを搭載したToradexのApalis iMX6 Armコアボードです。

準備

Apalis i.MX6QArmコアバージョンはApalis評価ボードキャリアボードと連携してデバッグシリアルポートUART1(キャリアボード X29)を開発ホストに接続し、デバッグを可能にします。Apalis 評価ボードキャリアボードとApalis iMX6についての詳しい説明は、データシート開発ガイドを参照してください。

Apalis i.MX6QはToradex Linux BSP V2.8組み込みLinuxをインストールします。システムはYocto Project/OpenEmbeddedコンパイル環境に基づいています。コンパイル方法についてはこちらを、コンパイルされたLinuxイメージのインストール方法についてはこちらを参照してください。

コンパイル環境設定

まずは、Apalis i.MX6に対応するSDKをダウンロードします。ダウンロードリンクはこちら:https://developer.toradex.com/files/toradex-dev/uploads/media/Colibri/Linux/SDKs/

ダウンロードするバージョンとモジュールを選択します。ここでは、2.8/apalis-imx6/angstrom-lxde-image/に移動してダウンロードします。

SDKをインストールします。デフォルトの/usr/local/oecore-x86_64にインストールすることも、$home配下など、ほかの好きなディレクトリにインストールすることもできます。

user@host:~$ cd
user@host:~$ chmod +x angstrom-glibc-x86_64-armv7at2hf-neon-v2016.12-toolchain.sh
user@host:~$ ./angstrom-glibc-x86_64-armv7at2hf-neon-v2016.12-toolchain.sh
Angstrom SDK installer version nodistro.0
=========================================
Enter target directory for SDK (default: /usr/local/oecore-x86_64):
You are about to install the SDK to "/usr/local/oecore-x86_64". Proceed[Y/n]? y

インストールディレクトリにある環境変数出力構成ファイルを編集します。

デフォルトの環境変数構成ファイルは/usr/local/oecore-x86_64/environment-setup-armv7at2hf-neon-angstrom-linux-gnueabiです。これを次のように変更します。
https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/environment-setup-qt-default 

Qt5.12ソースコードのダウンロードと設定

次のアドレスから、Qt5.12オープンソースバージョンの最新ソースコードのtar.xz圧縮パッケージをダウンロードして解凍します。これの最新バージョンは5.12.4です。
https://download.qt.io/archive/qt/5.12/

$ wget https://download.qt.io/archive/qt/5.12/5.12.4/single/qt-everywhere-src-5.12.4.tar.xz
$ tar Jxf qt-everywhere-src-5.12.4.tar.xz
$ cd qt-everywhere-src-5.12.4

qmake構成ファイルについて

クロスコンパイルするには、qtbase/mkspecs/devicesディレクトリ内の組み込みデバイスに対応するqmake構成ファイルを利用する必要があります。しかし、NXP iMX6向けlinux-imx6-g++に対応する事前設定されたqmake.confではデフォルトでeglfsファイルシステムになっており、このテストで利用するToradexのデフォルトLinux BSPはX11ディスプレイに基づいているため、必要に応じて変更する必要があります。

qtbase/mkspecs/devices/linux-imx6-g++/qmake.confを次のように変更します。
https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/qmake.conf 

そして、configure構成ファイルbuild_configure.shを次のように作成します。これは主に構成パラメーター設定や一部のxcb(X11)のサポートなどに利用されます。-skip-を渡して一部のqtモジュールを無視したりコンパイルしたりすることも可能ですが、デフォルトではすべてがコンパイルされます。
https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/build_configure.sh 

configure --helpを利用すればほかのconfigureオプションを見ることができます。helpすべての内容は次のとおりです。
https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/qt5.12_configure-help-printout 

Qt5.12ソースコードのクロスコンパイル

上記の3章で用意したコンパイルされた環境変数を出力します。
$ source /usr/local/oecore-x86_64/environment-setup-qt-default

そして、configureと同じシェルの下でbuild_configure.shを実行します。
$ ./ build_configure.sh

その後、Configureが成功した場合は、コンパイルする関連コンポーネントが出力されるので、必要条件が満たされているかどうかを再度確認できます。
Configure summary:
Building on: linux-g++ (x86_64, CPU features: mmx sse sse2)
Building for: devices/linux-imx6-g++ (arm, CPU features: neon)
Target compiler: gcc 6.2.1
Configuration: cross_compile use_gold_linker compile_examples enable_new_dtags largefile neon shared rpath release c++11 c++14
concurrent dbus reduce_exports stl

Build options:
 Mode ................................... release
 Optimize release build for size ........ no
 Building shared libraries .............. yes
 Using C standard ....................... C11
 Using C++ standard ..................... C++14
 Using ccache ........................... no
 Using gold linker ...................... yes
 Using new DTAGS ........................ yes
 Using precompiled headers .............. no
 Using LTCG ............................. no
 Target compiler supports:
   NEON ................................. yes
 Build parts ............................ libs

OpenGL:
   Desktop OpenGL ....................... no
   OpenGL ES 2.0 ........................ yes
   OpenGL ES 3.0 ........................ yes
   OpenGL ES 3.1 ........................ no
   OpenGL ES 3.2 ........................ no

X11 specific:
   XLib ................................. yes
   XCB Xlib ............................. yes
   EGL on X11 ........................... yes

makeを実行してコンパイルします。全体のコンパイルには長時間かかるため、まずはqtbaseのコンポーネントを別個にコンパイルするようにします。コンパイルが成功したら、完全なコンパイルを行えば効率的です。
# compile qt-base
$ make module-qtbase
# compile all components
$ make

makeがエラーなしで成功したら、make installを実行してインストールします。インストールディレクトリは、上記のbuild_configure.shスクリプトの-prefixパラメーターによって定義されます。例えば、これは${SDKTARGETSYSROOT}/usr/local/Qt-5.12.4にあります。
$ make install

インストールが成功したら、Apalis i.MX6システムへの導入とテスト用にQtコンパイル出力ディレクトリをパッケージ化してアップロードします。
# pack Qt related outputs
$ cd ${SDKTARGETSYSROOT}/usr/local/
$ tar cvf Qt-5.12.4.tar.bz2 Qt-5.12.4/
# scp tar package to Apalis iMX6 Linux $HOME
$ scp Qt-5.12.4.tar.bz2 root@apalis_imx6_ipaddress:/home/root

Qt5.12導入テスト

まず、Qt5.12関連ファイルをApalis i.MX6 Linux /optディレクトリに導入します。
root@apalis-imx6$ cd /opt
root@apalis-imx6$ tar xvf ~/ Qt-5.12.4.tar.bz2

アプリケーションのテストの準備が終わったら、次の2つのQt WidgetとQt Quickアプリケーションを使ってテストします。

  • helloworldUI-Qt Widgetアプリケーション、GPIOを呼び出してLEDを稼働。詳しいコードと説明についてはこちらを参照してください。
  • videotest-Qt Quickアプリケーション、QtMultimediaコンポーネントを通じてビデオ再生およびカメラ呼び出し。詳しいコードと説明については、こちらを参照してください。

Apalis i.MX6向けにコンパイルされた実行可能ファイルと上記2つのプロジェクトの必要なビデオファイルをApalis iMX6のLinuxの$HOMEにコピーします。
$ scp helloworldUI videotest ready-player-one-trailer-2_h720p.mov root@apalis_imx6_ipaddress:/home/root

次のテスト用スクリプト、qttest.shをApalis i.MX6のLinux $HOMEに作成し、2つのアプリケーションを1つずつ順番にコメントアウトしてテストします。

qttest.sh - https://github.com/simonqin09/Qt5.12_source_code_compile/blob/master/qttest.sh

helloworldUIアプリケーションをテストすると、次のようにインターフェースディスプレイとGPIO制御は正常に動作し、抵抗膜方式タッチも動作します。

videotestアプリケーションをテストすると、次のようにビデオ再生とカメラキャプチャは正常に動作し、抵抗膜方式タッチも動作します。

まとめ

この記事では、Arm組み込みプラットフォームを利用した、クロスコンパイルとQt5.12ソースコード導入の例を紹介しました。

Author: Shanfeng Hu, FAE, Toradex
Share this on:

Leave a comment

Your email ID will be kept confidential. Required fields are marked *



* Your comment will be reviewed and then added. Thank you.

Have a Question?