はじめに
Slintアドベントカレンダーも中盤に差し掛かりました…という出だしで始めるつもりが、今年は色々いそがしい上に少し罠にもはまりまして、全然記事書けなくてごめんなさい。いい年して転職して、今までと生活スタイルが大きく変わったので割とグロッキーな師走を迎えておりまして…いいやぁ歳は取りたくないものですね。
本日は、Slintを動かす環境としてマイコンではなくそこそこ良い組込ターゲットということで、Toradex社さんのだしているSoM(System On Module)を使う方法を見ていきましょう。
なぜToradexさんかというと、弊社EdgeTech+2025向けに色々ターゲットお借りしてデモ作ったりしておりまして。最近ではチップワンストップさんで少量ですが販売されているおかげで購入しやすくなりましたし、製品化に向けて便利な機能も含まれているのでついでにご紹介しておこうかと。
Raspberry Piに比べるとお値段高めですが、Torizon OSというYoctoを使ったLinuxディストリビューションが用意されています。EasyInstallerを使ったGUIによるOSインストール・リカバリ手順を提供、ostreeを使ったファイルレベルでのOS更新とロールバック機構、Dockerコンテナとしてアプリケーションを配布する仕組み、ソフトウェア開発用のVS Code拡張、ビルド用のDockerコンテナなど、組込みに今どきの開発手法を盛り込んだ環境ですので、一度触って色々学習してみるのも楽しいかと思います。
開発ターゲット紹介
Verdin iMX8M Plus Quad 4GB IT
ちょっと豪華にi.MX8M Plusを使っていきます。弊社、一定額の経費枠を従業員にも用意してくれていまして、仕事の学習用のボードとか買えたりします。一枚買おうと思ったときに、あれ数千円しか違わないのだし、Plus買っちゃって良くない?どうせ会社のお金だ…げふん…というわけでひっそり注文致しました。
VerdinはToradex社のSoM規格名で、ソケット形状はDDR4メモリ用ソケットが採用されています。
Cortex-A53 1.8Hzを4コア、Cortex-M7 800MHzを1コア載せており、HMP(AMP)利用も可能。Neural Processing Unit 2.3 TOPS も載っています。RAMは4GBで、32GBのFlashを内蔵しています。
Dahlia キャリアボード
SoMは単体だと利用できません。開発用キャリアボードとしてソフトウェア開発に必要な機能が一通り揃っていながら、小型で持ち運びやすいDahliaボードを選択しました。
口頭で話す時はついとある魔術具師さんの影響でダリヤ(複数系)で呼んでしまいますが、正しくはダリアですね。
なお、アニメ版は微妙でやっぱり原作が好きです。
タッチパネル付きLCD
i.MX8MPはDahliaボード上のHDMIが利用できます。HDMI接続+USBタッチパネルを接続します。今回はAmazonで購入した以下を利用しました。
ROADOM 7インチ Raspberry Pi用タッチモニター IPS 1024X600 スピーカー内蔵
他に必要なもの
- ACアダプタ(5〜24V品)うちでは12V, 2Aのセンタープラスのものを利用しています
- USB type-Cケーブルx2
- LANケーブルと接続先(Wifiなしにしたので…)
開発環境構築
Kubuntu 24.04を採用
Windows向けの環境も用意されているのですが、WSL2上にUbuntuを入れたり、その上でdockerを動かしたりするので、ちょっと重たく感じます。というわけで安定のLinux開発環境を採用しました。
え、25.10も出ているだろうって?なんか、VM上だとxorg周りのパッケージ抜かないと画面出なかったり怪しいので、LTSの方を使います。おかげで最初からやり直したりで記事作成に手間取りました。
PRETTY_NAME="Ubuntu 24.04.1 LTS"
NAME="Ubuntu"
VERSION_ID="24.04"
VERSION="24.04.1 LTS (Noble Numbat)"
VERSION_CODENAME=noble
ID=ubuntu
ID_LIKE=debian
HOME_URL="https://www.ubuntu.com/"
SUPPORT_URL="https://help.ubuntu.com/"
BUG_REPORT_URL="https://bugs.launchpad.net/ubuntu/"
PRIVACY_POLICY_URL="https://www.ubuntu.com/legal/terms-and-policies/privacy-policy"
UBUNTU_CODENAME=noble
LOGO=ubuntu-logo
いつもの開発セット
実はTorizon OSさんはdockerコンテナで開発環境が提供されるので必要ないものがほとんどなのですが、Local Buildを試したりQtも試したりするので入れていました。こんな記事読む人はきっといつかどこかで必要とするものがほとんどなので、入れておけば良いと思います。
wget https://apt.kitware.com/kitware-archive.sh
sudo bash kitware-archive.sh
sudo apt update
sudo apt upgrade
sudo apt install build-essential cmake ninja-build \
gperf ccache dfu-util device-tree-compiler \
python3-venv gcc-multilib pipx g++-multilib \
libsdl2-dev libmagic1t64 gawk diffstat \
texinfo chrpath python3-pip python3-pexpect \
libsdl1.2-dev xterm lz4 gettext autopoint \
libssl-dev curl
sudo usermod -a -G dialout $USER
sudo sysctl -w kernel.apparmor_restrict_unprivileged_userns=0
pipx install xonsh
source ~/.bashrc
Docker install
Torizon拡張がDockerを必要とするのでインストールします
この記事の執筆時点でdocker-composeは5系になっていますが、現状では2系にしないとdocker compose pull か何かのタイミングでエラーが発生します。
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /usr/share/keyrings/docker.gpg
echo \
"deb [arch=$(dpkg --print-architecture) signed-by=/usr/share/keyrings/docker.gpg] \
https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable" | \
sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
sudo apt update
sudo apt install docker-ce docker-ce-cli containerd.io
sudo apt install docker-compose-plugin=2.40.3-1~ubuntu.24.04~noble
sudo apt-mark hold docker-compose-plugin
sudo usermod -aG docker $USER
設定変更
sudo vi /etc/docker/daemon.json
{
"features": {
"containerd-snapshotter": false
}
}
Power Shell install
TorizonCore Builder拡張で利用しているようで、入れていないと警告が出るので入れておきます。
sudo snap install powershell --classic
[備忘録] Google-Chrome install
入れなくても良いですが、僕はGoogle Chrome派です。自分の備忘録も兼ねているので
curl -fsSL https://dl.google.com/linux/linux_signing_key.pub | sudo gpg --dearmor -o /usr/share/keyrings/googlechrom-keyring.gpg
echo "deb [arch=amd64 signed-by=/usr/share/keyrings/googlechrom-keyring.gpg] http://dl.google.com/linux/chrome/deb/ stable main" | sudo tee /etc/apt/sources.list.d/google-chrome.list
sudo apt update
sudo apt install google-chrome-stable
sudo snap remove firefox
[備忘録] Rust install
入れなくても良いですが、以下略
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
. $HOME/.cargo/env
cargo install flip-link cargo-generate cargo-binutils ldproxy
Torizon Core Builderのインストール
mkdir -p ~/tcbdir/ && cd ~/tcbdir/
wget https://raw.githubusercontent.com/toradex/tcb-env-setup/master/tcb-env-setup.sh
source tcb-env-setup.sh
Visual Studio Code install
curl -fsSL https://packages.microsoft.com/keys/microsoft.asc | sudo gpg --dearmor -o /etc/apt/trusted.gpg.d/microsoft.gpg
echo "deb [arch=amd64] https://packages.microsoft.com/repos/vscode stable main" | sudo tee /etc/apt/sources.list.d/vscode.list
sudo apt update
sudo apt install code
Visual Studio Code 拡張install
個人的な趣味で選んでいるものもあるので、SlintとTorizon IDE Extension以外はお好きなものをお好きに入れてください。
1. launch vscode
2. Ctrl+Shift+X
3. install
- rust-analyzer
- CodeLLDB
- Even Better TOML
- Dependi
- Crates Completer
- Slint
- CMake Tools
- CMake Highlight
- C/C++
- serial terminal
- Torizon IDE Extension
- TorizonCore Builder(preview)も一緒に入ります
4. Torizon IDE拡張を選択する
必要な追加パッケージをインストールするためパスワードの入力が求められるので入力する
Download Toradex Easy Installer(tezi)
SoM別、バージョン別に用意されています。
今回は、以下を利用します。ダウンロードして任意の場所に展開しておきます。
Verdin-iMX8MP_ToradexEasyInstaller_7.4.0+build.8.zip
ターゲットの初期化
- キャリアボードにSoMを挿入
- JP3ジャンパをOpenにします
- 開発環境とDRP(X3)を USB Type-Cケーブルで接続します
- DahliaボードのHDMI端子とLCDをHDMIケーブルで接続します
- LCDのタッチパネルをターゲットのUSB-Aポートに接続します
- ACアダプタを接続
- RECOVERY(SW5)を押したままにしながら、ON/OFF(SW3)を押し、電源投入します
- 5秒経過後RECOVERY(SW5)を離します
Recoveryモードに入るとLinux側にNXPのUSBデバイスが認識されます。
[ 6459.444440] usb 3-2: new high-speed USB device number 5 using xhci_hcd
[ 6461.504752] usb 3-2: New USB device found, idVendor=1fc9, idProduct=0146, bcdDevice= 0.02
[ 6461.504759] usb 3-2: New USB device strings: Mfr=1, Product=2, SerialNumber=0
[ 6461.504760] usb 3-2: Product: SE Blank 865
[ 6461.504761] usb 3-2: Manufacturer: NXP SemiConductor Inc
cd Verdin-iMX8MP_ToradexEasyInstaller_7.4.0+build.8/
./recovery-linux.sh
これで、Easy Installerでの起動が開始されます。起動に成功するとUSB Gadget経由でネットワークが接続されます。KRDCを起動するとターゲットが認識されるので接続します。
その後、LANケーブルを接続するとネットワーク経由でインストール可能なイメージが表示されます。Torizon OS Easy Pairing 7.4.0を選択しインストールします。
開発
ターゲットの起動
開発環境とDEBUG(X18)も USB Type-Cケーブルで接続し電源を投入すると、以下のデバイスが有効になります。
-/dev/ttyUSB0
-/dev/ttyUSB1
-/dev/ttyUSB2
-/dev/ttyUSB3
このうち/dev/ttyUSB3にはシリアルコンソールが出ているので、Visual Studo Codeの拡張などで接続してログインしてください。初期アカウントは以下の通りです。
- user : torizon
- password: torizon
初回接続時はパスワードの変更を求められるので好きなものに変更してください。
以下のコマンドでIPアドレスを確認してください。
ip a
Visual Studio Codeでのログイン
- Torizon拡張でAddを選択する
- IPアドレスを入力
- SSHポートはそのまま
- userはtorizon
- パスワードは先程変更したもの
これで接続できます(Cluod Pairでも接続できるのですが、今回はCloudを使わない方法を使います)。
ターゲットが認識されるのでデフォルトに設定します。
Slintプロジェクトの作成
エクスプローラにNew Torizon Projectが追加されているのでこちらで作成します。
workspace nameを入力し、Workspace Projectの+を選択する。
テンプレートの中からSlintを選択します。今回はRustで。
プロジェクト名、コンテナ名をつけてワークスペースに追加します。
内容を確認後、Create Projectを行います。
これで、テンプレートプロジェクトが追加されます。
なお、なぜかそのままだとbuild-argがうまく渡らないので、今回は少し横着をしてDockerfile.debugに手を入れます。原因がわかったら追記・修正します。
ARG IMAGE_ARCH=arm64
:
ARG GPU=-imx8
これでデバッグと実行からarm64をターゲットとして選択し実行します。
これで、アプリケーションの起動ができます。
まとめ
今回は、Toradex社のTorizon OS上でSlintアプリの作成までを見てみました。
今回ハマった罠としては
- docker-composeが5系になるとdocker compose pullがエラーになる
でした。まぁ、一般的な組込みのスタイルに比べると少し複雑な機構を取り入れているので、罠にハマったときの知識量がちょっと不足していました。学び足りないなぁ…
なお、Slintコンテナビルドは、Qtアプリコンテナに比べると色々ダウンロードしたりするためかだいぶビルドに時間がかかる印象です。今回はSlint部分しか見せていませんがアプリケーション用のテンプレート色々あるので、気になる方は会社のお偉いさんにでも、クリスマスプレゼントとしてねだって見るのも良いかもしれませんね。














