2026 年 04 月 14 日 ソリューション統括部
本記事は、「Zephyrブログ 第一回 はじめての Zephyr(前編)」の後編となります。
後編では、Zephyr 環境の準備からはじまり、Zephyr 用アプリケーションの構築・実行を行った際の手順を紹介いたします。
前編の閲覧がまだの方はぜひ前編からご覧ください。
Zephyr は、MIMXRT1170-EVKB ボードの QSPI Flash に構築したイメージを書き込むとき、MCUXpresso IDE の中の LinkServer コマンドを使用します。
(/usr/local/LinkServer/LinkServer)
そこで、まずは MCUXpresso IDE をインストールします。
https://mcuxpresso.nxp.com/ サイトの上の段にアイコンが並んでいます。
その中の "IDE" と書かれたアイコンをクリックすると MCUXpresso IDE のページに移動します。
そのページ内に DOWNLOADS のボタンがあるのでクリックしてください。
その後、「DOWNLOAD ボタン」 → 最新バージョンの「MCUXpresso IDE」を選択 → 「I Agree」を行っていくとインストーラの選択ページに行き着くので、mcuxpressoide-<version>.x86_64.deb.bin を選択してダウンロードしてください。
2026-02-17 時点では mcuxpressoide-25.6.136.x86_64.deb.bin となっていました。

これらは MCUXpresso IDE が必要とするパッケージです。
libncurses6, libncursesw6 は通常の手順でインストールできますが、
libpython3.8 が標準では Ubuntu 24.04 にありません。
libpython3.8 のインストールは、次の手順で行ってください。
$ sudo apt install -y software-properties-common $ sudo add-apt-repository -y ppa:deadsnakes/ppa $ sudo apt update $ sudo apt install -y libpython3.8
$ chmod +x mcuxpressoide-25.6.136.x86_64.deb.bin $ sudo ./mcuxpressoide-25.6.136.x86_64.deb.bin -- --acceptLicense
"-- --acceptLicense" オプションは、ライセンスの確認画面を表示せずにライセンスに同意するオプションです。内容を確認したいときは外してください。
本節の最初に述べたように、
Zephyr は /usr/local/LinkServer ディレクトリ配下にある LinkServer を使用します。
パスを通しておく必要があります。
.bashrc:
export PATH=/usr/local/LinkServer:${PATH}
Zephyr の west 作業空間(west workspace)を作成します。本節は下記ページをベースにしています。
なお、一度作成した west 作業空間は、以後 3. を実行するだけで使用できます。
ここでは上記ページに倣って、~/zephyrproject ディレクトリを作業空間とします。
$ cd ~ $ mkdir zephyrproject
$ python3 -m venv ~/zephyrproject/.venv
$ . ~/zephyrproject/.venv/bin/activate
deactivate を実行すれば、失活することができます。
$ pip install west
$ west init ~/zephyrproject
.west ディレクトリと zephyr ディレクトリの二つが作成されます。
zephyr 配下に Zephyr のローカルリポジトリが作成されます。
$ cd ~/zephyrproject $ west update
参考までに west update にかかった時間は 6,7 分ほどでした。
$ west zephyr-export
これは CMake が Zephyr CMake パッケージを見つけられるようにする操作です。
Zephyr アプリは通常 CMakeLists.txt の先頭に find_package(Zephyr) を書いて Zephyr CMake パッケージの使用を宣言します。
これはつまり、CMake は Zephyr CMake パッケージがどこにあるのかに関する知識が必要ということになります。
この情報の登録を CMake はパッケージの「エクスポート」と呼んでいます。
west zephyr-export は Zephyr CMake パッケージをエクスポートします。
これはつまり、~/.cmake/packages/Zephyr ディレクトリを作って、その下に参照先を作成することを意味します。
$ west packages pip -install
$ cd ~/zephyrproject/zephyr $ west sdk install
ここで ~/zephyr-sdk-0.17.4 ディレクトリが作成され、そこにサポートされている全アーキテクチャのSDK がインストールされます。このように、デフォルトではホームディレクトリの配下に作成されますが、--install-dir や --install-base を指定して変更することもできます。
クロス gcc のコマンド名は、たとえば arm-zephyr-eabi-gcc といった名前となっています。
オプションで指定すれば、必要なアーキテクチャの分だけインストールすることも可能なようです。
ボードの写真(出典:Courtesy of NXP) :

