本記事について
- QNXは主に自動車業界で使用されているReal Time OS (RTOS) です
- 以前は個人で気軽に試すことは難しかったり、試せても30日間の試用しかできませんでした
- 去年(2024)ごろから、非商用利用であれば無料で使えるライセンスが用意されました。また、Raspberry Pi 4 向けのイメージファイルも提供されるようになりました
- 開発環境の導入までは公式ドキュメントが充実していますし、日本語での解説記事も既にいくつかあります。本記事では、(自分の備忘録的に書いた開発環境導入に加えて)、QNXから提供されている性能解析ツールの簡単な紹介を行いたいと思います
環境
- Host PC
- Windows 11 + WSL2 (Ubuntu 24.04)
- Target Device
- Raspberry Pi 4
- Others
- SD Card
- SD Card reader
- WiFi環境
参考資料
- 開発環境の導入方法
-
https://devblog.qnx.com/tag/tutorials/
- 基本的にはこのページの以下の記事を見ればわかります
- How to Get a Free QNX License
- Set Up a Headless QNX Raspberry Pi
- Using QNX SDP 8.0 with WSL2 on Windows
- 基本的にはこのページの以下の記事を見ればわかります
- 必要に応じて以下のサイトも参考にしてください
-
https://devblog.qnx.com/tag/tutorials/
- QNXの詳細情報
-
https://www.qnx.com/developers/docs/8.0/com.qnx.doc.qnxsdp.nav/topic/bookset.html
- セットアップが完了して、hello worldが完了したくらいのタイミングで一通り目を通すと良いかと思います。QNXのアーキテクチャやプログラミングガイドなどが記載されています
-
https://gitlab.com/elahav/qnx-rpi-book/-/blob/master/pdf/qnx_book.pdf
- QNX + raspiについてのテキスト形式のpdf
-
https://blackberry.qnx.com/en/products/qnx-everywhere
- ポータル的なサイト
-
https://www.qnx.com/developers/docs/8.0/com.qnx.doc.qnxsdp.nav/topic/bookset.html
Keywords
- QNX (Neutrino) RTOS: OSそのものの名称。2025年10月時点のバージョンは8.0
- QNX Software Development Platform (QNX SDP): 開発者向け統合パッケージ。2025年10月時点のバージョンは8.0
- QNX Momentics: IDE
- QNX Software Center: QNXが提供するソフトウェア配布・管理ツール
開発環境の構築
方針
- QNX Software CenterをホストPCにインストールし、その後Raspberry Pi用のイメージやSDPのインストールを行います
- ホスト環境としてはWindowsとLinuxがサポートされています。私は普段Windowsを使用しているので、最初は全手順をWindows上で行いました。が、後々のことを考えるとLinux上で行った方が便利です
- そのため、本記事ではWindows + WSL (Ubuntu 24.04) を対象に環境構築を行います。出来ることはWindows上での環境と同じで、今のところデメリットや問題点は見つかっていません。ターゲットとの通信などでもトラブったことはありません
アカウントの作成・ライセンス取得・インストーラー取得
- 基本的には参考サイトの通りです
- 以下は手順抜粋です(自分用メモ)
- 以下のURLよりアカウントを作成します
- 以下のURLよりQNX SDP 8.0 for Non-Commercial Useのライセンス申請を行います
- https://www.qnx.com/products/everywhere/
- ライセンスが発行されるまで少し時間がかかります
- ライセンスが発行されたと、Deployするのを忘れないようにしてください
- DeployしたらLicence keyをメモしておいてください
- 以下のURLより、QNX Software Centerをダウンロードします
-
https://www.qnx.com/download/group.html?programid=29178
- (Developers -> QNX Software Center)
- 今回は、Linux用のインストーラーをダウンロードします
-
https://www.qnx.com/download/group.html?programid=29178
QNX SDPのインストール
- 基本的には参考サイトの通りです
- https://devblog.qnx.com/using-qnx-with-wsl2/
- 加えて、下記コマンドではRaspberry Pi 4 向けイメージのダウンロードも行っています
- 下記コマンドだと、
~/qnx/pi_image/images/qnx_sdp8.0_rpi4_quickstart_ooo.imgにイメージがダウンロードされます
- 下記コマンドだと、
- 万が一SDPやパッケージのインストールでエラーが発生した場合、以下コマンドでQNX Software Centerを起動して、GUIからインストールしてください
./qnx/qnxsoftwarecenter/qnxsoftwarecenter & - 以下は手順抜粋です(自分用メモ)
onUbuntu
# Install Software center
cd $HOME
cp /mnt/c/Users/<username>/Downloads/qnx-setup-<version>-linux.run .
chmod +x qnx-setup-<version>-linux.run
./qnx-setup-<version>-linux.run
# Add License key
export USER_NAME="your-qnx-user-name"
export PASSWORD="your-qnx-password"
export LICENSE_KEY="your-qnx-license-key"
cd $HOME
./qnx/qnxsoftwarecenter/qnxsoftwarecenter_clt -myqnx.user "$USER_NAME" -myqnx.password "$PASSWORD" -addLicenseKey "$LICENSE_KEY"
# Install SDP
./qnx/qnxsoftwarecenter/qnxsoftwarecenter_clt -myqnx.user "$USER_NAME" -myqnx.password "$PASSWORD" -cleanInstall -mirrorBaseline qnx800 -installBaseline com.qnx.qnx800 -destination ~/qnx800
# Install Momentics IDE
./qnx/qnxsoftwarecenter/qnxsoftwarecenter_clt -myqnx.user "$USER_NAME" -myqnx.password "$PASSWORD" -cleanInstall -installBaseline com.qnx.sdp.host.momentics.group -destination ~/qnx/qnxmomenticside
# Download a quick start target image for Raspberry Pi 4
./qnx/qnxsoftwarecenter/qnxsoftwarecenter_clt -myqnx.user "$USER_NAME" -myqnx.password "$PASSWORD" -cleanInstall -installBaseline com.qnx.qnx800.quickstart.rpi4 -destination ~/qnx/pi_image
Raspberry Pi 4向けにイメージをSDカードに書き込み、動作確認を行う
- 基本的には参考サイトの通りです
- SDカードへのアクセスはWSL経由だと面倒なので、WSL上の
~/qnx/pi_image/images/qnx_sdp8.0_rpi4_quickstart_20250820.imgをWindows側にコピーしてから行います - 書き込み完了後、SDカード内のwpa_supplicant.confを編集してWiFiパスワードなどを入力しておきます
- (必須ではないですが)、もしもHDMIを接続していたら下図のような画面が出力されます
- sshでアクセスできることと、IPアドレスを確認しておきます
- Windowsからsshする場合は
ssh -m hmac-sha2-256 qnxuser@qnxpi.local
- Windowsからsshする場合は
- その他情報
- 初期ユーザーとパスワード:
qnxuser,qnxuser - rootとパスワード:
root,root
- 初期ユーザーとパスワード:
Hello worldプログラム
- 標準IDEであるQNX MomenticsとVSCodeの両方で環境構築します
- コーディング、デバッグはVSCodeの方がやりやすいかと思います。が、後述のプロファイリング機能はVSCodeでは一部動かないようなので、必要に応じてMomenticsを使うという使い分けになるかと思います
QNX Momentics IDEでHello world
プロジェクトの作成
- 以下コマンドでQNX Momenticsを起動します
- よくあるEclipseベースのIDEのようです。初回起動したら適当にworkspaceを設定します
./qnx/qnxmomenticside/qde &
- プロジェクトを作ります
- Menu -> File -> New -> QNX Project -> QNX Executable
- 適当なProject nameをつけます。(hello_momentics)
- 以下の設定をします
- Language: C++ (Cでもよい)
- CPU Variant: aarch64le
実行
- Targetを作成します
- 適当にRunボタンをクリックします
- New QNX Targetをクリックします
- 先ほど調べたIPアドレスを入力してFinish
- 再度DebugやRunボタンを実行すると、Raspberry Pi上でプログラムが実行されます
Releaseビルド
- Host PCからではなく、完全にRaspberry Pi上で動かしたい場合は、以下でReleaseビルドしてからscpして実行します
- Menu -> Project -> Build Configurations -> Set Active -> aarch64le-release
- clean build
scp /home/iwatake/ide-8.0-workspace/hello_momentics/build/aarch64le-release/hello_momentics qnxuser@192.168.1.9:/data/home/qnxuser/.
VSCodeでHello world
準備
- WSL上にcmakeをインストールしておきます
sudo apt install cmake
- WSL側にVSCodeをインストールします
- Windows側でVSCodeがインストール済みなら、WSL上で
codeと実行すればOKです - もしもWSLに接続されていなかったら、画面左下をクリックして
Connect to WSLしてください
- Windows側でVSCodeがインストール済みなら、WSL上で
-
以下のexcensionをインストールします
- ms-vscode.cpptools
- eclipse-cdt.vscode-trace-extension
- qnx.qnx-vscode
- qnx.sdpPathの設定を聞かれたら、
~/qnx800を設定します
- qnx.sdpPathの設定を聞かれたら、
-
もしもsdpの場所が見つからないという旨のエラーが出ていたら、先ほどインストールしたパスをしていします。
~/qnx800
プロジェクトの作成
- VSCodeを開いた状態で、
ctrl + shift + pを押して、QNX: Create new Project...を選びます - 適当な設定で作成します
- プロジェクト名: hello_vscode
- type of project template: QNX Cmake Project (他のでも良いです)
- language: c++
- artifact type: Executable
- 最後に、Scan for kitsをクリックします
実行
- F5を押して実行しようとします
- TargetのIPアドレスを聞かれるので先ほど調べたアドレスを入力します
- 例。
192.168.1.9
- 例。
- 先頭行で自動でブレークがかかった状態で止まるので、再度F5を押して実行します
Releaseビルド
- Host PCからではなく、完全にRaspberry Pi上で動かしたい場合は、以下でReleaseビルドしてからscpして実行します
- VSCode上で、ctrl + shift + p ->
Tasks: Run Task->QNX: CMake Configure (release) - VSCode上で、ctrl + shift + p ->
Tasks: Run Task->QNX: CMake Build scp /home/iwatake/qnxprojects/hello_vscode/build/hello_vscode qnxuser@192.168.1.9:/data/home/qnxuser/.
- VSCode上で、ctrl + shift + p ->
System Profiler
- システム全体の挙動を解析するためのツールとしてSystem Profilerが提供されています。プロセスをまたいだ不具合の解析や、システム性能改善に役立てることができます
- 基本的な仕組みとしては、カーネルイベントを取得して、それを様々な方法で可視化しています
- QNX Momentics IDEとVSCodeの両方で使うことができますが、現時点 (2025/10)ではVSCodeでは一部の機能しかサポートされていなかったり、表示の方法が異なっているようでした(私のセットアップ手順にモレがある可能性はあります)
サンプルアプリケーション
- 負荷をかける適当なプログラム (heavy_work) をビルドして、Raspberry Pi上で実行しておきます
- 10msecのsleepと重い (無駄な) 処理を交互に繰り返すだけのプログラムです
heavy_work
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <sys/neutrino.h>
#include <sys/dispatch.h>
void heavy_work(size_t size)
{
double *array = malloc(size * sizeof(double));
for (size_t i = 0; i < size; i++) {
volatile double value = sin(i * 0.001) * cos(i * 0.0001);
array[i] = value;
}
free(array);
}
int main()
{
while (1) {
printf("Run heavy_work\n");
heavy_work(1000000);
printf("Sleep 10 msec\n");
usleep(10*1000);
}
return 0;
}
QNX Momentics IDEでSystem Profilerを使う
Kernel event trace
- QNX Momentics IDEを開いたら、以下の操作でトレースを行います
-
QNX System ProfilerPercepectiveを開く - Target Navigator上で作成済みのターゲットを右クリック
-
Log With->Kernel Event Traceをクリック - ウィンドウが開くので、デフォルト設定のまま
Logをクリック
-
- デフォルト設定だと、3秒で自動的にトレースが完了します
- その後、QNX Momentics IDE上で自動的に解析結果が表示されます
Summary
- トレース期間中の負荷の概要が表示されます
- 別の解析結果を見るには、画面右上の
Switch to the next display typeをクリックします
CPU Activity
- 時系列で各コアの使用率が表示されます
CPU Usage
- 各プロセスのCPU timeがコア別に表示されます
Timeline
- 時系列で各プロセス・スレッドの挙動を確認できます。また、カーネルイベントも表示されます
- イメージ的には、Linuxのtrace-cmdとkernelsharkのような感じです
- (今回のサンプルプログラムでは、重い処理とsleepを交互に繰り返しています)
VSCodeでSystem Profilerを使う
Kernel event trace
- VSCodeを開いたら、以下の操作でトレースを行います
- サイドバーからQNXを開く
- QNX TARGETSから先ほど作成したRaspberry Piを右クリックする
-
Capture QNX Kernel Event Trace (with tracelogger)をクリックする
- デフォルト設定だと、3秒で自動的にトレースが完了します
- その後、VSCode上で自動的に解析結果が表示されます
CPU Usage
- QNX SYSTEM PROFILER -> DASHBOARDS -> CPU Usage
- 各プロセスのCPU timeがコア別に表示されます
Timeline
- QNX SYSTEM PROFILER -> DASHBOARDS -> Timeline
- 時系列で各プロセス・スレッドの挙動を確認できます
- また、カーネルイベントも表示されます
Application Profiler
- Application profilerを使うことで、個別のアプリケーションの性能分析ができます
- 本機能はQNX Momentics IDEでしか使えないようです(VSCodeでも出来るかもしれないですが、やり方不明)
- 先ほど作成した適当な負荷をかけるheavy_workプログラムをQNX Momentics IDEで開いて実行できるようにしておきます
ボトルネック解析
- Launch modeを
Profileにして、Profileボタンをクリックします - 数秒後、実行停止します
- 実行停止すると自動的に実行時間の計測結果が表示されるはずです。もしも表示されない場合はQNX Analysis perspectiveを開いてください
- 本解析によってどこの処理で時間がかかっているかが分かります。また、その関数自体で時間がかかっているのか、呼び出し先で時間がかかっているかの区別もつきます
- 今回の場合だと文字通りですが
heavy_work関数で時間がかかっていることが分かります
メモリ解析
- Launch modeを
Memoryにして、Memoryボタンをクリックします - 数秒後、実行停止します
- 本解析によって、メモリ確保と開放がどのように行われているかが可視化されます
- 今回の場合だと、allodとfreeが交互に行われて、取得したメモリが正しく開放されていることが分かります
その他
- 本記事で挙げた以外にも以下のような解析機能があるようです
- 性能のリアルタイムモニタリング
- Valgrindを使ったメモリ解析
- 等々















