はじめに
この記事は Qt Advent Calendar 2024 6日目の記事です。
昨日は @CharNoe さんによる Qtで作ったPC向けアプリケーションをAndroidで動かす話
という記事でした。
元々 Windows 向けに開発していた Qt アプリを Android へ移植したとのことで、「想像以上に低コストで対応できました」というのがすごいですね。
今回は3日目に書いた Toradex Verdin AM62 Solo で meta-qt6 を動かしてみた の続きで、前回作成して動かした Yocto + meta-qt6 向けに開発環境を整え、アプリケーションを動かしてみます。
SDK の作成
docker 内で SDK を作成する
※ 結局 meta-python が必要だったのでここで追加しました。
ubuntu@5f2e1485b731:~/am62$ bitbake-layers add-layer ../layers/meta-openembedded/meta-python/
NOTE: Starting bitbake server...
ubuntu@5f2e1485b731:~/am62$ bitbake meta-toolchain-qt6 -k
Loading cache: 100% | | ETA: --:--:--
Loaded 0 entries from dependency cache.
Parsing recipes: 100% |########################################################################################| Time: 0:00:09
Parsing of 4762 .bb files complete (0 cached, 4762 parsed). 7642 targets, 939 skipped, 0 masked, 0 errors.
NOTE: Resolving any missing task queue dependencies
NOTE: Resolving any missing task queue dependencies
NOTE: Resolving any missing task queue dependencies
NOTE: Resolving any missing task queue dependencies
NOTE: Resolving any missing task queue dependencies
NOTE: Resolving any missing task queue dependencies
Build Configuration (mc:default):
BB_VERSION = "2.0.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "ubuntu-24.04"
TARGET_SYS = "aarch64-oe-linux"
MACHINE = "verdin-am62"
DISTRO = "nodistro"
DISTRO_VERSION = "nodistro.0"
TUNE_FEATURES = "aarch64"
TARGET_FPU = ""
meta = "HEAD:fb45c5cf8c2b663af293acb069d446610f77ff1a"
meta-arm-toolchain
meta-arm = "HEAD:936c02ec13661bd86a05f7f90e1b920d5092d670"
meta-ti-bsp = "HEAD:16e09294cbfc3961af6f041b5b2d785d9ee75853"
meta-toradex-bsp-common = "HEAD:e6a8677f4a5bcf56f4338f4441e64eb2538f52d4"
meta-toradex-ti = "HEAD:140d7c15af7147dc39bee8727acbf99a3eb34877"
meta-oe = "HEAD:4ad41baed6236d499804cbfc4f174042d84fce97"
meta-qt6 = "HEAD:d6e576a7d75d0371602e93124c4e2f1c539be8f3"
meta-python = "HEAD:4ad41baed6236d499804cbfc4f174042d84fce97"
Build Configuration:
BB_VERSION = "2.0.0"
BUILD_SYS = "x86_64-linux"
NATIVELSBSTRING = "ubuntu-24.04"
TARGET_SYS = "arm-oe-eabi"
MACHINE = "verdin-am62-k3r5"
DISTRO = "nodistro"
DISTRO_VERSION = "nodistro.0"
TUNE_FEATURES = "arm armv7a vfp thumb callconvention-hard"
TARGET_FPU = "hard"
meta = "HEAD:fb45c5cf8c2b663af293acb069d446610f77ff1a"
meta-arm-toolchain
meta-arm = "HEAD:936c02ec13661bd86a05f7f90e1b920d5092d670"
meta-ti-bsp = "HEAD:16e09294cbfc3961af6f041b5b2d785d9ee75853"
meta-toradex-bsp-common = "HEAD:e6a8677f4a5bcf56f4338f4441e64eb2538f52d4"
meta-toradex-ti = "HEAD:140d7c15af7147dc39bee8727acbf99a3eb34877"
meta-oe = "HEAD:4ad41baed6236d499804cbfc4f174042d84fce97"
meta-qt6 = "HEAD:d6e576a7d75d0371602e93124c4e2f1c539be8f3"
meta-python = "HEAD:4ad41baed6236d499804cbfc4f174042d84fce97"
Initialising tasks: 100% |#####################################################################################| Time: 0:00:02
Sstate summary: Wanted 2424 Local 2422 Mirrors 0 Missed 2 Current 0 (99% match, 0% complete)
NOTE: Executing Tasks
NOTE: Tasks Summary: Attempted 7350 tasks of which 7341 didn't need to be rerun and all succeeded.
ホスト PC へコピーをする
ubuntu@fee456f40266:~/am62$ ls deploy-ti/sdk/
oecore-x86_64-aarch64-toolchain-nodistro.0.host.manifest oecore-x86_64-aarch64-toolchain-nodistro.0.target.manifest
oecore-x86_64-aarch64-toolchain-nodistro.0.sh oecore-x86_64-aarch64-toolchain-nodistro.0.testdata.json
buntu@fee456f40266:~/am62$ scp deploy-ti/sdk/oecore-x86_64-aarch64-toolchain-nodistro.0.sh tasuku@172.17.0.1:/home/tasuku/Downloads
(tasuku@172.17.0.1) Password:
oecore-x86_64-aarch64-toolchain-nodistro.0.sh 100% 1174MB 665.4MB/s 00:01
SDK のインストール
$ ~/Downloads/oecore-x86_64-aarch64-toolchain-nodistro.0.sh
OpenEmbedded 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
Extracting SDK..........................................................................................................................................................................................................................................................done
Setting it up...done
SDK has been successfully set up and is ready to be used.
Each time you wish to use the SDK in a new shell session, you need to source the environment setup script e.g.
$ . /usr/local/oecore-x86_64/environment-setup-aarch64-oe-linux
SDK の内容を確認する
$ . /usr/local/oecore-x86_64/environment-setup-aarch64-oe-linux
$ type -p $CC
/usr/local/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-gcc
$ type -p $CXX
/usr/local/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-g++
$ type -p $GDB
/usr/local/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/bin/aarch64-oe-linux/aarch64-oe-linux-gdb
$ type -p qmake
/usr/local/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/bin/qmake
$ type -p cmake
/usr/local/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/bin/cmake
$ echo $SDKTARGETSYSROOT
/usr/local/oecore-x86_64/sysroots/aarch64-oe-linux
Qt Creator の設定をする
Qt Creator 15 を利用しています。バージョンによっては多少異なることがあります。
コンパイラーの登録
左側の「Kits」からまずはコンパイラーの登録をします。
type -p $CC
の値を設定します。
デバッガーの登録
type -p $GDB
の値を設定します。
qmake の登録
type -p qmake
の値を登録します。
CMake の登録
左側の「CMake」から登録をします。
デバイスの登録
左側の「Devices」から登録をします。
Remote Linux Device
として登録をします。
ホスト名は verdin-am62.local
でアクセスができます。
事前に ssh root@verdin-am62.local
が成功することを確認しておきましょう。
verdin-am62.local
は root
ユーザーで(空の)パスワードで入るため、キーのデプロイは不要です。
Access via
が Local PC
になっていない場合は設定し、右側の Test
を試します。
大体成功しますが、以下のとおり rsync
等いくつかは失敗しました。
Connecting to device...
Connected. Now doing extended checks.
Sending echo to device...
Device replied to echo with expected contents.
Sending echo to device...
Device replied to echo with expected contents.
Checking kernel version...
Linux 6.1.83-0+git.dd30c7ec04b8 aarch64
Checking if specified ports are available...
All specified ports are available.
Checking whether "generic file copy" works...
"generic file copy" is functional.
Checking whether "sftp" works...
"sftp" is functional.
Checking whether "rsync" works...
"rsync" failed with exit code 12: sh: rsync: not found
rsync: connection unexpectedly closed (0 bytes received so far) [Receiver]
rsync error: error in rsync protocol data stream (code 12) at io.c(231) [Receiver=3.3.0]
Checking if required commands are available...
base64...
base64 not found.
cat...
cat found.
chmod...
chmod found.
cp...
cp found.
cut...
cut found.
dd...
dd found.
df...
df found.
echo...
echo found.
eval...
eval found.
exit...
exit found.
kill...
kill found.
ls...
ls found.
mkdir...
mkdir found.
mkfifo...
mkfifo found.
mktemp...
mktemp found.
mv...
mv found.
printf...
printf found.
read...
read found.
readlink...
readlink found.
rm...
rm found.
sed...
sed found.
sh...
sh found.
shift...
shift found.
stat...
stat found.
tail...
tail found.
test...
test found.
touch...
touch found.
trap...
trap found.
which...
which found.
Device test failed.
Kit の登録
左側の「Kits」に戻って登録をします。
設定項目 | 設定 |
---|---|
Run device type | Remote Linux Device |
Run device | 上記で作成したデバイスの名前 |
Compiler | 上記で追加したコンパイラー |
Debugger | 上記で追加したデバッガー |
Sysroot |
$SDKTARGETSYSROOT の値 |
Qt version | 上記で追加した Qt |
Qt mkspec | 空欄(デフォルト)で問題ないと思います |
CMake Tool | 上記で追加した CMake |
CMake Configuration |
-DCMAKE_TOOLCHAIN_FILE:FILEPATH=/usr/local/oecore-x86_64/sysroots/x86_64-oesdk-linux/usr/lib/cmake/Qt6/qt.toolchain.cmake を追加します |
Qt アプリの作成と実行
では、アプリを作成して実機で動かしてみましょう。
アプリの作成
Qt Quick のテンプレートを使いましょう。
上記で作成した Kit を選択します。
ビルドと実行
デフォルトで実機で動く設定がすべて完了しているため、Ctrl+R
で実行すると実機でアプリが立ち上がります。
あまりにもあっさり動いてしまって、不思議ですね。
以下のように少し QML を変更して、再度実行してみます。
import QtQuick
Window {
width: 640
height: 480
visible: true
title: qsTr("Hello World")
Rectangle {
width: 100
height: 100
color: 'red'
anchors.centerIn: parent
RotationAnimation on rotation {
from: 0
to: 360
duration: 5000
running: true
loops: Animation.Infinite
}
}
}
デバッグ
現時点ではそのままは動かないので、別途記事を書こうと思います。
終わりに
Toradex Japan 株式会社 からお借りした Verdin AM62 で、Qt アプリを開発するための環境を整備し、実際にアプリを実行してみました。
実機でのアプリの実行がシームレスに行えてとても効率的ですね!
明日は @hermit4 さんがなにか書いてくれるそうなので、楽しみに待ちましょう。