ここから、いよいよ「アプリ」の構築とターゲットへの配備を行っていきます。 Zephyr では、Zephyr RTOS 上で走るプログラムを「アプリケーション」と呼ぶようです。
→ たとえば
本記事では「アプリ」と呼ぶことにしました。
アプリの構築には west build コマンドを使用します。 このコマンドにはさまざまなオプションがあるようですが、基本的なコマンド行はつぎのようになります。
west build -b ボード名 ソースディレクトリ
ボード名 は "mimxrt1170_evk/mimxrt1176/cm7" になります。旧ボードの MIMXRT1170-EVK と新ボードの MIMXRT1170-EVKB とがありますが、そして今回使用しているのは EVKB のほうですが、この ボード名 で EVKB のイメージが構築されます。EVK のほうを構築したいときは "mimxrt1170_evk@A/mimxrt1176/cm7" とすればよいようです。
一方、EVKB を明示したときは "mimxrt1170_evk@B/mimxrt1176/cm7" とします。 まとめると
こうしたボードの変異の存在は zephyr/boards/nxp/mimxrt1170_evk/board.yml が与えるようです。
このファイルには、A と B の二つのリビジョンがあることと、デフォルトが B であることが示されています。

ボードの諸元は、第一義的にはデバイスツリーソース dts ファイルが与えるので(と思われるので)、west build に与えるボード名はそれを指定しているのだと思います。
Zephyr では dts は、構築時に参照しているそうですが(Linux は基本的にブート時のみ)、使用すべきドライバの選択にまで影響を及ぼすことはないようです(まだよく読んでいませんが、https://docs.zephyrproject.org/latest/build/dts/dt-vs-kconfig.html#dt-vs-kconfig 参照)。
なお、dtb もあって実行時にも参照している可能性もありますが、わかっていません。
ソースディレクトリ はアプリのソースがあるディレクトリを指定します。
ここでは samples/hello_world を指定することにします。
west build コマンドには、そのほか重要なオプションに -p があります。
p は pristine(初期状態)の頭文字です。
west build コマンドはデフォルトでカレントに build ディレクトリを作成してその下にオブジェクトファイルを作りますが、-p はその扱いに関するオプションです。
-p オプションは引数に次のいずれかを取り得えます。
-p だけを指定して引数を渡さないとき -p always の意味になります。
west コマンドは、「コンフィグ」を使ってさまざまなデフォルト動作を変更することができるようなのですが、-p オプションを指定しなかった場合も「コンフィグ値」が使用されます。
-p オプションに関する「コンフィグ」を行っていない場合で、かつ -p を指定していないときは、-p never の意味になります。
-p always では build ディレクトリを一旦削除するようなので、何かと安全でありたいときは -p always とするのがよさそうです。
また、次のようなシチュエーションでは -p always は実際に役に立ちます。
アプリを一度構築したあと、別のアプリを -p never の意味になるようなコマンド行で構築しようとすると、次のようなエラーになります。
$ west build -b mimxrt1170_evk/mimxrt1176/cm7 samples/subsys/shell/shell_module ERROR: Build directory "/home/soka/zephyrproject/zephyr/build" is for application "/home/soka/zephyrproject/zephyr/samples/hello_world", but source directory "/home/soka/zephyrproject/zephyr/samples/subsys/shell/shell_module" was specified; please clean it, use --pristine, or use --build-dir to set another build directory FATAL ERROR: refusing to proceed without --force due to above error
このようなとき、二つの構築イメージを保持しておく必要がないなら -p always の出番となります。ちなみに、この場合は -p auto でもうまくいきました。
つまるところ構築のコマンド行は、たとえば次のようになります。
$ cd ~/zephyrproject/zephyr $ west build -p always -b mimxrt1170_evk/mimxrt1176/cm7 samples/hello_world
構築したアプリの配備には west flash コマンドを使用します。MIMXRT1170-EVKB の場合、それは「シリアルダウンローダ・モードを使用して QSPI Flash」へ書き込むことを意味するようです。
以下、手順です。
ボードと開発ホストマシンとを USB ケーブルで接続する。→ シリアルコンソールの設定
開発ホストマシンには /dev/ttyACM0 が現れると思います。
west flash コマンドを使用して前節で構築したアプリイメージを QSPI Flash に書き込む。
この時、/dev/ttyACM0 を minicom などで開いていると書込みに失敗するので、気を付けてください。
(.venv) user:~/zephyrproject/zephyr$ west flash -- west flash: rebuilding ninja: no work to do. -- west flash: using runner linkserver RUNNER - gdb_port = 3333, semih port = 8888 -- runners.linkserver: LinkServer: /usr/local/LinkServer/LinkServer, version v25.6.131 INFO: Exact match for MIMXRT1176xxxxx:MIMXRT1170-EVKB found INFO: Selected device MIMXRT1176xxxxx:MIMXRT1170-EVKB INFO: Getting available probes INFO: Selecting probe by index INFO: Selected probe #1 0TS4YIN1R12CS (MCU-LINK on-board (r0E2) CMSIS-DAP V2.250) INFO: MCU-Link firmware update `check`: not supported on probe ([0TS4YIN1R12CS] [MCU-LINK on-board (r0E2) CMSIS-DAP V2.250]). Only probes running firmware V3.122 or later can be updated automatically
minicom などのシリアル端末を /dev/ttyACM0 に対して開き、ボードの電源を投入する。
次のようなメッセージが端末に現れるはずです。
*** Booting Zephyr OS build v4.3.0-6216-gac63d0e0a8de *** Hello World! mimxrt1170_evk@B/mimxrt1176/cm7

これまで明示して言及はしてきませんでしたが、MIMXRT1170-EVKB ボード用のアプリの構築では、標準では CONFIG_XIP が有効化されます。
これはコンパイルされた機械語命令列が「その場で実行」されることを前提とするコードになっていることを意味します。
MIMXRT1170-EVKB ボードには W25Q512NWEQ という 512 Mb の NOR Flash が QSPI 接続されて搭載されています。
SPI はシリアルバスで、それに接続される NOR Flash もポートアクセスですが、i.MX RT1170 プロセッサに搭載されている FlexSPI コントローラはそれをアドレッシング可能にしています。
この FlexSPI のようなデバイスがあることにとても驚いたのですが、Gemini によると、「近年の高性能マイコンにおいて非常に一般的」なのだそうです。
構築されたイメージファイルは zephyrproject/zephyr/build/zephyr 配下に置かれますが、そこにある zephyr.map を見てみると、.text セグメントは、参考資料 2) によると"FlexSPI1/FlexSPI1 cipher text" 領域 [0x3000_0000, 0x4000_0000] にあたる 0x300023b8 に配置されています。
また、.bss セグメントは、SEMC0(SDRAM が接続されていると思われるメモリコントローラ)領域 [0x8000_0000, 0x9000_0000] にあたる 0x80000088 になっています。

