Armadillo-900でリアルタイム処理開発(1)2025/08/22
ファームウェアをビルドする
アットマークテクノ社から販売されているArmadillo-900は、超小型・省電力のCPUモジュールです。NXP社のi.MX 8ULPプロセッサを搭載し、IoTゲートウェイをはじめ、さまざまな分野での組込み製品の開発に応用できます。
i.MX 8ULPはLinuxが動作するArm® Cortex®-A35(2個)と、リアルタイム処理のCortex-M33のヘテロジニアスマルチコア構成となっていますが、本稿ではCortex-M33でのFreeRTOSアプリケーション開発について見ていきましょう。
機材と環境
Armadillo-900には開発セットが用意されていますので、この開発ボードを使用して話を進めていきます。

以下に今回使用した機材とソフトウェアを列挙します。
- ボード: Armadillo-900開発セット
- 仮想環境: VirtualBox
- 開発環境: ATDE9
- ターミナルソフト: TeraTerm
- デバッガ: PALMiCE4 ARM64
開発環境としてアットマークテクノ社から提供されているATDEを使用します。ATDEはVirtualBoxで 動作するイメージファイルで提供されており、Armadillo-900の開発に必要な設定が完了した状態ですので、すぐに動作確認を行うことができます。そのほか、Linuxの動作確認用にTeraTermをコンソール出力用に使用します。また、最終的なリアルタイム処理の動作確認にJTAG-ICEのPALMiCE4を使用します。
ATDEのセットアップ
Armadillo-900のマニュアルに記載されている通り、ATDEのイメージファイルをArmadilloサイトからダウンロードします。現時点(2025年7月)のファイル名は「atde9-amd64-20250528.ova」となっていました。仮想環境のイメージファイルですので3.6GBと少し大きめです。このファイルをVirtualBoxにインポートすれば、ATDEのセットアップは完了です。
あとはVirtualBoxマネージャーからATDEを起動します。
この後のCortex-M33ファームウェアのビルドなどはATDE上で行います。
ビルドツールの準備
Cortex-M33のファームウェアは、ブートローダのビルド手順で作成されます。ATDE にあらかじめ用意されているファームウェアはリリース版なので、デバッガで扱えるようデバッグ版を再構築します。ファームウェアをビルドするためにgcc-armとその他ツール等を使用しますが、初期状態のATDEにはインストールされていませんのでインストールします。ATDEでコンソール端末を開いて以下のコマンドを実行します(緑色の文字が入力文字です)。
atmark@atde9:~$ sudo apt install build-essential git wget crossbuild-essential-arm64 bison flex zlib1g-dev python3-pycryptodome python3-pyelftools python3-cryptography device-tree-compiler [sudo] atmark のパスワード: ***** パッケージリストを読み込んでいます... 完了 依存関係ツリーを作成しています... 完了 状態情報を読み取っています... 完了 bison はすでに最新バージョン (2:3.7.5+dfsg-1) です。 :(省略) python3-cryptography (3.3.2-1+deb11u1) を設定しています ... Scanning processes... Scanning linux images... Running kernel seems to be up-to-date. No services need to be restarted. No containers need to be restarted. No user sessions are running outdated binaries.
続いてgcc-armをインストールします。
atmark@atde9:~$ sudo apt install gcc-arm-none-eabi
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています... 完了
状態情報を読み取っています... 完了
以下の追加パッケージがインストールされます:
binutils-arm-none-eabi libnewlib-arm-none-eabi libnewlib-dev
libstdc++-arm-none-eabi-newlib
:(省略)
libstdc++-arm-none-eabi-newlib (15:8-2019-q3-1+13) を設定しています ...
man-db (2.9.4-2) のトリガを処理しています ...
libc-bin (2.31-13+deb11u12) のトリガを処理しています ...
Scanning processes...
Scanning linux images...
Running kernel seems to be up-to-date.
No services need to be restarted.
No containers need to be restarted.
No user sessions are running outdated binaries.
このシステムはgcc-armがインストールされることで、ファームウェアが自動的にビルドされる仕組みになっています。
最新ファームウェアソースの取得
次はソースコードを更新します。ATDEにパッケージされているソースコードは若干古めかもしれませんので、アットマークテクノ社の公式ウェブサイトとGitHubから最新ソースを取得します。まずブートローダーをwgetコマンドでダウンロードしてtarコマンドで展開します。 ブートローダーのファイル名はバージョンによって変化しますので、ダウンロードサイトを確認してください。
atmark@atde9:~$ wget https://download.atmark-techno.com/armadillo-900/bootloader/imx-boot-2023.04-at5.tar.zst --2025-08-08 11:22:09-- https://download.atmark-techno.com/armadillo-900/bootloader/imx-boot-2023.04-at5.tar.zst download.atmark-techno.com (download.atmark-techno.com) をDNSに問いあわせています... 18.178.129.128, 54.64.102.35, 18.181.73.254 download.atmark-techno.com (download.atmark-techno.com)|18.178.129.128|:443 に接続しています... 接続しました。 HTTP による接続要求を送信しました、応答を待っています... 200 OK 長さ: 46293849 (44M) [application/zstd] `imx-boot-2023.04-at5.tar.zst.1' に保存中 imx-boot-2023.04-at 100%[===================>] 44.15M 11.1MB/s 時間 4.1s 2025-08-08 11:22:14 (10.7 MB/s) - `imx-boot-2023.04-at5.tar.zst.1' へ保存完了 [46293849/46293849] atmark@atde9:~$ tar xf imx-boot-2023.04-at5.tar.zst atmark@atde9:~$ cd imx-boot-2023.04-at5
次にCortex-M33のファームウェアをダウンロードします。現在のソースは削除して、最新ソースと完全に置き換えます。
atmark@atde9:~/imx-boot-2023.04-at5$ rm -rf m33_firmware_at atmark@atde9:~/imx-boot-2023.04-at5$ git clone https://github.com/atmark-techno/m33-firmware-at m33_firmware_at Cloning into 'm33_firmware_at'... remote: Enumerating objects: 1679, done. remote: Counting objects: 100% (1679/1679), done. remote: Compressing objects: 100% (653/653), done. remote: Total 1679 (delta 1119), reused 1550 (delta 990), pack-reused 0 (from 0) Receiving objects: 100% (1679/1679), 601.55 KiB | 6.83 MiB/s, done. Resolving deltas: 100% (1119/1119), done.
ソースの取得が完了したので、続いてヘッダファイルを一つ変更します。これはCortex-M33をデバッガで停止させると、ウォッチドッグタイマによりArmadillo-900がシステムリセットされるのを禁止するための変更です。./m33_firmware_at/main.hを開いて、以下の定義を有効にします。
/* disable watchdog timer to avoid accidental reset during debug */ #define DEBUG_DISABLE_WDOG 1
ファームウェアのビルド
次にbuildシェルを実行してビルドターゲットをデバッグ版に切り替えて、makeを実行します。何かエラーっぽいものが表示されますが、そのまま進みます。
atmark@atde9:~/imx-boot-2023.04-at5$ ./m33_firmware_at/armgcc/build.sh debug
CMake Warning:
No source or binary directory provided. Both will be assumed to be the
same as the current working directory, but note that this warning will
become a fatal error in future CMake releases.
:(省略)
makeを実行してファームウェアをビルドします。
atmark@atde9:~/imx-boot-2023.04-at5$ make imx-boot_armadillo-900
! [ -e .git ] || git submodule update -i --recursive
# cannot use -C because it outputs file in WD which can be yet
# another directory if called with make -C externally
cd imx-mkimage & make
make[1]: ディレクトリ '/home/atmark/imx-boot-2023.04-at5/imx-mkimage' に入ります
Compiling mkimage_imx8
gcc -g -O2 -Wall -std=c99 -static src/imx8qxb0.c src/mkimage_imx8.c -o /home/atmark/imx-boot-2023.04-at5/imx-mkimage/mkimage_imx8 -I src
:(省略)
3172352 bytes (3.2 MB, 3.0 MiB) copied, 0.0118537 s, 268 MB/s
make[1]: ディレクトリ '/home/atmark/imx-boot-2023.04-at5/imx-mkimage/armadillo-900' から出ます
cp imx-mkimage/armadillo-900/flash.bin imx-boot_armadillo-900
ビルドが成功すれば、m33_firmware_at/armgcc/debugに以下のファイルが作成されます。
atmark@atde9:~/imx-boot-2023.04-at5$ ls -l m33_firmware_at/armgcc/debug/
合計 2012
-rwxr-xr-x 1 atmark atmark 215796 8月 12 12:01 m33-firmware-at.bin
-rwxr-xr-x 1 atmark atmark 1852456 8月 12 12:01 m33-firmware-at.elf
ファームウェアをイメージファイルへ変換
最後にファームウェアのファイルをイメージファイルに変換して終了です。mkswuを実行する前に、アットマークテクノ社のマニュアル通り、VS Codeのメニューより「Generate Initial Setup Swu」を実行し、証明書等の初期設定を行う必要があります。
atmark@atde9:~/imx-boot-2023.04-at5$ echo 'swdesc_boot --version boot 2023.4-at.5.1 imx-boot_armadillo-900' < boot.desc
atmark@atde9:~/imx-boot-2023.04-at5$ mkswu boot.desc
Enter pass phrase for /home/atmark/mkswu/swupdate.key:
boot.swu を作成しました。
atmark@atde9:~/imx-boot-2023.04-at5$ ls -l boot.swu
-rw-r--r-- 1 atmark atmark 1011200 8月 12 14:15 boot.swu
boot.descを作る際にバージョンの指定が新しくないと次のステップのswuのインストールに失敗しますので注意が必要です。
ファームウェアのインストール
ここまででboot.swuというブートイメージファイルが作成されました。今度はこのファイルをArmadillo-900に転送します。Armadillo-900の開発ボードにLANとコンソール(USB Type-C)とACアダプタを接続し、電源をONにします。

コンソールとして、パソコン上でTeraTermを起動しておきます。

Linuxが起動するまで待ちます。起動したら、ATDEでブラウザ(FireFox)を起動します。FireFoxのアドレスバーに「https://armadillo.local:58080」を入力します。セキュリティの警告が表示されますが、無視して進みます。

そうするとArmadillo Base OSのログイン画面(初回設定の場合はパスワードの設定画面)が表示されます。ログインするとメニュー画面が表示されます。

SWUインストールをクリックして、boot.swuをインストールします。initial_setup.swuのインストールがまだの場合は、画面の指示に従って先にインストールします。

インストールに成功すると以下の画面が表示され、Armadillo-900が新しいファームウェアで再起動します。

以上がファームウェアの更新手順です。Cortex-M33のソースを変更した場合は、セキュリティ上、若干面倒ですがこの手順でファームウェアを書き換える必要があります。
次回はデバッガを接続して、書き込んだファームウェアの動作確認を行います。