本節は https://docs.zephyrproject.org/latest/develop/west/config.html#configuration をもとにしています。
west はコンフィグファイルを使用して「設定」を保存しておくことができます。 コンフィグファイルは三種類あります。この順で優先度が高くなります。
ちなみに、Zephyr の west 作業空間を最初に作ったときのローカルコンフィグファイルの内容は次のようになっています。
[manifest] path = zephyr file = west.yml
west コンフィグ値は west config コマンドを使って見たり変更したりできます。
上で述べた三つのレベルのうち、どのレベルのコンフィグ値を参照するかはオプション --system, --global, --local で指定します。いずれも指定しなければ --local の意味になります。
west ビルトインコマンドでサポートされているコンフィグは下記にあります。
https://docs.zephyrproject.org/latest/develop/west/config.html#built-in-configuration-options
Zephyr が追加している west 拡張コマンドのうち下記のものには、それぞれに追加のコンフィグがあります。
west build の -p オプションに対応するコンフィグは build.pristine です。
次のようにすると -p オプションが指定されないとき -p always の意味になります。
west config build.pristine always
2025 年 05 月 14 日 Vigiles サポート
2024 年 09 月 02 日 Vigiles サポート
2024 年 03 月 01 日 Vigiles サポート
2026 年 02 月 09 日 Yocto Project よもやま話
2026 年 02 月 09 日 Yocto Project よもやま話
2026 年 02 月 09 日 Yocto Project よもやま話
2024 年 01 月 10 日 Linux 技術ネタ
2023 年 12 月 12 日 Linux 技術ネタ
2023 年 03 月 31 日 Linux 技術ネタ
2025 年 12 月 01 日 イベントレポート
2025 年 08 月 08 日 イベントレポート
2024 年 12 月 06 日 イベントレポート
2025 年 04 月 01 日 リクルート
2023 年 05 月 30 日 リクルート
2022 年 12 月 27 日 リクルート
2026 年 04 月 09 日 信州リネオ便り
2026 年 02 月 09 日 信州リネオ便り
2026 年 01 月 06 日 信州リネオ便り
2026 年 04 月 14 日 ソリューション統括部
2026 年 03 月 18 日 ソリューション統括部
2019 年 12 月 10 日 ソリューション統括部
2019 年 12 月 13 日 マーケティング統括部
2019 年 04 月 25 日 マーケティング統括部
2018 年 12 月 18 日 マーケティング統括部